![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Like в Access [D7, XP]
DimonS © (2007-03-13 09:42:00)Доброго времени суток.
Есть такой запрос:
ADOAuto.Close;
ADOAuto.SQL.Clear;
ADOAuto.SQL.Add('select * from Autos where StateNo Like "*463*"');
ADOAuto.Open;
к БД Access.
Ошибка: слишком мало параметров, требуется 1.
Но если этот запрос выполнить непосредственно в mdb-файле, то выполняется запросто.
Где зарыта ошибка?
DimonS (2007-03-13 15:48:00) [21]
> в 17й строке посмотри.
Может не понял, не обессудь.
В какой 17-й строке посмотерть?
sniknik (2007-03-13 14:58:00) [22]> Вот не надо молодежь в заблуждение вводить...
разница есть, идеологическая. и еще неизвестно кто/что кого в заблуждение вводит (уж точно не я).
вот скажи, покупая новую машину, ты ее маскируешь под старую, привычную??? покупаешь скажем форд и рихтуеш кузов под привычный москвич... а что удобно, не привыкать, а мощности уже новые. ???
нет? все. вопрос закрыт.
и не надо советовать другим закрывать глаза на "истинное лицо" используемых компонент. (может тогда перестанут лепить open после execsql-я как в соседней ветке)
> И почему-то она отказывается работать через Microsoft.Jet.OLEDB.4.0
такого не может быть, т.к. все остальные в итоге через него работают. т.е. если уж ODBC его использует то и ты можеш.
> а почему так и не смог выяснить
в 17й строке посмотри.
> Собственно говоря, задача заключается в том
чтобы написать запрос правильно, именно по тому синтаксису чем пользуешься, а то что запрос на поиск автомобиля по твоему критерию это уже другая задача, общего плана.
вот
http://webfile.ru/1344555
скачай, и проверь запрос в нем, в разных вариациях (что тут советовали), с разными типами подключений. то что подберешь, то и в программу вставишь, это тоже ADO + jet/odbc/что еще выберешь, т.е. будет совместимо в отличии от программыAccess.
DimonS (2007-03-13 13:08:00) [23]
> Provider=MSDASQL.1 - может ODBC настроил некузяво?
Provider=MSDASQL.1 это строка подключения в ADOConnection, через этот ADOConnection работает куча ADO-компонентов. Данный здесь ADOAuto работает минимум с 30 различными запросами, все работает отлично. Правда, LIKE нет ни в одном из них.
> А почему не
> Microsoft.Jet.OLEDB.4.0 ?
Сама база не моя, стороннего разработчика. И почему-то она отказывается работать через Microsoft.Jet.OLEDB.4.0, а почему так и не смог выяснить. Для своих баз, естественно, испльзую Microsoft.Jet.OLEDB.4.0.
Собственно говоря, задача заключается в том, чтобы найти автомобиль в базе по его госномеру (типа Т463НТ), но набирать только цифровой номер или неполный буквенно-цифровой.
ЮЮ (2007-03-13 12:30:00) [24]Provider=MSDASQL.1 - может ODBC настроил некузяво? А почему не
Microsoft.Jet.OLEDB.4.0 ?
DimonS (2007-03-13 12:08:00) [25]
> И огласить провайдера.
Провайдер:
Provider=MSDASQL.1
Пробовал вместо двойных кавычек использовать две одинарные, ошибки не выдает, но и не находит ничего.
> и убери наконец TADOQuery... пользуйся нормальными компонентами
> TADODataSet/TADOCommand...
TADOCommand использую, но в основном только для изменеия данных, а TADOQuery осталась от старой программы, неохота переделывать...
DrPass (2007-03-13 11:41:00) [26]
> p.s. и убери наконец TADOQuery... пользуйся нормальными
> компонентами TADODataSet
Вот не надо молодежь в заблуждение вводить - между TADOQuery и TADODataset разница только в наличии свойства SQL и метода ExecSQL у первого :)
ЮЮ (2007-03-13 11:16:00) [27]> например jet-у неважно какими кавычками обрамляются строки
> " или ', а вот ODBC ' уже не понимает
Предлагаю использовать параметрический запрос.
И огласить провайдера.
sniknik (2007-03-13 11:10:00) [28]> Попробуй вместо * %.
Пробовал, Access не понимает такую конструкцию, для него только * подходит, вычитал в инете :)
а сдесь что не инет? и здесь говорят другое.
но вобще пояснение, если речь идет о программеAccess то да, так исторически сложилось что он по умолчанию работает с * но тебе то нужен движокбаз Access (jet), а у него уже стандарт %, по стандарту ANSI / 92 SQL, неважно по какому, главное так оно и есть. и кстати в программе Access гдето есть настройка которая переключает синтаксис на этот стандарт.
по ошибке, все непонятное типа неправильно написанное поле (но в нужном месте), непонятные символы (в том месте где по синтаксису чтото должно быть) движок воспринимает как параметр... т.е. если он не понял "*463*" то это для него параметр (в программе Access по этому исключению бы поднялась форма вода для значения параметра... и все бы работало даже если ошиблись в запросе, но у тебя то такой нет)
притом не только программы вносят изменения в синтаксис, ODBC драйвер перед передачей jet-у тоже его слегка коверкает/ставит собственные ограничения (например jet-у неважно какими кавычками обрамляются строки " или ', а вот ODBC ' уже не понимает)
p.s. и убери наконец TADOQuery... пользуйся нормальными компонентами TADODataSet/TADOCommand...
DimonS (2007-03-13 10:57:00) [29]Autos - это именно таблица.
> Ну как откуда ? Сам автор установил в дизай-тайме.
Ничего не устанавливал...
> А без Like Like работает?
Да, работает.
Сергей М. (2007-03-13 10:39:00) [30]
> ЮЮ © (13.03.07 10:16) [5]
> Откуда?
Ну как откуда ? Сам автор установил в дизай-тайме.
Но тут, полагаю, другой случай - "Autos" не таблица, а хранимый параметрическийзапрос.
ЮЮ (2007-03-13 10:16:00) [31]> Ошибка: слишком мало параметров, требуется 1.
А без Like Like работает?
> В SQL.ParamCount > 0
Откуда?
Сергей М. (2007-03-13 10:13:00) [32]
> DimonS © (13.03.07 10:07) [3]
см. [1] !
DimonS (2007-03-13 10:07:00) [33]
> Sergey13 © (13.03.07 09:49) [2]
> Попробуй вместо * %.
Пробовал, Access не понимает такую конструкцию, для него только * подходит, вычитал в инете :)
Sergey13 (2007-03-13 09:49:00) [34]Попробуй вместо * %.
Сергей М. (2007-03-13 09:48:00) [35]
> Где зарыта ошибка?
В SQL.ParamCount > 0