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

Вниз

ADOQuery подскажите plz   Найти похожие ветки 

 
lehich ©   (2004-08-25 15:02) [0]

Query1.Params[0].AsString:= "%"+LabeledEdit1.Text+"%";
прокатывает нормально при любых знаках передаваемых из Edit`а, а
ADOQuery1.SQL.Add("where name like "%" + LabeledEdit1.Text + "%"");
обваливается при введении названия в кавычках, например "мастер" в первом случае ищется нормально, а во втором выскакивает сообщение о ошибке.. как быть???


 
KSergey ©   (2004-08-25 15:16) [1]

> lehich ©   (25.08.04 15:02)
> сообщение о ошибке.. как быть???

Подозреваю - удваивать кавычки в подставляемом тексте или что-то в этом роде.(не силен в тонкостях синтаксиса SQL в аксесе; возможно - заменить обрамдяющие кавычки в like на что-то другое)
А какая ошибка - секрет?


 
lehich ©   (2004-08-25 16:54) [2]

Понятно что ошибка синтаксиса, но как обойти её???

цитирую:

Ошибка синтаксиса (пропущен оператор) в выражении запроса "name like "%"мастер"%""


 
KSergey ©   (2004-08-25 17:02) [3]

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


 
lehich ©   (2004-08-25 17:28) [4]

я не знаю... потому и спрашиваю...


 
AndB ©   (2004-08-25 17:55) [5]

звездочку вместо процента пробовал?


 
lehich ©   (2004-08-26 11:22) [6]

не проходит... вообще не находит ничего... а при кавычках та же трабла...


 
Ozone ©   (2004-08-26 11:36) [7]

..."%"мастер"%""
Итого: 1-а открывающая и 2-е закрывающих.


 
lehich ©   (2004-08-26 11:39) [8]

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


 
AndB ©   (2004-08-26 11:42) [9]

про звездочку я машинально спросил. у меня грабли были на web(asp)+odbc+mdb - пишу процент: фиг, со звездочкой прошло.. А у тебя глюк когда в поле поиска вводят текст уже заключенный в кавычки. А зачем? По аналогии в web-овскими поисковиками в кавычках пишут то, для чего ищут точной совпадение, без кавычек - любое вхождение. Но если это делать в одной строке - морока разбирать ввод, а главное - найдется добрый человек который ведет "мастер" - и пойми чего он написал. Оно тебе надо? Запрети ввод кавычек, или обоих или только одинарных. Но тогда и WHERE менять надо - то, что в кавычках будет не LIKE, а СONSTAINS. А проще два(три..) поля сделать, как в том же гугле. Ну и пишу я лично так:
sqlStr := " ... WHERE "+Edit1.Name+" = "+#39+Edit1.Text+#39+" AND ... "
имхо, так читабельнее, чем удваивать(утраивать?) кавычки - ошибиться просто.


 
AndB ©   (2004-08-26 11:51) [10]

т.е. CONTAINS конечно. я про него к чему? - не придется обрамлять процентами слово в кавычках.


 
lehich ©   (2004-08-26 14:56) [11]

можно поподробнее насчет constains???


 
AndB ©   (2004-08-27 07:10) [12]

да-да! %(
и мне расскажите откуда втемяшилось в башку это слово... наверно из другой оперы. В 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(


 
AndB ©   (2004-08-27 09:03) [13]

нн-даа-аа-а.. Если б вчера кто нибудь стоящий за мое спиной сказал "ты, братан, фигню чепатаешь" - я б с ним разругался. Ну не приснилось-же мне.. мля!


 
Anatoly Podgoretsky ©   (2004-08-27 10:17) [14]

lehich ©   (25.08.04 16:54) [2]
А должно быть так name like "%"мастер"%"" или в некоторых базах [%"мастер"%"]

Используй QuotedStr


 
lehich ©   (2004-08-30 11:03) [15]

[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 проблем не возникает...


 
sniknik ©   (2004-08-30 11:20) [16]

так
ADOQuery1.SQL.Add("where [name] like ""%" + LabeledEdit1.Text + "%""");

но только с параметром правильнее, т.к. он воспринимается в любом случае как строка, а тут есть варианты. (так этот вариант сработает если
LabeledEdit1.Text = "мастер"
но глюкнется на "мастер") почему думаю понятно, это вставляется непосредственно в запрос а кавычки его перековеркивают (они же и есть же разделители строки).

> может где-то можно почитать про синтаксис SQL именно для ADO???
для jet (движок ADO для аксесс, для других другой, не путай)
файл JETSQL40.CHM
иши у себя на машине.


 
lehich ©   (2004-08-30 11:56) [17]

сенкс... почитаю хелп по jet...

еще вопрос... иногда возникает ошибка "параметр zapros не имеет значения по умолчанию"... почему???

zapros := Quoted(LabeledEdit1.Text);
ADOQuery1.SQL.Add("where name like zapros");


 
sniknik ©   (2004-08-30 12:07) [18]

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


zapros:= "%"+LabeledEdit1.Text+"%"; //кавычек не нужно это уже строка
ADOQuery1.SQL.Add("where name like :zapros");
Query1.Params[0].AsString:= zapros;

так правильнекй, либо как показано в [16] без параметра, но с проблемой в одном из случаев (" "), смотря что выбирать за орраничитель строки (аксесс 2 варианта позволяет).


 
lehich ©   (2004-08-30 12:11) [19]

хмммм... вычтал в JETSQL40.CHM что:
Соответствующие знаки Язык SQL Microsoft Jet ANSI SQL
Любой одиночный знак. ? _ (подчеркивание)
Произвольное количество знаков. * %

подумал вот оно... вот где ошибка... в jet надо использовать не
"%" + LabeledEdit1.Text + "%"
а
"*" + LabeledEdit1.Text + "*"
нифига... результат тотже...((((


 
Плохиш ©   (2004-08-30 12:15) [20]


> lehich ©   (30.08.04 12:11) [19]

Как и сказано уже в [14]:

QuotedStr("%" + LabeledEdit1.Text + "%")


 
lehich ©   (2004-08-30 12:15) [21]

sniknik ©   (30.08.04 12:07) [18]

чего-то не понял... какой Query1.Params[0].AsString:= zapros; ???? нет у меня же ADO...


 
sniknik ©   (2004-08-30 12:33) [22]

> нет у меня же ADO...
ну тогда Parameters, остальное тоже самое


 
lehich ©   (2004-08-30 12:38) [23]

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;


 
lehich ©   (2004-08-30 12:41) [24]

от ошибки избавились, но всё равно не находит ничего...(((((


 
Плохиш ©   (2004-08-30 12:46) [25]


> lehich ©   (30.08.04 12:41) [24]

Ну ты эта, используй или QuotedStr, или Parameters, а то получается как в том анекдоте...


 
sniknik ©   (2004-08-30 12:52) [26]

> от ошибки избавились, но всё равно не находит ничего...(((((
естественно, зачем же ты ему имя меняеш, если нужно значение.
и упорно лепиш лишнии кавычки, НЕ НУЖНЫ, в этом случае. ты почитай еще раз когда тебе их советовали применять... для ТОГО случая.


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;


 
lehich ©   (2004-08-30 14:32) [27]

спасибо большое... извините за причиненное беспокойство...)))



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

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

Наверх




Память: 0.54 MB
Время: 0.048 c
1-1095032724
][ncognito
2004-09-13 03:45
2004.09.26
ТриВью опять


4-1092659361
surkis
2004-08-16 16:29
2004.09.26
служба или авторан


1-1094718598
V l a d i m i r
2004-09-09 12:29
2004.09.26
Если запущен Word, как активировать только что созданный документ


14-1094744277
X9
2004-09-09 19:37
2004.09.26
Справка по Opera


4-1092116602
Delphi5.01
2004-08-10 09:43
2004.09.26
Как получить изображение рабочего стола ...