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

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

ADOQuery подскажите plz [D7, Access]


Страницы:   1 2

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]

но с другими-то запросами всё работает!!! которые без спецсимволов...


Страницы:   1 2

Наверх

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