powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с ADO
17 сообщений из 17, страница 1 из 1
Проблема с ADO
    #32011627
solist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет,народ!
Я новичок в 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
----------------------------------------------------------------------------
---------------------
...
Рейтинг: 0 / 0
Проблема с ADO
    #32011633
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> sql = "SELECT * FROM tblCustomers WHERE surname LIKE dbc1.Text"

Во тут вся проблема. ADO понятия не имеет что такое dbc1.Text. И не понятно, зачем в этом запросе Like. Наверное нужно так:
sql = "SELECT * FROM tblCustomers WHERE surname = " & dbc1.Text
...
Рейтинг: 0 / 0
Проблема с ADO
    #32012292
Romа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется с текстом правильнее так
sql = "SELECT * FROM tblCustomers WHERE surname = '" & dbc1.Text & "'"
а вот с цыфрами как было раньше
...
Рейтинг: 0 / 0
Проблема с ADO
    #32012300
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно, Roma, Вы правы.
...
Рейтинг: 0 / 0
Проблема с ADO
    #32012572
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то много текста в процедуре, вот к примеру

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 сомниваюсь нужны ли оба.
...
Рейтинг: 0 / 0
Проблема с ADO
    #32012576
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче то оно короче, только Вы не сможете явно задать ни тип блокировки, ни тип курсора.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Проблема с ADO
    #32177299
dinM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Проблема с ADO
    #32177377
Zrw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zrw
Гость
2V. Motchulsky
И rst.Close, и Set rst=Nothing действительно не являются необходимыми, т.к. по выходе из подпрограммы автоматически происходит деинициализация созданных там объектов, но, с другой стороны, явное освобождение ресурсов, более не нужных, является хорошим тоном программирования и, в некоторых случаях (не в этом), позволяет повысить эффективность использования ресурсов сервера путем наиболее раннего осовобождения его ресурсов. Т.е. рекордсет лучше уничтожить не в конце процедуры, а как только он перестанет быть нужным.
...
Рейтинг: 0 / 0
Проблема с ADO
    #32177810
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Zrw
И rst.Close, и Set rst=Nothing действительно не являются необходимыми,
твоя неправда
в некоторых случая надо обязательно закрыть сразу после использования что дальнейший код работал правильно а в некоторых случаях close не нужен
...
Рейтинг: 0 / 0
Проблема с ADO
    #32177811
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Zrw
И rst.Close, и Set rst=Nothing действительно не являются необходимыми,
твоя неправда
в некоторых случая надо обязательно закрыть сразу после использования что дальнейший код работал правильно а в некоторых случаях close не нужен
...
Рейтинг: 0 / 0
Проблема с ADO
    #32177928
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, чуть до 2 лет давность топика не дотянула. и все равно приятно читать свои ответы в неорегистрином виде. Если бы сразу порегистрился, тыщь за 5 перевалило бы уже (понты:-).
...
Рейтинг: 0 / 0
Проблема с ADO
    #32178029
Zrw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zrw
Гость
2Вадя
Пожалуйста, приведи мне пример кода, где локальные переменные, объявленные в процедуре (как автоматические) не деинициализируются при выходе из процедуры и, более того, это помешает работе дальнейшего кода? Ну, глюки быть могут, конечно, но так, чтобы это документированно было...
...
Рейтинг: 0 / 0
Проблема с ADO
    #32178060
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Zrw
>2Вадя Пожалуйста, приведи мне пример кода

Я вместо Вади :)

Есть модуль класса, управляет поведением форм-журналов. На форме ListView. При закрытии вызывалась процедура Terminate - далее шла ошибка "Программа выполнила..." в mscomctl.ocx (listview).Мучала меня эта ошибка - пока не поставил явное уничтожение локальных переменных в процедурах и в Terminate.
Но это, конечно, натянутый пример и зависит от конкретного случая.

Но как объяснить, что при открытии формы и ее закрытии остается около 100 кб неосвобожденной памяти. При явном уничтожении локальных(!) ссылок на объекты в процедурах стало оставаться уже килобайт 50. Дальше я бится с памятью не стал. Но факт на лицо и н думаю его можно смоделировать и у себя. Но это не ошибка- но думаю это проблема с памятью может приводит к ошибке. К тому же, когда я пытался открывать и закрывать форму в цикле, где-то на 150 разе - Акес вываливался с ошибкой "Программа выполнила..." (памяти было сожрано не много - мегабайт 20)

Вот такое "освобождение" переменных/
А "глюки" микрософт не очень любит документировать как ошибки - а вот как фичи - это да
...
Рейтинг: 0 / 0
Проблема с ADO
    #32178069
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример обязательной деинициализации:
VB6, работа с библиотекой CHM-Help
(точное имя ее уже не помню):
если при выходе (!!!) из программы не уничтожать вручную
созданный для этой библиотеки "объект"
(set CHMHelp = nothing),
в памяти остается мусор под названием программы
(видно в taskmanager'e),
хотя все формы исправно закрылись и к проге доступа у юзера больше нет.
Вот такие дела.
Господа бравые Access'ники, думаю, тоже встречались с подобными "радостями"...
...
Рейтинг: 0 / 0
Проблема с ADO
    #32178071
Zrw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zrw
Гость
Ну, в общем, хотя конкретных примеров я и не мог привести сам (т.к. всегда увручную деинициализирую объекты при написании программ на VBA и ASP), народ подтвердил, что делать деинициализацию надо. Хотя в документации всегда и пишут, что, де, само все удалится...
...
Рейтинг: 0 / 0
Проблема с ADO
    #32178079
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обобщим. Деинициализацию надо делать потому, что:
1. Это хороший стиль программирования.
2. Это решит проблему с автоматическим уничтожением переменных при выходе из области видимости.
...
Рейтинг: 0 / 0
Проблема с ADO
    #32178598
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
закрывать надо не только в перед выходом но и сразу после использования.
я выкладывал где-то здесь пример.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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