|
SQLCONNECT
|
|||
---|---|---|---|
#18+
Добрый день! Озадачился таким вопросом. Как лучше управлять количеством соединений? У меня вначале создается PUBLIC pnConnHandle pnConnHandle = SQLSTRINGCONNECT(lcDSN,.T.) Потом я получаю lnconnection = SQLCONNECT(pnConnHandle) Но форм много, часть модальные, где-то курсорадаптеры. Использовать один lnconnection и передавать его в формы как параметр? Или (собственно как сейчас) я создаю в модальной форме новый lnconnection = SQLCONNECT(pnConnHandle) и потом его в unload формы прибиваю SQLDISCONNECT-ом? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2014, 21:20 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
miv32, коннект делаешь один раз и этого достаточно. В главной программе, та что черненькая в проекте (и первый запуск приложения происходит оттуда), объявляешь Public pnConnHandle. В нужном месте (например после проверки пароля на вход) делаешь подключение pnConnHandle = SQLSTRINGCONNECT(lcDSN,.T.) один раз и забываешь про SQLSTRINGCONNECT. А дальше используешь только SQLExec(pConnectionHandle,"бла бла бла","имя курсора"). А SQLDISCONNECT используешь при выходе из программы. Использовать pnConnHandle = SQLSTRINGCONNECT(lcDSN,.T.) каждый раз, когда тебе надо какие то данные выбрать не надо, следовательно и SQLDISCONNECT потом делать не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 08:23 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
Это понятно. stringconnect и сделан один раз. :) Вопрос то о другом... Сколько можно плодить "дочерних" коннектов? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 08:43 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
miv32, а для чего плодить то? Какой смысл в ОДНОМ приложении плодить одно и то же подключение? Или у Вас несколько разных таблиц (например, 5 файлов *.gdb или *.fbd) и для разных форм Вы их подключаете и чего то там с ними мудрите? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 09:11 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
SQLSTRINGCONNECT([lShared] | [cConnectString [, lSharable]]) - Устанавливает Соединение с Источником Данных используя строку параметров Соединения. SQLEXEC(nStatementHandle [, cSQLCommand [, cCursorName[, aCountInfo]]]) - Передает команду SQL удаленному Источнику Данных (Серверу), где данная команда обрабатывается. SQLDISCONNECT(nStatementHandle) - Закрывает Соединение с удаленным источником Данных . Зашел в программу, создал подключение SQLSTRINGCONNECT, дальше в программе используешь SQLEXEC, перед выходом из программы SQLDISCONNECT. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 09:22 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
Ну вот смотри, для примера. Есть главная форма с гридом, для которого источник данных получен через sqlconnect Вызываем модальную форму с передачей параметров для редактирования. В модальной форме я должен получить курсор опять-таки через sqlconnect. Спрашивается, получать новый хендл или из главной формы его тянуть? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 10:03 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
miv32Ну вот смотри, для примера. В модальной форме я должен получить курсор опять-таки через sqlconnect. Спрашивается, получать новый хендл или из главной формы его тянуть? Хорошо, что пример написал. Я Вас понял. ))) Чтобы получать курсоры в модальной форме (да и в любой последующей) НЕ НАДО снова и снова использовать sqlconnect. Не надо!!! Подключение уже есть к твоему источнику данных, т.е. к таблице *.gdb или *.fbd (оно создалось вот тут pnConnHandle = SQLSTRINGCONNECT(lcDSN,.T.)). И это подключение НЕ НАДО КАЖДЫЙ РАЗ пересоздавать!!! Его делаешь один раз и всё! Т.е. получать новый хендл не надо! Просто при Init-событии модальной формы, чтобы получить курсор используешь команду SQLExec(pnConnHandle,"select * from table1","name_cursor"). После этой команды создастся курсор name_cursor с данными из таблицы table1. А дальше Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 10:27 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
Для простого селекта это может и хорошо. А для CursorAdaptera? А если их несколько? А если пока в один курсор записи еще фетчаться, а в друм надо работать? Пока фетчаться в один, соединение как известно занято. Вот поэтому pnConnHandle = SQLSTRINGCONNECT(lcDSN,.T.) делается один раз. А SQLCONNECT(pnConnHandle) - можно много, для каждого CA. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 10:43 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
miv32, а ты уверен, что их физически получается несколько? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 11:14 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
Не уверен, поэтому и спрашиваю. Но каждый новый SQLCONNECT(pnConnHandle) создает свой номер q = SQLCONNECT(pnConnHandle) w = SQLCONNECT(pnConnHandle) ? q ? w Разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 11:43 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
Скорей всего, они только внутри твоей программы разные, а в пуле соединений снова объединяются в один. Поэтому смысла нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 12:39 |
|
SQLCONNECT
|
|||
---|---|---|---|
#18+
Fffffffffff, нет. Они физически разные. Есть команда Prepare. Посмотри. Тогда поймешь, сколько коннектов тебе надо. Может 1, может сотни открывающихся и закрывающих ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 14:41 |
|
|
start [/forum/topic.php?fid=41&fpage=28&tid=1582499]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 317ms |
total: | 463ms |
0 / 0 |