|
|
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
Привет,народ! Я новичок в VB и кому-то моя проблема покажется смешной,но всё-равно,помогите! На форме из DBCOMBO выбирается фамилия и при нажатии кнопки(cmdFind) из базы данных выбираются остальные атрибуты клиента с данной фамилией(имя,дата рождения и т.д.) и заносятся в текстовые поля. Выдает такую ошибку - "Invalid SQL statement;expected DELETE, INSERT,PROCEDURE,SELECT or UPDATE" Помогите кто может!Заранее благодарен,Евгений ---------------------------------------------------------------------------- ---------------------- Private Sub cmdFind_Click() Dim srnm As String Dim cmd As String Dim sql As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset 'присваиваем переменной выбранное значение в DBCOMBO' srnm = dbc1.Text 'Создаём переменную со строкой подключения' cmd = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=D:\VB98\My projects\Lombardas\Lombardas.mdb" 'Устанавливаем соединение с базой данных' Set cn = New ADODB.Connection cn.ConnectionString = cmd cn.Open 'Создаём запрос' sql = "SELECT * FROM tblCustomers WHERE surname LIKE dbc1.Text" 'Открываем рекордсет' Set rs = New ADODB.Recordset rs.Open sql, cn, adOpenForwardOnly, adLockReadOnly, 100 -------ТОРМОЗИТ НА ЭТОЙ СТРОКЕ!!!!!!!! txtname.Text = rs("name") 'Закрываем рекордсет' rs.Close 'Уничтожаем рекордсет' Set rs = Nothing 'Закрываем подключение' cn.Close 'Уничтожаем объект подключения' Set cn = Nothing End Sub ---------------------------------------------------------------------------- --------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2001, 20:20 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
> sql = "SELECT * FROM tblCustomers WHERE surname LIKE dbc1.Text" Во тут вся проблема. ADO понятия не имеет что такое dbc1.Text. И не понятно, зачем в этом запросе Like. Наверное нужно так: sql = "SELECT * FROM tblCustomers WHERE surname = " & dbc1.Text ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2001, 09:30 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
Кажется с текстом правильнее так sql = "SELECT * FROM tblCustomers WHERE surname = '" & dbc1.Text & "'" а вот с цыфрами как было раньше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2001, 17:51 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
Конечно, Roma, Вы правы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2001, 03:44 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
Что то много текста в процедуре, вот к примеру Function Identity() As Long Dim Rst As ADODB.Recordset Set Rst = Application.CurrentProject.Connection.Execute("Select @@Identity as N") Identity = Rst!N Rst.Close Set Rst = Nothing End Function Только на счет Rst.Close и Set Rst = Nothing сомниваюсь нужны ли оба. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2001, 21:31 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
Короче то оно короче, только Вы не сможете явно задать ни тип блокировки, ни тип курсора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2001, 01:23 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
2V. Motchulsky И rst.Close, и Set rst=Nothing действительно не являются необходимыми, т.к. по выходе из подпрограммы автоматически происходит деинициализация созданных там объектов, но, с другой стороны, явное освобождение ресурсов, более не нужных, является хорошим тоном программирования и, в некоторых случаях (не в этом), позволяет повысить эффективность использования ресурсов сервера путем наиболее раннего осовобождения его ресурсов. Т.е. рекордсет лучше уничтожить не в конце процедуры, а как только он перестанет быть нужным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2003, 14:02 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
2Zrw И rst.Close, и Set rst=Nothing действительно не являются необходимыми, твоя неправда в некоторых случая надо обязательно закрыть сразу после использования что дальнейший код работал правильно а в некоторых случаях close не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2003, 18:13 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
2Zrw И rst.Close, и Set rst=Nothing действительно не являются необходимыми, твоя неправда в некоторых случая надо обязательно закрыть сразу после использования что дальнейший код работал правильно а в некоторых случаях close не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2003, 18:13 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
Эх, чуть до 2 лет давность топика не дотянула. и все равно приятно читать свои ответы в неорегистрином виде. Если бы сразу порегистрился, тыщь за 5 перевалило бы уже (понты:-). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2003, 21:22 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
2Вадя Пожалуйста, приведи мне пример кода, где локальные переменные, объявленные в процедуре (как автоматические) не деинициализируются при выходе из процедуры и, более того, это помешает работе дальнейшего кода? Ну, глюки быть могут, конечно, но так, чтобы это документированно было... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2003, 08:43 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
2Zrw >2Вадя Пожалуйста, приведи мне пример кода Я вместо Вади :) Есть модуль класса, управляет поведением форм-журналов. На форме ListView. При закрытии вызывалась процедура Terminate - далее шла ошибка "Программа выполнила..." в mscomctl.ocx (listview).Мучала меня эта ошибка - пока не поставил явное уничтожение локальных переменных в процедурах и в Terminate. Но это, конечно, натянутый пример и зависит от конкретного случая. Но как объяснить, что при открытии формы и ее закрытии остается около 100 кб неосвобожденной памяти. При явном уничтожении локальных(!) ссылок на объекты в процедурах стало оставаться уже килобайт 50. Дальше я бится с памятью не стал. Но факт на лицо и н думаю его можно смоделировать и у себя. Но это не ошибка- но думаю это проблема с памятью может приводит к ошибке. К тому же, когда я пытался открывать и закрывать форму в цикле, где-то на 150 разе - Акес вываливался с ошибкой "Программа выполнила..." (памяти было сожрано не много - мегабайт 20) Вот такое "освобождение" переменных/ А "глюки" микрософт не очень любит документировать как ошибки - а вот как фичи - это да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2003, 09:30 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
Пример обязательной деинициализации: VB6, работа с библиотекой CHM-Help (точное имя ее уже не помню): если при выходе (!!!) из программы не уничтожать вручную созданный для этой библиотеки "объект" (set CHMHelp = nothing), в памяти остается мусор под названием программы (видно в taskmanager'e), хотя все формы исправно закрылись и к проге доступа у юзера больше нет. Вот такие дела. Господа бравые Access'ники, думаю, тоже встречались с подобными "радостями"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2003, 09:37 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
Ну, в общем, хотя конкретных примеров я и не мог привести сам (т.к. всегда увручную деинициализирую объекты при написании программ на VBA и ASP), народ подтвердил, что делать деинициализацию надо. Хотя в документации всегда и пишут, что, де, само все удалится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2003, 09:40 |
|
||
|
Проблема с ADO
|
|||
|---|---|---|---|
|
#18+
Обобщим. Деинициализацию надо делать потому, что: 1. Это хороший стиль программирования. 2. Это решит проблему с автоматическим уничтожением переменных при выходе из области видимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2003, 09:49 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32178029&tid=1681197]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 385ms |

| 0 / 0 |
