[A]のテーブル形式のparadoxのテーブルが3000程度あり稼動中のデータベースですが、
検索条件で[B]のクエリを使用したいのですがフィールド'day'でエラーとなります。
フィールド名を変更すると正常に動作しますのでSQL文に'day'は使用できないようです。
環境はDelphi7,XP,BDE,Paradoxです。
解決策としては、
(1)フィールド名を変更するプログラムで全てのファイルのフィールド名変更する。
Alter Table でできそうな気がするのですがDelphiでの使用の仕方が分かりません。
(2)SQL文で'day'が使える文に変更する。
なにか方法があると思うのですが?
どちらもいろいろ試行してみたのですが、うまくいかなずクリンチになっています。
どちらでもいいのでいい方法ないでしょか。
[A]---------------------------------------------------
with BDETable1.FieldDefs do
begin
Clear;
Add('Day', ftDate, 0, False);
Add('Hp', ftinteger, 0, False);
Add('Tp', ftinteger, 0, False);
Add('Yp', ftinteger, 0, False);
Add('Op', ftinteger, 0, False);
Add('Cp', ftinteger, 0, False);
----省略-------
end;
[B]--------------------------------------------------------
// mDir:string;//パス名
// mFile:String;//ファイル名 (指定ファイルを指定期間の条件で絞り込む)
Query1.Active:=False;
Query1.DatabaseName:=mDir;
mstr:='select dbn.* from'+ mFile +'where day>=:pday01 and day<=:pday02';
Query1.SQL.Text:=mstr;
Query1.Params[0].AsDate:=DateTimePicker1.Date;
Query1.Params[1].AsDate:=DateTimePicker2.Date;
Query1.Active:=true;
SQL文試行途中の文になっていました。以下が元の文です。
mstr:='select * from '+ mFile +' where day>=:pday01 and day<=:pday02';
CreateTable で他のフォルダにテーブルを作成し、データをコピーすることで解決しました。
フィールド名をAlter TableなどのSQLで変更することはdayが予約語ですから使えません。DataBase Disktopで変更するしかないようです。
ツイート | ![]() |