Форум: "Базы";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];
ВнизTQuery Найти похожие ветки
← →
DimChan (2003-10-24 07:21) [0]Приветствую вас, МАСТЕРА. Использую функцию Query1.SQL.ADD (Sender: String) - но вот проблема моя переменная SqlStr превышает барьер в 256 символов:
SqlStr := "Select * From "" + FilePath +"" Terror where ("
+ Pole[1] +" Like "%" + SenderStringName +"%") or ("
+ Pole[2] +" Like "%" + SenderStringName +"%") or ("
+ Pole[3] +" Like "%" + SenderStringName +"%")... or ("
+ Pole[n] +" Like "%" + SenderStringName +"%")";
Дело в том, что переменная складывается циклом из n столбцов таблицы, буду благодарен за помощь или подсказку.
← →
Романов Р.В. (2003-10-24 07:41) [1]Добавляй в несколько строк
← →
DimChan (2003-10-24 08:01) [2]
> Романов Р.В. © (24.10.03 07:41) [1]
> Добавляй в несколько строк
???
← →
Романов Р.В. (2003-10-24 08:08) [3]Query1.SQL.ADD("Select * From "" + FilePath +"" Terror where (")
Query1.SQL.ADD(Pole[1] +" Like "%" + SenderStringName +"%")")
Query1.SQL.ADD(or ("Pole[2] +" Like "%" + SenderStringName +"%")")
и т.д.
А вообще то в этом случае удобно использовать TQuery.Params
← →
DimChan (2003-10-24 09:00) [4]
> Романов Р.В. © (24.10.03 08:08) [3]
> Query1.SQL.ADD("Select * From "" + FilePath +"" Terror where
> (")
> Query1.SQL.ADD(Pole[1] +" Like "%" + SenderStringName +"%")")
> Query1.SQL.ADD(or ("Pole[2] +" Like "%" + SenderStringName
> +"%")")
> и т.д.
Это не подходит, а вот
> TQuery.Params
я посмотрел, но так и не понял что ты имел в виду???
← →
NAlexey (2003-10-24 09:03) [5]>превышает барьер в 256 символов:
Какой такой барьер в 256 символов??? -
The reserved word string functions like a generic type identifier. For example,
var S: string;
creates a variable S that holds a string. In the default {$H+} state, the compiler interprets string (when it appears without a bracketed number after it) as AnsiString. Use the {$H–} directive to turn string into ShortString.
А
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
← →
DimChan (2003-10-24 09:17) [6]
> NAlexey © (24.10.03 09:03) [5]
> >превышает барьер в 256 символов:
> Какой такой барьер в 256 символов??? -
String - поддерживает переменную длинной от 0 до 255 символов, Я пробовал AnsiString, но
> Query1.SQL.ADD (Sender: String)
и выдает ошибку Type mismatch in expression, поэтому я пологаю, что Query1.SQL.ADD кроме String больше ничего не поддерживает...
← →
Юрий Зотов (2003-10-24 09:23) [7]> DimChan © (24.10.03 09:17) [6]
> String - поддерживает переменную длинной от 0 до 255 символов,
> Я пробовал AnsiString, но...
Нажмите F1 и прочтите топик $H.
Потом уберите опцию $H- и больше ничего не надо.
← →
ЮЮ (2003-10-24 09:37) [8]>поэтому я пологаю, что Query1.SQL.ADD кроме String больше ничего не поддерживает...
Нет, это просто запрос конструкции
... AND (Field LIKE "%всяка-бяка%") AND ...
можно использовать только для текстовых полей, но нельзя для числовых. Именно там и происходит "Type mismatch in expression", а вовсе не при Query1.SQL.ADD ("...")
← →
DimChan (2003-10-24 10:17) [9]Тогда вот код, может я что-то не так делаю?
var n, i : integer;//
QField, SqlOr, SqlLike, SenderStrName : String;//Для запроса
SqlStr: String;
begin
QProba.Active := false;
QProba.SQL.Clear ;
QProba.SQL.Add ("Select * From "" + FilePath +"" Adress");
QProba.Active := true;
SenderStrName := edit1.Text ;
if SenderStrName = "" then exit;
SqlOr := (" or (");
SqlLike := (" Like "%" + SenderStrName +"%")");
i := QProba.FieldCount - 1;
pole[0] := QProba.Fields[0].fieldName;
SqlStr := ("Select * From "" + FilePath +"" Adress where ( " + Pole[0] + SqlLike );
QTable.Active := false;
QTable.SQL.Clear ;
For n := 1 to i do // i := 17
begin
pole[n] := QProba.Fields[n].fieldName;
QField := pole[n];
sqlStr := (SqlStr + SqlOr + QField + SqlLike) ;
end;
QTable.SQL.Add (SqlStr);
QTable.Active := true; //Здесь дает ошибку
DataSource2.dataSet := QTable;
DBGrid1.DataSource := DataSource2;
← →
Zacho (2003-10-24 10:24) [10]
> DimChan © (24.10.03 10:17) [9]
>
> QTable.SQL.Add (SqlStr);
> QTable.Active := true; //Здесь дает ошибку
Перед QTable.Active:=true; сделай ShowMessage(QTable.SQL.Text);
и приведи полученный текст запроса, а заодно и сообщение об ошибке. Тогда может и подскажем.
← →
OlegK (2003-10-24 11:17) [11]2Юрий Зотов
>Нажмите F1 и прочтите топик $H.
>Потом уберите опцию $H- и больше ничего не надо.
Хммм... насколько известно, опция:"$H-" используется для совместимости предыдущей версии string используемой в Object Pascal
привожу выдержку:"The {$H-} state is mostly useful for using code from versions of Object Pascal that used short strings by default"...
Кстати, как раз-таки выключение этой опции, как вы советуете, и приведет к ограничению максимального размера строки, а вот включенная по умолчанию в Delphi опция "$H+" позволяет использовать длину строк значительно превышающую порог в 256 символов, вот выдержка из того же самого Help-а: «AnsiString, also called a long string, represents a dynamically allocated string whose maximum length is limited only by available memory. It uses 8-bit ANSI characters.»
И по существу, ветки, скорее всего ошибка в корректности составленного запроса…
← →
CbIH (2003-10-24 12:10) [12]QTable.SQL.Add (SqlStr);
QTable.Active := true; //Здесь дает ошибку
QTable.SQL.Text := SqlStr;
← →
Юрий Зотов (2003-10-24 13:44) [13]> OlegK (24.10.03 11:17) [11]
1. Да, спасибо, я в курсе. Еще со времен Delphi 2.
2. > Кстати, как раз-таки выключение этой опции, как вы
> советуете, и приведет к ограничению максимального размера
> строки
Пожалуйста, читайте ВНИМАТЕЛЬНЕЕ:
... УБЕРИТЕ опцию $H- ...
Где здесь сказано о ВЫКЛЮЧЕНИИ опции H? Наоборот, речь идет как раз о ее ВКЛЮЧЕНИИ.
Вероятно, есть разница между " убрать опцию $H-" и " выключить опцию Н"? Потому что первое приведет как раз к обратному результату. Что в данном случае и требуется.
← →
BlackKing (2003-10-24 14:33) [14]A ne probovali etu stroku razbit" na chasti?
vmesto
s:=s1+s2+s3+s4...
pisat"
Query.sql.add(s1);
Query.sql.add(s2);
Query.sql.add(s3);
...
← →
OlegK (2003-10-24 17:00) [15]2Юрий Зотов
Хмм… извиняюсь за «наезд не по теме» ;-) Вы правы, я недостаточно внимательно прочитал предыдущий Ваш ответ… всему виной катастрофическая нехватка времени…
← →
ЮЮ (2003-10-25 07:07) [16]У тебя все 17 полей, по которым ты ищешь, текстовые? Если нет, то ошибка неизбежна и именно "Type mismatch in expression". См. ЮЮ © (24.10.03 09:37) [8]
← →
DimChan (2003-10-29 07:06) [17]
> ЮЮ © (25.10.03 07:07) [16]
Ты прав 3 из 17 не текстовые, а числовые(Numeric).
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c