Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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; выведи текст запроса и посмотри, что получается


Наверх

Титульная страница Поиск, карта сайта Написать письмо