Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Like в Access [D7, XP]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо