Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.042 c
3-1169124696
ildarkh
2007-01-18 15:51
2007.04.08
Обмен большими данными между Oracle и FireBird


2-1174044399
Vas
2007-03-16 14:26
2007.04.08
Столбци


15-1174047042
Gorlum
2007-03-16 15:10
2007.04.08
Ну раз "Прочее", отважусь спросить...:)


15-1173732577
Неюрист
2007-03-12 23:49
2007.04.08
Заполнить бланк лицензии на программный продукт


2-1173891010
Roman_S
2007-03-14 19:50
2007.04.08
форма после завершения процесса не разворачивается





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский