|
|
|
Даже стыдно спрашивать об этом
|
|||
|---|---|---|---|
|
#18+
есть форма MainForm, в ней в General Dim conn As ADODB.Connection потом Private Sub Form_Load() Set SetConn = New ADODB.Connection SetConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data/File.mdb;Persist Security Info=True" SetConn.Open "data/File.mdb" .......... End Sub MainForm загружена всегда Потом открываем Form1, и что снова Dim conn As ADODB.Connection Set SetConn = New ADODB.Connection SetConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data/kvartplata.mdb;Persist Security Info=True" SetConn.Open "data/File.mdb" Нужно использовать из MainForm, но как? MainForm.Conn? И RecordSet таже ситуация. Пожалуйста разъясните неучу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 21:17:59 |
|
||
|
Даже стыдно спрашивать об этом
|
|||
|---|---|---|---|
|
#18+
Лучше по-другому. Создай отдельный класс для работы с базой. В нем держи соеденение, создай метод пару пертодов для выборки данных и возвращай из них рекордсеты. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 21:47:33 |
|
||
|
Даже стыдно спрашивать об этом
|
|||
|---|---|---|---|
|
#18+
Я уже наворотил программу форм полсотни будет. Но одновременно открытых больше нет. Т.е. Одна Load предыдущая Unloud. При Unloud Form Connect закрывается сам cобой или нет? Если переделаю ускорит работу заметно? А то боюсь начну менять попрут глюки, а программу уже юзают в трех местах, и "на горячую" внедряю (старую выбросили и на новой считаем), облажаться смерти подобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 22:03:22 |
|
||
|
Даже стыдно спрашивать об этом
|
|||
|---|---|---|---|
|
#18+
Если соеденение обьявлено локально в форме то да , зкрывается, т.к. переменная выходит из области видимости. Выигрышь в производительности небольшой будет, но сомневаюсь что это кто то заметит. В случае отдельного класса, соеденение можно всегда держать открытым и использовать по мере надобности(не забудь обработать событие разрыва соеденения и переподключится либо выдать ошибку), будешь экономить ба времени открытия. Но это время довольно мало и глазом практически не заметно. Если действительно хочешь ускорить роботу то смотреть нужно в первую очередь логику запросов и самого приложения. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 00:01:31 |
|
||
|
Даже стыдно спрашивать об этом
|
|||
|---|---|---|---|
|
#18+
Спасибо за консультацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 00:34:31 |
|
||
|
Даже стыдно спрашивать об этом
|
|||
|---|---|---|---|
|
#18+
Присоединюсь к Magnus23. Лучше поддерживать одно соединение на все приложение. Одно дополнение: можно разместить коннекшн и часть рекордсетов (каких - по ситуации.) просто в модуле (если с классами не дружим). Form1: rsS.Open "SELECT * FROM " & ТаблицаИмя, Module1.Conn1, adOpenStatic, adLockBatchOptimistic, adCmdText К постоянно открытому рекордсету в модуле - ч/з Set rs = Module1.rs1.Clone (это об ускорении). Напомню про sub Main: в ней можно организовать октрытие коннекшена и подгрузку имени источника данных из ini ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 10:15:53 |
|
||
|
Даже стыдно спрашивать об этом
|
|||
|---|---|---|---|
|
#18+
и еще раз спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2004, 00:39:12 |
|
||
|
Даже стыдно спрашивать об этом
|
|||
|---|---|---|---|
|
#18+
WorobjoffЛучше поддерживать одно соединение на все приложение. Одно дополнение: можно разместить коннекшн и часть рекордсетов (каких - по ситуации.) просто в модуле (если с классами не дружим). К постоянно открытому рекордсету в модуле - ч/з Set rs = Module1.rs1.Clone (это об ускорении). Напомню про sub Main: в ней можно организовать октрытие коннекшена и подгрузку имени источника данных из iniOK. Добавлю только, что connection лучше открывать для заполнения рекордсета (если его можно держать на клиентской стороне), а затем отключать последний и закрывать соединение. Повторное открытие соединения происходит существенно быстрее: сервер обычно кеширует параметры connection'а. Это оптимальный подход при построении отчётов. Строку подключения целесообразно формировать один раз на сеанс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2004, 11:11:16 |
|
||
|
Даже стыдно спрашивать об этом
|
|||
|---|---|---|---|
|
#18+
Magnus23 предлагает оптимальный вариант решения. Хочу только добавить из своего опыта. Открытие Connection в общем модуле удобно для формирования рекордсетов, но в случае применения метода Execute работает асинхронно - т.е. в форме не активизируются результаты исполнения данной SQL директивы. Я столкнулся с этим при попытке очистить временную таблицу - conn.Execute " DELETE * FROM TempTable" в событии открытия формы не дает результата. Однако в случае объявления соединения непосредственно в модуле формы все работает. Предлагаю объявлять строку подключения как глобальную переменную в общем модуле проекта и там же открывать соединение, но использовать локальные соединения на основе строки подключения. При этом строку подключения можно считывать из внешнего источника (например, текстового файла) что дает большую гибкость при перенастройке программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 09:59:30 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32843147&tid=2168399]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 302ms |

| 0 / 0 |
