Форум: "Начинающим";
Текущий архив: 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