Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-56597
scorpi
2003-11-06 07:56
2003.11.17
Считывание координат с Формы


3-56448
paul_k
2003-10-29 10:45
2003.11.17
Борьба с дублированием


7-56944
subdigger
2003-08-30 17:56
2003.11.17
cd-emulator


7-56931
asJIura
2003-09-06 15:37
2003.11.17
Функция для получения серийного номера жесткого диска?


1-56568
RoLeX
2003-11-07 21:36
2003.11.17
Как узнать местонахождение папки Temp ???





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