![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL [D5, MySQL, Paradox]
DimChan © (2003-10-27 08:39:00)
День Добрый, МАСТЕРА! Вот ситуация, я получаю файлы 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", буду очень благодарен за любую помощь.
DimChan (2003-10-29 08:29:00) [1]
Я сделал нижеследующее, но дает ошибку, не позволяет присвоить значение:
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 ;
DenK_vrtz (2003-10-28 11:20:00) [2]
if QProba.Fields[n].DataType = ftFloat then
showmessage("Поле Float");
Илайдж (2003-10-28 11:17:00) [3]
Можно попробовать оттолкнуться от Query1.Fields[i].ClassName
проверять на то что это TStringField и дальше добавлять в запрос
Bob (2003-10-28 11:15:00) [4]
А ты попробуй поиграть со свойством FieldType. Типа того, если поле не строковое (символьное), а NUMERIC то переходи к следующему полю
DimChan (2003-10-28 10:59:00) [5]
> Илайдж © (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, все хорошо, только проблема как программно исключить их.
Илайдж (2003-10-28 09:07:00) [6]
2 DenK_vrtz
запрос Select * from table where intfield like "%1%"проходит, по крайней мере в MSSQL2k
DenK_vrtz (2003-10-28 08:58:00) [7]
( NUMBERLike "A%") - наводит не на добрые мысли
и еще попробовать убрать все скобки
Илайдж (2003-10-28 08:58:00) [8]
1 - Select * From "C:\Adress\Adress.dbf" Adress
2 - "" замени за ""
DimChan (2003-10-28 08:21:00) [9]
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-27 08:43:00) [10]
Перед QTable.Active := true; выведи текст запроса и посмотри, что получается