powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB, Access, Массив
14 сообщений из 14, страница 1 из 1
VB, Access, Массив
    #32658062
Dm32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! Такой вот вопрос возник:
1.Как сохранить массив в mdb?
20 строк по 20 букв

2.И ещё если не трудно посоветуйте, что я сделал не так.
В ListBox из базы данных добавляю записи (около 1000),
загрузка идёт 10 сек!?!?

В модуле:

Option Explicit

Public rs As ADODB.Recordset
Public con As ADODB.Connection
Dim JRO As JRO.JetEngine

Public Sub OpenCon()

Set con = New ADODB.Connection
Dim strConn As String
strConn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DM.mdb;Persist Security Info=False"
With con
.Mode = adModeReadWrite
.CommandTimeout = 10
.ConnectionTimeout = 5
.CursorLocation = adUseClient
.Open strConn
End With

End Sub

Public Sub readDB(ByVal sSQL As String)

Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseClient
.Open sSQL, con, adOpenStatic, adLockReadOnly
End With

End Sub

В форме:

Private Sub Form_Load()

Call OpenCon
Call readDB("Select * from Diary ORDER BY Data DESC")

While Not rs.EOF
List1.AddItem Format$(rs!Data, "dd/MM/yy") & " " & rs!Empry2
rs.MoveNext
Wend
rs.Close

End Sub


Или возможно так и должно быть...
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32658106
Bolik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде все прально (насчет заполнения ListBox), почему 10 сек - не ясно.
Теперь о массиве? Тебе как надо-то? Двумерный массив?
Тогда
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim Ar( 20 , 20 ) as String
Dim S as String
For I =  0  to  19 
S="bla-bla-bla"  ' Тут надо пдумать откуда ты строки черпаишь 
For J =  0  to  19 
ar(i,j) = Mid(S,i, 1 )
Next J
Next I
подойдет?

А не проще использовать одномерный массив строк на 20 элементов, а строки потом рассматривать через функцию Mid(S,I,N) ???
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32658114
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 где ты хочешь сохранить массив? в таблице?
2 все вроде правельно, покавыряй код, попробуй избавиться от разных функций типа "формат"....
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32658182
Xcomfiles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Moжно папробовать открыть конекшен с помощю команд, должно работать
быстрее.

Примерно:
1. Dim cnn As New ADODB.Connection
Dim ccmd As New ADODB.Command
2. Расположение курсор на стороне сервера
3. Конекшен открыть с "adModeRead" параметром
4. Попробовать установить параметар сортировки в listbox, а не сортировать
recordset. (recordset загружается в оп. память, а в listbox добовляются записи
уже по порядку). Хотя в последнем точно неуверен, надо проверить.
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32658278
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это работает быстрее более чем в два раза:
Код: plaintext
1.
    Public CnDB As ADODB.Connection    Public CmDB As ADODB.Command    Public rs As ADODB.Recordset        Public Declare Function SendMessageByString Lib "user32" _                            Alias "SendMessageA" (ByVal hwnd As Long, _                            ByVal wMsg As Long, ByVal wParam As Long, _                            ByVal lParam As String) As Long    Public Const LB_ADDSTRING = &H180Public Sub LoadDB()    Dim LstHwnd As Long    Dim Dummy As Long    Set CnDB = New ADODB.Connection    With CnDB        .Provider = "Microsoft.Jet.OLEDB.4.0"        .Mode = adModeReadWrite        .ConnectionString = "С:\\db.mdb"        .Open    End With    Set CmDB = New ADODB.Command    CmDB.ActiveConnection = CnDB    \'z1 - запрос, сохранённый в БД    \'SELECT t1.f1, t1.f2 FROM t1 ORDER BY t1.f2;    With CmDB        .CommandText = "z1"        .CommandType = adCmdStoredProc        .Parameters.Refresh        Set rs = .Execute    End With    LstHwnd = Form1.List1.hwnd    Do While rs.EOF = False        Dummy = SendMessageByString(LstHwnd, LB_ADDSTRING, 0, _                Format$(rs!f2, "dd/MM/yy") & " " & rs!f1)        rs.MoveNext    Loop    rs.Close    CnDB.CloseEnd Sub
Как отформатирован этот код?
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32658460
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to marvan
как ты быстро находишь какие win api функции юзать?
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32658506
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raurto marvan
как ты быстро находишь какие win api функции юзать?
быстро? не сказал бы.
просто много своих проектов,
на диске ~ 300mb примеров на VB,
спец программы типа API-Guide, Source+,
поиск в Google и на сец. сайтах типа codearchive.com
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32658525
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к стати, SendMessageByString в приведённом примере, не вносит заметного вклада.
Более существенную роль играет использование сохранённого запроса.
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32658568
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to marvan
спасибо
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32658923
Dm32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bolik Я не против, но как?
raur Да
marvan Спасибо огромное, действительно помогло!

Вот код для сохранения в текстовой файл,
а нужно в таблицу что-то типа:


назв. полей -| LevelData1 | LevelData2 | --- | LevelData20 |
значения -

Private Sub Save_Click()

Private LevelData(1 To 20)
Dim v As Integer, h As Integer
Dim a$
Dim tile As String

Open App.Path + "\" + "DM.txt" For Output As #1
For v = 1 To 20
a$ = LevelData(v)
For h = 1 To 20
tile = Mid$(a$, h, 1)

tile="bla-bla-bla"

Print #1, tile;
Next h
Print #1, ""
Next v
Close #1

End Sub
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32661514
Dm32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну неужели мне никто не может помочь?
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32661534
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты из чего и куда кидать данные собир?
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32662130
Dm32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
raur

Должно получиться 20 строк по 20 букв, привёл пример как я сохраняю
этот массив в текстовой файл, а как эти же строки сохранить в таблицу
Б.Д. никак не соображу.
...
Рейтинг: 0 / 0
VB, Access, Массив
    #32662387
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
    Public CnDB As ADODB.Connection    Public rs As ADODB.RecordsetPublic Sub SaveData()    Dim LstHwnd As Long    Dim Dummy As Long    Dim LevelData(1 To 20) As String * 20    \'это для проверки    LevelData(1) = "У попа была собака"    LevelData(2) = "Он её любил"    \'-------------------------------------------    Set CnDB = New ADODB.Connection    With CnDB        .Provider = "Microsoft.Jet.OLEDB.4.0"        .Mode = adModeReadWrite        .ConnectionString = "C:\\db.mdb"        .Open    End With    Set rs = New ADODB.Recordset    \'таблица tData с полями LevelData1, LevelData2,...    \'                                  ... LevelData20    With rs        .ActiveConnection = CnDB        .Source = "tData"        .CursorType = adOpenKeyset        .LockType = adLockOptimistic        .CursorLocation = adUseServer        .Open , , , , adCmdTableDirect    End With    For v = 1 To 20        a$ = LevelData(v)        rs.AddNew        For h = 1 To 20            rs.Update "LevelData" & h, Mid$(a$, h, 1)        Next h    Next v    rs.Close    CnDB.CloseEnd Sub
Как отформатирован этот код?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB, Access, Массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]