|
|
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
В процедуре загрузки формы, открываю соединение с базой: ' dteRcp- DataEnvironment ' cnnRep- Connection ' GrdTot- Command rsGrdTot- Recordset With dteRcp If .cnnRep.State Then .cnnRep.Close 'в ConnectionString, объекта .cnnRep.ConnectionString = .cnnLDO.ConnectionString .cnnRep.Open If .rsGrdTot.State Then .rsGrdTot.Close .rsGrdTot.Source = .rsGrdTot.Source .rsGrdTot.Source = "SHAPE ( SHAPE {SELECT PltPrc, NmPrc, CstPrc, Amt, `Summ` " _ & "FROM qrProcPlz } AS Svod COMPUTE Svod, SUM(Svod.'Summ') " _ & "AS Aggregate1 BY 'PltPrc') AS Svod_Grouping COMPUTE " _ & "SUM(Svod_Grouping.'Aggregate1') AS TotSum, Svod_Grouping" .rsGrdTot.Open End With При первом открытии, смотрю в отладчике все нормально cnnRep.State=1 rsGrdTot.State=1 Отчет базирующийся на GrdTot работает нормально. После закрытия формы и открытия ее вновь: cnnRep.State=1, а на строке .rsGrdTot.Open вылетает ошибка - Run-Time error ‘3709’ «Не возможно использование подключения для выполнения операции. Оно закрыто или не допускается в данном контексте.» Что можно сделать, что бы обойти это? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2008, 10:54 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
Что, ни кто не работал с Command-ами с группировкой? Так а как же тогда получить самый простейший отчет в VB с итогами? Или это не тот форум? Но написано вроде Visual Basic :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2008, 19:10 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
afalОтчет базирующийся на GrdTot работает нормально. После закрытия формы и открытия ее вновь: cnnRep.State=1, а на строке .rsGrdTot.Open вылетает ошибка - Run-Time error ‘3709’ «Не возможно использование подключения для выполнения операции. Оно закрыто или не допускается в данном контексте.» Что можно сделать, что бы обойти это?Открытие и закрытие формы само по себе никак не влияет на открытие и закрытие ADO объектов. Забудь про форму, думай как правильно завершать коннект с базой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2008, 19:32 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
Да я это понимаю, но получается что как-то косвенно влияет, поскольку факт на лице. Вот если я закрываю программу полностью, т.е. заново конъекчусь к базе и создаются заново все объекты АДО, все замечательно. А при закрытии только формы и открытии ее вновь, рекордсет не открывается. Хотя при открытой форме первый раз при любом количестве отрытий отчета, ошибки нет. Нужно имитировать при закрытии формы закрытие соединения и открывать его заново при открытии, но не могу найти методы реализующие это. Вот и думал, что у кого-то уже подобные проблемы были и есть примерный алгоритм решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 08:47 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
afalНужно имитировать при закрытии формы закрытие соединения и открывать его заново при открытии, но не могу найти методы реализующие это. Вот и думал, что у кого-то уже подобные проблемы были и есть примерный алгоритм решенияНе нужно имитировать закрытие соединения, его нужно просто закрывать. У тебя в событии закрытия формы есть код типа Код: plaintext 1. Смотри где и когда ты эти коннекты и рекордсеты создаешь. Если каждый раз при открытии формы - не забывай убивать их при закрытии формы (присвой им nothing ). А вообще, открывание нового коннекта при каждом открытии формы это в 99.9% глупость. Лишняя нагрузка на сервер БД. Все можно и нужно делать через один коннект. Один юзер - один коннект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 17:55 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
«У тебя в событии закрытия формы есть код типа rs.Close conn.Close» Этот код у меня есть в первом топике. И реализуется конкретно он следующими строками: With dteRcp If .cnnRep.State Then .cnnRep.Close ' .cnnRep.ConnectionString = .cnnLDO.ConnectionString .cnnRep.Open If .rsGrdTot.State Then .rsGrdTot.Close … здесь .cnnRep это conn, а .rsGrdTot – rs. Попробовал сделать тоже самое в процедуре выгрузки формы вот так: Private Sub Form_Unload(Cancel As Integer) With dteRcp If .rsGrdTot.State Then .rsGrdTot.Close If .rsGrandTotal1.State Then .rsGrandTotal1.Close If .rsGrdTot2.State Then .rsGrdTot2.Close If .cnnRep.State Then .cnnRep.Close End With ' dteRcp.cnnRep = Nothing End Sub Результат не изменился, та же ошибка. Значит задержка по времени ни причем. А вот на строку dteRcp.cnnRep = Nothing ругается компилятор – пишет не правильное использование объекта. Почему у меня не идет это? Где-то в примерах я встречал такую запись, а у меня ошибка. «А вообще, открывание нового коннекта при каждом открытии формы это в 99.9% глупость. Лишняя нагрузка на сервер БД. Все можно и нужно делать через один коннект. Один юзер - один коннект.» Совершенно согласен! Но это не от хорошей жизни, а от недоработок Майкрософта. На одном коннекте вообще не работает. Один коннект я использую для ввода и просмотра данных, второй – для отчетов. Так работает. Дело в том, что в отчетах нужна группировка и итоговые значения, а такие Command-ы, если их посадить на один коннект, запирают все. Вот и приходится изощряться, что бы хоть что-то получилось. А база без отчетов, вообще не имеет смысла. Наверное следующий раз придется заполнять шаблоны в Excel, но по трудоемкости это вообще мрак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 16:41 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
Не забывай пользоваться кнопками SRC и QUOTE. Прочитай вот этот топик: http://www.sql.ru/faq/faq_topic.aspx?fid=202 afalПопробовал сделать тоже самое в процедуре выгрузки формы вот так: Private Sub Form_Unload(Cancel As Integer) With dteRcp If .rsGrdTot.State Then .rsGrdTot.Close If .rsGrandTotal1.State Then .rsGrandTotal1.Close If .rsGrdTot2.State Then .rsGrdTot2.Close If .cnnRep.State Then .cnnRep.Close End With ' dteRcp.cnnRep = Nothing End Sub Результат не изменился, та же ошибка. Значит задержка по времени ни причем. При чем здесь "задержка по времени"? Прогони закрытие формы в дебаггере, убедись что оно действительно закрывает коннект. Подключись как администратор к своей базе данных и посмотри количество коннектов до открытия формы со вторым коннектом и после закрытия формы. afalА вот на строку dteRcp.cnnRep = Nothing ругается компилятор – пишет не правильное использование объекта. Любая работа с объектами идет через специальное слово SET. afal«А вообще, открывание нового коннекта при каждом открытии формы это в 99.9% глупость. Лишняя нагрузка на сервер БД. Все можно и нужно делать через один коннект. Один юзер - один коннект.» Совершенно согласен! Но это не от хорошей жизни, а от недоработок Майкрософта. На одном коннекте вообще не работает.Неправда. Любую работу с базой данных можно вести на одном коннекте и одном резалтсете. У тебя их там как минимум три штуки, это плохо. В один момент времени по коннекту могут идти данные только для одного резалтсета. Не важно сколько резалтсетов и стейтментов ты подготовил, но если ты не выкачал первый резалтсет до конца - любая попытка работы со вторым резалтсетом выльется в ошибку типа "сейчас нельзя". afalОдин коннект я использую для ввода и просмотра данных, второй – для отчетов.Если привязываешь свои визуальные таблички и формы редактирования данных напрямую к резалтсет-объектам, то в этом и есть главная проблема. Гриды и отчетники по умолчанию выкачивают только столько строк, сколько нужно для показа первой странички. Что естественно блокирует все остальные резалтсеты висящие на этом же коннекте. Выкачивай данные самостоятельно в свои собственные массивы и показывай пользователю только то что находится в твоих массивах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 18:58 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Код: plaintext Код: plaintext Код: plaintext А страшного в их большом количестве ни чего нет, поскольку нельзя щелкнуть мышкой одновременно по двум объектам, а соответственно и вызвать два события и поэтому условие В один момент времени по коннекту могут идти данные только для одного резалтсета. будет выполняться. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 15:59 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
вместо "массивы" читай отсоединенные рекордсеты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 16:05 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
Не надо путать кнопки src и quote. Пользуйся кнопкой "предварительный просмотр" afalА страшного в их большом количестве ни чего нет, поскольку нельзя щелкнуть мышкой одновременно по двум объектам, а соответственно и вызвать два события и поэтому условие В один момент времени по коннекту могут идти данные только для одного резалтсета. будет выполняться. Еще раз повторяю: стандартные db-таблицы и db-формы не делают полной выборки. Они выкачивают только столько строк, сколько нужно для немедленного показа пользователю. Это означает что ты в принципе можешь держать на экране только одну таблицу или одну форму. afalВообще не слышал об этом :( Случайно ссылки нет, где можно почитать? Но ведь получится избыточность данных из базы нужно перегонять в массивы, будет и тем и тут. А как потом эти массивы подключать к Sours-ам объектов? Или опять кодом переписывать в элементы управленияЭто не так уж трудоемко и намного надежнее и удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 18:43 |
|
||
|
Не работает открытие рекордсета – АДО на ВБ6.
|
|||
|---|---|---|---|
|
#18+
Konst_One вместо "массивы" читай отсоединенные рекордсеты Ну это более понятно, только тоже упирается в Nothing. В чем моя ошибка, почему при присвоении Nothing соединению или рекордсету происходит ошибка? White Owl Еще раз повторяю: стандартные db-таблицы и db-формы не делают полной выборки. Они выкачивают только столько строк, сколько нужно для немедленного показа пользователю. Это означает что ты в принципе можешь держать на экране только одну таблицу или одну форму. Да в данном случае это не важно. Ведь работает же все как надо и сколько надо, пока не закроется и не откроется заново форма. Меняются диапазоны дат выборки и прочие условия и все выберается правильно. Ошибка только при закрытии и новом открытии формы. При закрытии и новом запуске всего приложения все опять нормализуется до закрытия этой злосчастной формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2008, 15:34 |
|
||
|
|

start [/forum/topic.php?fid=60&tid=2161620]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 483ms |

| 0 / 0 |
