Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

Like в Access   Найти похожие ветки 

 
DimonS ©   (2007-03-13 09:42) [0]

Доброго времени суток.
Есть такой запрос:

ADOAuto.Close;
ADOAuto.SQL.Clear;
ADOAuto.SQL.Add("select * from Autos where StateNo Like "*463*"");
ADOAuto.Open;


к БД Access.
Ошибка: слишком мало параметров, требуется 1.
Но если этот запрос выполнить непосредственно в mdb-файле, то выполняется запросто.

Где зарыта ошибка?


 
Сергей М. ©   (2007-03-13 09:48) [1]


> Где зарыта ошибка?


В SQL.ParamCount > 0


 
Sergey13 ©   (2007-03-13 09:49) [2]

Попробуй вместо * %.


 
DimonS ©   (2007-03-13 10:07) [3]


> Sergey13 ©   (13.03.07 09:49) [2]
> Попробуй вместо * %.


Пробовал, Access не понимает такую конструкцию, для него только * подходит, вычитал в инете :)


 
Сергей М. ©   (2007-03-13 10:13) [4]


> DimonS ©   (13.03.07 10:07) [3]


см. [1] !


 
ЮЮ ©   (2007-03-13 10:16) [5]

> Ошибка: слишком мало параметров, требуется 1.

А без Like Like работает?


> В SQL.ParamCount > 0

Откуда?


 
Сергей М. ©   (2007-03-13 10:39) [6]


> ЮЮ ©   (13.03.07 10:16) [5]



> Откуда?


Ну как откуда ? Сам автор установил в дизай-тайме.

Но тут, полагаю, другой случай - "Autos" не таблица, а хранимый параметрический запрос.


 
DimonS ©   (2007-03-13 10:57) [7]

Autos - это именно таблица.

> Ну как откуда ? Сам автор установил в дизай-тайме.


Ничего не устанавливал...


> А без Like Like работает?

Да, работает.


 
sniknik ©   (2007-03-13 11:10) [8]

> Попробуй вместо * %.
Пробовал, Access не понимает такую конструкцию, для него только * подходит, вычитал в инете :)
а сдесь что не инет? и здесь говорят другое.

но вобще пояснение, если речь идет о программе Access то да, так исторически сложилось что он по умолчанию работает с * но тебе то нужен движок баз Access (jet), а у него уже стандарт %, по стандарту ANSI / 92 SQL, неважно по какому, главное так оно и есть. и кстати в программе Access гдето есть настройка которая переключает синтаксис на этот стандарт.

по ошибке, все непонятное типа неправильно написанное поле (но в нужном месте), непонятные символы (в том месте где по синтаксису чтото должно быть) движок воспринимает как параметр... т.е. если он не понял "*463*" то это для него параметр (в программе Access по этому исключению бы поднялась форма вода для значения параметра... и все бы работало даже если ошиблись в запросе, но у тебя то такой нет)
притом не только программы вносят изменения в синтаксис, ODBC драйвер перед передачей jet-у тоже его слегка коверкает/ставит собственные ограничения (например jet-у неважно какими кавычками обрамляются строки " или ", а вот ODBC " уже не понимает)

p.s. и убери наконец TADOQuery... пользуйся нормальными компонентами TADODataSet/TADOCommand...


 
ЮЮ ©   (2007-03-13 11:16) [9]

> например jet-у неважно какими кавычками обрамляются строки
> " или ", а вот ODBC " уже не понимает


Предлагаю использовать параметрический запрос.
И огласить провайдера.


 
DrPass ©   (2007-03-13 11:41) [10]


> p.s. и убери наконец TADOQuery... пользуйся нормальными
> компонентами TADODataSet

Вот не надо молодежь в заблуждение вводить - между TADOQuery и TADODataset разница только в наличии свойства SQL и метода ExecSQL у первого :)


 
DimonS ©   (2007-03-13 12:08) [11]


>  И огласить провайдера.


Провайдер:
Provider=MSDASQL.1

Пробовал вместо двойных кавычек использовать две одинарные, ошибки не выдает, но и не находит ничего.


> и убери наконец TADOQuery... пользуйся нормальными компонентами
> TADODataSet/TADOCommand...

TADOCommand использую, но в основном только для изменеия данных, а TADOQuery осталась от старой программы, неохота переделывать...


 
ЮЮ ©   (2007-03-13 12:30) [12]

Provider=MSDASQL.1 - может ODBC настроил некузяво? А почему не
Microsoft.Jet.OLEDB.4.0 ?


 
DimonS ©   (2007-03-13 13:08) [13]


> 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НТ), но набирать только цифровой номер или неполный буквенно-цифровой.


 
sniknik ©   (2007-03-13 14:58) [14]

> Вот не надо молодежь в заблуждение вводить...
разница есть, идеологическая. и еще неизвестно кто/что кого в заблуждение вводит (уж точно не я).

вот скажи, покупая новую машину, ты ее маскируешь под старую, привычную??? покупаешь скажем форд и рихтуеш кузов под привычный москвич... а что удобно, не привыкать, а мощности уже новые. ???
нет? все. вопрос закрыт.
и не надо советовать другим закрывать глаза на "истинное лицо" используемых компонент. (может тогда перестанут лепить open после execsql-я как в соседней ветке)

> И почему-то она отказывается работать через Microsoft.Jet.OLEDB.4.0
такого не может быть, т.к. все остальные в итоге через него работают. т.е. если уж ODBC его использует то и ты можеш.
> а почему так и не смог выяснить
в 17й строке посмотри.

> Собственно говоря, задача заключается в том
чтобы написать запрос правильно, именно по тому синтаксису чем пользуешься, а то что запрос на поиск автомобиля по твоему критерию это уже другая задача, общего плана.

вот
http://webfile.ru/1344555
скачай, и проверь запрос в нем, в разных вариациях (что тут советовали), с разными типами подключений. то что подберешь, то и в программу вставишь, это тоже ADO + jet/odbc/что еще выберешь, т.е. будет совместимо в отличии от программы Access.


 
DimonS ©   (2007-03-13 15:48) [15]


> в 17й строке посмотри.

Может не понял, не обессудь.
В какой 17-й строке посмотерть?


 
Sergey13 ©   (2007-03-13 15:52) [16]

> [15] DimonS ©   (13.03.07 15:48)

Кто-ж знает-то кроме тебя, какая строка у тебя 17-я! 8-)
Это шутка такая - ошибка в программе.


 
Anatoly Podgoretsky ©   (2007-03-13 20:15) [17]

> DimonS  (13.03.2007 15:48:15)  [15]

> В какой 17-й строке посмотерть?

Во второй семнадцатой или в третей семнадцатой.


 
MsGuns ©   (2007-03-13 21:20) [18]

>DrPass ©   (13.03.07 11:41) [10]
>между TADOQuery и TADODataset разница только в наличии свойства SQL и метода ExecSQL у первого :)

Глупостив не надо, а ? Даже в виде шутки юмора.

По сабжу:
Мне вот непонятно до неприличности, а что, попробовать "тыком" не пришло в голову ? Тем более, что там всего-то 4 (четыре) варианта.

ODBC или OLE DB не суть важно, тем более, что, как верно заметил Sniknik, все это в итоге работает через одно "очко".


 
DrPass ©   (2007-03-13 22:36) [19]


> MsGuns ©   (13.03.07 21:20) [18]


> Глупостив не надо, а ? Даже в виде шутки юмора

Ммм... а ты в исходники ADOQuery не заглядывал?


 
DimonS ©   (2007-03-14 00:27) [20]


> Мне вот непонятно до неприличности, а что, попробовать "тыком"
> не пришло в голову ?

Вчера этим "тыком" часа 2 занимался. Если бы этот "тык" помог, стал бы я здесь спрашивать...


> Anatoly Podgoretsky ©   (13.03.07 20:15) [17]


> Во второй семнадцатой или в третей семнадцатой.

Хорош подкалывать, незнал я этой шутки :)


 
MsGuns ©   (2007-03-14 08:59) [21]

>DrPass ©   (13.03.07 22:36) [19]
>Ммм... а ты в исходники ADOQuery не заглядывал?

Где уж нам уж выйти замуж ;)
И чем таким концептуальным этот квери отличается от TCustomADODataSet ?
Тот же чувак, только стриженый под панка ;)


 
DimonS ©   (2007-03-14 13:10) [22]

Ну что, неужели никто не общался ниразу с Access? Или не делал такие запросы? Сегодня еще с пол-часа потыкал, ошибка та же выскакивает...


 
Sergey13 ©   (2007-03-14 13:15) [23]

> [22] DimonS ©   (14.03.07 13:10)

Если Like без звездочек прокатывает, попробуй через параметры (вроде говорили уже про это).


 
Плохиш ©   (2007-03-14 13:26) [24]

ADOAuto.SQL.Text := "select * from Autos where StateNo Like "%%463%%"";

Этот запрос работает.


 
DimonS ©   (2007-03-14 13:26) [25]


> Если Like без звездочек прокатывает, попробуй через параметры
> (вроде говорили уже про это).


Хм... Это что-то типа ..... Like :Param?
А параметру присвоить значение *463*? Или я ошибаюсь?


 
Плохиш ©   (2007-03-14 13:27) [26]


> Плохиш ©   (14.03.07 13:26) [24]

Пардон, знак процента по одному разу спереди и сзади :-)


 
DimonS ©   (2007-03-14 13:28) [27]


> Плохиш ©   (14.03.07 13:26) [24]
> ADOAuto.SQL.Text := "select * from Autos where StateNo Like
> "%%463%%"";
>
> Этот запрос работает.


Опа, а вот это попробую завтра! Спасибо за совет, что-то просто неподумал в этом направлении :).


 
Sergey13 ©   (2007-03-14 13:40) [28]

> [25] DimonS ©   (14.03.07 13:26)

Не ошибаешься.


 
DimonS ©   (2007-03-14 13:56) [29]

Спасибо всем, кто ответил. Завтра проверю, если заработает какой-то из вариантов отпишу сюда.


 
DimonS ©   (2007-03-15 02:48) [30]

Все, нашел нужную комбинацию :)

Вот такая конструкция сработала:

ADOAuto.SQL.Add("select * from Autos where StateNo Like :D");
ADOAuto.Parameters.ParamValues["D"]:="%463%";


 
Sergey13 ©   (2007-03-15 08:48) [31]

> [30] DimonS ©   (15.03.07 02:48)
> Вот такая конструкция сработала:
Это временно. 8-)
Пока юзер не ввел букву. Для того, чтобы и буквы кушало нормально, надо привести поле и переменную к одному регистру.


 
DimonS ©   (2007-03-15 09:02) [32]


> Пока юзер не ввел букву. Для того, чтобы и буквы кушало
> нормально, надо привести поле и переменную к одному регистру.
>

Проверил, работает и с буквами, причем нечувствительно к регистру. Так что хеппи енд :)

Спасибо всем, кто откликнулся!


 
sniknik ©   (2007-03-15 09:04) [33]

> Вот такая конструкция сработала:
значит должна была сработать и замена посоветованная в [2]

> надо привести поле и переменную к одному регистру.
для access без надобности. там наоборот проблема сделать регистрозависимый поиск... (проблемка вернее, надо функцией пользоваться с бинарным сравнением, но для тех кто не знает...)


 
DimonS ©   (2007-03-15 09:31) [34]


> > Вот такая конструкция сработала:
> значит должна была сработать и замена посоветованная в [2]

Как ни странно, просто так в запросе та конструкция неработала. Заработало все только через параметры. Почему - незнаю.


 
sniknik ©   (2007-03-15 10:50) [35]

> Почему - незнаю.
про 17-ю строку уже знаеш? ну вот.

программу в которой можно проверить предлагал? ... про различия в подключениях обьяснял?
блин, несколько вариантов всего, проверить... выполнил, посмотрел который работает... и знаеш ужо.



Страницы: 1 вся ветка

Текущий архив: 2007.04.08;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.076 c
11-1152777666
oleg_l_k
2006-07-13 12:01
2007.04.08
Backup для БД на FireBird 1.0 (KOLIBServ)


2-1174425943
TET
2007-03-21 00:25
2007.04.08
dword To HEX


15-1173955310
@!!ex
2007-03-15 13:41
2007.04.08
3D изображение не на плоскости


6-1161705795
Velimir
2006-10-24 20:03
2007.04.08
Подскажите, адресок с подробным описанием Indy UDP компонента


15-1173970258
zdm
2007-03-15 17:50
2007.04.08
MaskEdit