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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
1-56742
XinSide
2003-11-06 17:11
2003.11.17
Динамические массивы...


11-56542
Эль
2003-02-10 18:56
2003.11.17
вопрос


3-56446
Kinder
2003-10-28 20:01
2003.11.17
ошибка Update где?


1-56684
tnn
2003-11-06 03:36
2003.11.17
помогите оптимизировать


1-56602
Кен
2003-11-06 03:34
2003.11.17
Почему через ShellExecute неполучается писать в файл ?