Главная страница
    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.51 MB
Время: 0.035 c
1-1094736375
SMT
2004-09-09 17:26
2004.09.26
Передача массива чисел из прораммы с строку листа Excel


1-1094894316
zero-g
2004-09-11 13:18
2004.09.26
Как поймать курсор в RichEdit


1-1094816172
bon
2004-09-10 15:36
2004.09.26
AutoCad


14-1094397535
Piter
2004-09-05 19:18
2004.09.26
Gordian Knot


14-1094283240
Stany
2004-09-04 11:34
2004.09.26
биллингова система





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский