![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADOQuery подскажите plz [D7, Access]
lehich © (2004-08-25 15:02:00)Query1.Params[0].AsString:= '%'+LabeledEdit1.Text+'%';
прокатывает нормально при любых знаках передаваемых из Edit`а, а
ADOQuery1.SQL.Add('where name like "%' + LabeledEdit1.Text + '%"');
обваливается при введении названия в кавычках, например "мастер" в первом случае ищется нормально, а во втором выскакивает сообщение о ошибке.. как быть???
lehich (2004-08-30 14:32:00) [1]спасибо большое... извините за причиненное беспокойство...)))
sniknik (2004-08-30 12:52:00) [2]> от ошибки избавились, но всё равно не находит ничего...(((((
естественно, зачем же ты ему имя меняеш, если нужно значение.
и упорно лепиш лишнии кавычки, НЕ НУЖНЫ, в этом случае. ты почитай еще раз когда тебе их советовали применять... для ТОГО случая.
ADODataSet1.Сlose;
ADODataSet1.CommandText:= 'select * from lesobilet where name like :zapros';
ADODataSet1.Parameters.ParamByName('zapros').Value:= '%' + LabeledEdit1.Text + '%';
ADODataSet1.Open;
perem := ADODataSet1.FieldByName('name').AsString;
Плохиш (2004-08-30 12:46:00) [3]
> lehich © (30.08.04 12:41) [24]
Ну ты эта, используй или QuotedStr, или Parameters, а то получается как в том анекдоте...
lehich (2004-08-30 12:41:00) [4]от ошибки избавились, но всё равно не находит ничего...(((((
lehich (2004-08-30 12:38:00) [5]ADOQuery1.Parameters[0].AsString нет такого...
так... напишу все подробно...
zapros := QuotedStr('%' + LabeledEdit1.Text + '%');
ADOQuery1.close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from lesobilet');
ADOQuery1.SQL.Add('where name like :zapros');
ADOQuery1.Parameters[0].Name := zapros;
ADOQuery1.Open;
perem := ADOQuery1.FieldByName('name').AsString;
sniknik (2004-08-30 12:33:00) [6]> нет у меня же ADO...
ну тогда Parameters, остальное тоже самое
lehich (2004-08-30 12:15:00) [7]sniknik © (30.08.04 12:07) [18]
чего-то не понял... какой Query1.Params[0].AsString:= zapros; ???? нет у меня же ADO...
Плохиш (2004-08-30 12:15:00) [8]
> lehich © (30.08.04 12:11) [19]
Как и сказано уже в [14]:
QuotedStr('%' + LabeledEdit1.Text + '%')
lehich (2004-08-30 12:11:00) [9]хмммм... вычтал в JETSQL40.CHM что:
Соответствующие знаки Язык SQL Microsoft Jet ANSI SQL
Любой одиночный знак. ? _ (подчеркивание)
Произвольное количество знаков. * %
подумал вот оно... вот где ошибка... в jet надо использовать не
"%' + LabeledEdit1.Text + '%"
а
"*' + LabeledEdit1.Text + '*"
нифига... результат тотже...((((
sniknik (2004-08-30 12:07:00) [10]> иногда возникает ошибка "параметр zapros не имеет значения по умолчанию"... почему???
??? иногда? да она всегда будет, запрос неправильный получается.
zapros:= '%'+LabeledEdit1.Text+'%'; //кавычек не нужно это уже строка
ADOQuery1.SQL.Add('where name like :zapros');
Query1.Params[0].AsString:= zapros;
так правильнекй, либо как показано в [16] без параметра, но с проблемой в одном из случаев (' "), смотря что выбирать за орраничитель строки (аксесс 2 варианта позволяет).
lehich (2004-08-30 11:56:00) [11]сенкс... почитаю хелп по jet...
еще вопрос... иногда возникает ошибка "параметр zapros не имеет значения по умолчанию"... почему???
zapros := Quoted(LabeledEdit1.Text);
ADOQuery1.SQL.Add('where name like zapros');
sniknik (2004-08-30 11:20:00) [12]так
ADOQuery1.SQL.Add('where [name] like ''%' + LabeledEdit1.Text + '%''');
но только с параметром правильнее, т.к. он воспринимается в любом случае как строка, а тут есть варианты. (так этот вариант сработает если
LabeledEdit1.Text = "мастер"
но глюкнется на 'мастер') почему думаю понятно, это вставляется непосредственно в запрос а кавычки его перековеркивают (они же и есть же разделители строки).
> может где-то можно почитать про синтаксис SQL именно для ADO???
для jet (движок ADO для аксесс, для других другой, не путай)
файл JETSQL40.CHM
иши у себя на машине.
lehich (2004-08-30 11:03:00) [13][14] хмммм... QuotedStr не дает нужного результата... просто добавляет в начало и в конец одинарные кавычки...
попробовал еще из FAQ процедуру в описании которой есть такая фраза "Чтобы не было SQL-ошибки при составлении запроса "на лету", где участует строка с кавычками, надо просто напросто задвоить эти кавычки!":
function Quoted(const St: string): string;
var
i: integer;
begin
Result:='';
for i:=1 to Length(St) do
if (St[i] = '"') then Result:=Result+'""'
else Result:=Result+St[i];
end;
но результат тот же - ошибка...((( может где-то можно почитать про синтаксис SQL именно для ADO??? потому что с обычными подкючением базы через BDE проблем не возникает...
Anatoly Podgoretsky (2004-08-27 10:17:00) [14]lehich © (25.08.04 16:54) [2]
А должно быть так name like '%"мастер"%"' или в некоторых базах [%"мастер"%"]
Используй QuotedStr
AndB (2004-08-27 09:03:00) [15]нн-даа-аа-а.. Если б вчера кто нибудь стоящий за мое спиной сказал "ты, братан, фигню чепатаешь" - я б с ним разругался. Ну не приснилось-же мне.. мля!
AndB (2004-08-27 07:10:00) [16]да-да! %(
и мне расскажите откуда втемяшилось в башку это слово... наверно из другой оперы. В MSSQL-e по полям с индексом полнотекстового поиска это выглядит так:
select firma_name from Firma where contains(firma_name, ' "ГРЭ" ')
т.е. хорошо тебе подходит - берешь слово кк есть (с кавычкми) и включаешь в строку. Но я не пойму, что в ADO получается? Слово вроде-бы "не чужое" - попробуй написать:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM tbl WHERE [txt] CONTAINS '+#34+'master'+#34);
ADOQuery1.Active := true;
— оно и сработает (молча), только не найдет ничего и покажет все-все.. а попробуй исправить:
... CONTAINS '+#34+' "real" '+#34);- заругается. Выходит есть такая фишка?, а как работает??.. 8(
lehich (2004-08-26 14:56:00) [17]можно поподробнее насчет constains???
AndB (2004-08-26 11:51:00) [18]т.е. CONTAINS конечно. я про него к чему? - не придется обрамлять процентами слово в кавычках.
AndB (2004-08-26 11:42:00) [19]про звездочку я машинально спросил. у меня грабли были на web(asp)+odbc+mdb - пишу процент: фиг, со звездочкой прошло.. А у тебя глюк когда в поле поиска вводят текст ужезаключенный в кавычки. А зачем? По аналогии в web-овскими поисковиками в кавычках пишут то, для чего ищут точной совпадение, без кавычек - любое вхождение. Но если это делать в одной строке - морока разбирать ввод, а главное - найдется добрый человек который ведет
"мастер '- и пойми чего он написал. Оно тебе надо? Запрети ввод кавычек, или обоих или только одинарных. Но тогда и WHERE менять надо - то, что в кавычках будет не LIKE, а СONSTAINS. А проще два(три..) поля сделать, как в том же гугле. Ну и пишу я лично так:
sqlStr := ' ... WHERE '+Edit1.Name+' = '+#39+Edit1.Text+#39+' AND ... '
имхо, так читабельнее, чем удваивать(утраивать?) кавычки - ошибиться просто.
lehich (2004-08-26 11:39:00) [20]но с другими-то запросами всё работает!!! которые без спецсимволов...