Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Даже стыдно спрашивать об этом / 9 сообщений из 9, страница 1 из 1
23.12.2004, 21:17:59
    #32842780
Andrey13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Даже стыдно спрашивать об этом
есть форма
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 таже ситуация.
Пожалуйста разъясните неучу.
...
Рейтинг: 0 / 0
23.12.2004, 21:47:33
    #32842798
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Даже стыдно спрашивать об этом
Лучше по-другому. Создай отдельный класс для работы с базой. В нем держи соеденение, создай метод пару пертодов для выборки данных и возвращай из них рекордсеты.


Magnus
...
Рейтинг: 0 / 0
23.12.2004, 22:03:22
    #32842807
Andrey13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Даже стыдно спрашивать об этом
Я уже наворотил программу форм полсотни будет. Но одновременно открытых больше нет. Т.е. Одна Load предыдущая Unloud.
При Unloud Form Connect закрывается сам cобой или нет?

Если переделаю ускорит работу заметно?
А то боюсь начну менять попрут глюки, а программу уже юзают в трех местах, и "на горячую" внедряю (старую выбросили и на новой считаем), облажаться смерти подобно.
...
Рейтинг: 0 / 0
24.12.2004, 00:01:31
    #32842877
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Даже стыдно спрашивать об этом
Если соеденение обьявлено локально в форме то да , зкрывается, т.к. переменная выходит из области видимости. Выигрышь в производительности небольшой будет, но сомневаюсь что это кто то заметит. В случае отдельного класса, соеденение можно всегда держать открытым и использовать по мере надобности(не забудь обработать событие разрыва соеденения и переподключится либо выдать ошибку), будешь экономить ба времени открытия. Но это время довольно мало и глазом практически не заметно. Если действительно хочешь ускорить роботу то смотреть нужно в первую очередь логику запросов и самого приложения.

Magnus
...
Рейтинг: 0 / 0
24.12.2004, 00:34:31
    #32842889
Andrey13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Даже стыдно спрашивать об этом
Спасибо за консультацию
...
Рейтинг: 0 / 0
24.12.2004, 10:15:53
    #32843147
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Даже стыдно спрашивать об этом
Присоединюсь к Magnus23.
Лучше поддерживать одно соединение на все приложение.
Одно дополнение: можно разместить коннекшн и часть рекордсетов (каких - по ситуации.) просто в модуле (если с классами не дружим).
Form1:
rsS.Open "SELECT * FROM " & ТаблицаИмя, Module1.Conn1, adOpenStatic, adLockBatchOptimistic, adCmdText
К постоянно открытому рекордсету в модуле - ч/з Set rs = Module1.rs1.Clone (это об ускорении).
Напомню про sub Main:
в ней можно организовать октрытие коннекшена и подгрузку имени источника данных из ini
...
Рейтинг: 0 / 0
25.12.2004, 00:39:12
    #32844719
Andrey13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Даже стыдно спрашивать об этом
и еще раз спасибо
...
Рейтинг: 0 / 0
25.12.2004, 11:11:16
    #32844784
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Даже стыдно спрашивать об этом
WorobjoffЛучше поддерживать одно соединение на все приложение.
Одно дополнение: можно разместить коннекшн и часть рекордсетов (каких - по ситуации.) просто в модуле (если с классами не дружим).
К постоянно открытому рекордсету в модуле - ч/з Set rs = Module1.rs1.Clone (это об ускорении).
Напомню про sub Main:
в ней можно организовать октрытие коннекшена и подгрузку имени источника данных из iniOK.
Добавлю только, что connection лучше открывать для заполнения рекордсета (если его можно держать на клиентской стороне),
а затем отключать последний и закрывать соединение.
Повторное открытие соединения происходит существенно быстрее:
сервер обычно кеширует параметры connection'а.
Это оптимальный подход при построении отчётов.
Строку подключения целесообразно формировать один раз на сеанс.
...
Рейтинг: 0 / 0
27.12.2004, 09:59:30
    #32845435
FlyNC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Даже стыдно спрашивать об этом
Magnus23 предлагает оптимальный вариант решения. Хочу только добавить из своего опыта.
Открытие Connection в общем модуле удобно для формирования рекордсетов, но в случае применения метода Execute работает асинхронно - т.е. в форме не активизируются результаты исполнения данной SQL директивы.
Я столкнулся с этим при попытке очистить временную таблицу - conn.Execute " DELETE * FROM TempTable" в событии открытия формы не дает результата. Однако в случае объявления соединения непосредственно в модуле формы все работает.
Предлагаю объявлять строку подключения как глобальную переменную в общем модуле проекта и там же открывать соединение, но использовать локальные соединения на основе строки подключения.
При этом строку подключения можно считывать из внешнего источника (например, текстового файла) что дает большую гибкость при перенастройке программы.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Даже стыдно спрашивать об этом / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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