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

Вниз

SQL   Найти похожие ветки 

 
DimChan ©   (2003-10-27 08:39) [0]

День Добрый, МАСТЕРА! Вот ситуация, я получаю файлы DBF,все они отличаются по структуре (Количество столбцов), а моя программа по сути дела Поисковичок, так вот проблема заключается в следующем Задаю запрос:


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;
SetLength(Pole,i);

pole[0] := QProba.Fields[0].fieldName;
SqlStr := ("Select * From "" + FilePath +"" Adress where ( " + Pole[0] + SqlLike );

For n := 1 to i do
begin
pole[n] := QProba.Fields[n].fieldName;
sqlStr := (SqlStr + SqlOr + Pole[n] + SqlLike) ;
end;
QTable.Active := false;
QTable.SQL.Clear ;
QTable.SQL.Add (SqlStr);
QTable.Active := true; //< здесь показывает ошибку

DataSource2.dataSet := QTable;
DBGrid1.DataSource := DataSource2;


, но прога выдает EDBEngineError с ошибкой "Type mismatch in Expression", буду очень благодарен за любую помощь.


 
DenK_vrtz ©   (2003-10-27 08:43) [1]

Перед QTable.Active := true; выведи текст запроса и посмотри, что получается


 
DimChan ©   (2003-10-28 08:21) [2]

Select * From "C:\Adress\Adress.dbf" Adress where ( NUMBER Like "A%") or (Name Like "A%") or (TU Like "A%") or (NAMEU Like "A%") or (INFO1 Like "A%") or (INFO2 Like "A%") or (INFO3 Like "A%") or (INFO4 Like "A%") or (INFO5 Like "A%") or (INFO6 Like "A%") or (INFO7 Like "A%") or (INFO8 Like "A%") or (INFO9 Like "A%") or (INFO10 Like "A%") or (INFO11 Like "A%") or (GR Like "A%") or (SD_RG_VD Like "A%") or (AMR_ADRESS Like "A%")


 
DenK_vrtz ©   (2003-10-28 08:58) [3]

( NUMBER Like "A%") - наводит не на добрые мысли
и еще попробовать убрать все скобки


 
Илайдж ©   (2003-10-28 08:58) [4]

1 - Select * From "C:\Adress\Adress.dbf" Adress
2 - "" замени за ""


 
Илайдж ©   (2003-10-28 09:07) [5]

2 DenK_vrtz
запрос Select * from table where intfield like "%1%" проходит, по крайней мере в MSSQL2k


 
DimChan ©   (2003-10-28 10:59) [6]


> Илайдж © (28.10.03 08:58) [4]
> 1 - Select * From "C:\Adress\Adress.dbf" Adress
> 2 - "" замени за ""


1. Я убрал ADRESS, убрал скобки - результат тот же;
2. замена не допустима


> Илайдж © (28.10.03 09:07) [5]
> 2 DenK_vrtz
> запрос Select * from table where intfield like "%1%" проходит,
> по крайней мере в MSSQL2k


- Ты прав это верно, так же как и "1%", разница лишь в том, что здесь он ищет по началу строки, а не в строке.

Я руками исключил из поиска поля с типом данных NUMERIC, все хорошо, только проблема как программно исключить их.


 
Bob ©   (2003-10-28 11:15) [7]

А ты попробуй поиграть со свойством FieldType. Типа того, если поле не строковое (символьное), а NUMERIC то переходи к следующему полю


 
Илайдж ©   (2003-10-28 11:17) [8]

Можно попробовать оттолкнуться от Query1.Fields[i].ClassName
проверять на то что это TStringField и дальше добавлять в запрос


 
DenK_vrtz ©   (2003-10-28 11:20) [9]

if QProba.Fields[n].DataType = ftFloat then
showmessage("Поле Float");


 
DimChan ©   (2003-10-29 08:29) [10]

Я сделал нижеследующее, но дает ошибку, не позволяет присвоить значение:


if qproba.fields[x].ClassName = "TStringField" then
begin
y := y+1;
SetLength (SProba,y);
SProba[y] := QProba.Fields[x].FieldName ; SqlStr := SqlStr + ", " + SProba[y];

RichEdit1.Text := SqlStr;
end ;



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
1-56683
Stas
2003-11-07 15:21
2003.11.17
Изменение реестра


1-56664
Raduga
2003-11-05 09:27
2003.11.17
MsgWaitForMultipleObjectsEx


3-56438
Bless
2003-10-24 16:20
2003.11.17
Какое событие при переводе ячейки грида в режим редактирования?


3-56445
ANT0
2003-10-29 16:20
2003.11.17
IB 6.5


3-56468
DimChan
2003-10-24 07:21
2003.11.17
TQuery