Paradoxのテーブル作成処理について

解決


z  2012-12-14 02:51:09  No: 43471

お世話になります。

WindowsXP+Delphi2007+Office2003環境下でParadoxファイルに関する更新処理などを
BDEからdbGoへ置き換えようとしています。

Paradoxファイルのデータを表示する場合は、
ConnectionStringに下記文字列を指定してTADOQueryで取得・表示できました。
    PROVIDER=Microsoft.Jet.OLEDB.4.0; +
    DATA SOURCE=.;Extended Properties=Paradox 5.x;;

ただ、テーブル作成については、PRIMARY KEY指定まで含むと下記エラーが出てしまいます。
(含まないとエラーは出ない、またBDEではエラーは出ていなかった)

  ×××が見つかりません。パラメータや別名が正しいこと、
  無効な文字や区切り記号が含まれていないこと、または名前が長すぎないことを確認してください。

ADOQuery1.SQL.Add(CREATE TABLE EXPTABLE(FILEN CHARACTER(32)));
ADOQuery1.ExecSQL;
→OK

ADOQuery1.SQL.Add(CREATE TABLE EXPTABLE(FILEN CHARACTER(32), PRIMARY KEY (FILEN)));
ADOQuery1.ExecSQL;
→NG

上記のような問題が発生した場合の対策方法をご存知の方教えて頂けないでしょうか。


DEKO  2012-12-14 03:33:19  No: 43472

こんにちは。

テーブル作成時は PRIMARY KEY の指定をせず、
後から CREATE UNIQUE INDEX で主キーを作成すればいいかもしれません。


  2012-12-15 17:36:41  No: 43473

ありがとうございます。

早速教えて頂いたとおり実行してみたところ、INDEX作成時のSQL実行で同様のエラーが発生しました。
Delphi2007でParadoxを問題なく扱うことは難しいのでしょうか。
なお、TADOQueryおよびTADOConnectionのプロパティはほぼデフォルト設定です。
空のデータ・インデクスファイルを用意して新規作成時はコピーすることで対策はできましたが、
なぜ動かないのかちょっと納得できておりません。

  ×××××が見つかりません。パラメータや別名が正しいこと、
  無効な文字や区切り記号が含まれていないこと、または名前が長すぎないことを確認してください。

ADOQuery1.SQL.Add(CREATE TABLE EXPTABLE(FILEN CHARACTER(32)));
ADOQuery1.ExecSQL;
ADOQuery1.SQL.Add(CREATE UNIQUE INDEX IDXFILEN ON EXPTABLE(FILE_N));
ADOQuery1.ExecSQL;  →ここでNG


z  2012-12-15 17:38:16  No: 43474

書き込みに一部間違いがありました。
×  ADOQuery1.SQL.Add(CREATE UNIQUE INDEX IDXFILEN ON EXPTABLE(FILE_N));
○  ADOQuery1.SQL.Add(CREATE UNIQUE INDEX IDXFILEN ON EXPTABLE(FILEN));


DEKO  2012-12-16 01:54:23  No: 43475

こちらが参考になりませんか?

[CREATE INDEX for Paradox (Microsoft)]
http://msdn.microsoft.com/ja-jp/library/windows/desktop/ms711839%28v=vs.85%29.aspx


z  2012-12-18 03:28:02  No: 43476

貴重な情報をありがとうございます。
教えて頂いたURLの内容を確認いたしました。
ただ、私の理解不足かもしれませんが、私が実行したSQL文が
制限事項などにあたるようには思えませんでした。
そもそも主キー指定で例外が発生する点についても
BDEでは例外など発生しませんでした。


DEKO  2012-12-18 08:52:11  No: 43477

a.〜f. を意訳すると以下のような事が書いてあります。

a.テーブルにレコードを追加する前にプライマリインデックスを作成しなくてはならない。
b.プライマリインデックスはカラムの先頭から連続した n カラムで定義しなくてはならない。
c.プライマリインデックスはテーブルに一つでなくてはならない。
d.プライマリインデックスがテーブルに存在しない場合には
  Paradox ODBC ドライバは空のテーブルでない限りテーブルを更新できない。
e.プライマリインデックスの名前はテーブル名
  (テーブルファイル名の拡張子を除いた部分) と同じでなくてはならない。

これらのいずれかに該当していませんか?

> そもそも主キー指定で例外が発生する点についても
> BDEでは例外など発生しませんでした。

BDE と ODBC の実装は全くの別物です。

そもそも dBASE や Paradox は SQL 型のデータベースではなく、
BDE に SQL-92 サブセットの "Borland Local SQL" が実装されているので SQL が使えます。

ODBC で使える SQL も似たような感じで独自に実装されています。

# 今回の県を例えるなら、*.bmp ファイルをペイントブラシで開いたらエラーにならなかったけれど、
# 他のペイントツールで開いたらエラーになったというのに似ています。


DEKO  2012-12-18 08:53:46  No: 43478

×: 今回の県
○: 今回の件


z  2012-12-19 03:39:31  No: 43479

> これらのいずれかに該当していませんか?
eが該当していました。ありがとうございました。

> BDE と ODBC の実装は全くの別物です。
このような事を理解しておらず、同一のデータベースにアクセスするための
SQL文は同じように動くと勝手に思い込んでいました。
勉強になりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加