1

まず第一に、私はDelphiに関しては完全な初心者であることを述べなければなりませんが、私は14年ほど前に学校でTurboPascalプログラミングを行いました...

dBaseデータベースとBDEを使用してそれらにアクセスする商用Delphiプログラムがあります。基本的に、C#で記述された別のアプリケーションをこのデータベースに接続して、選択、挿入、更新、削除などのSQL操作を実行できるようにする必要があります。

残念ながら、dBaseに対してOLEDBを使用するとインデックスが破損し、ネイティブBDEアプリのみがデータに安全にアクセスできるようです。

一般的な考え方は、SQLステートメントを標準入力(Read / ReadLn)から読み取り、CSVデータを標準出力(WriteLn)に出力できる単純なDelphiコンソールアプリケーションを作成することでした。

どうすればこれを行うことができますか?

次のコードを使用して、単純なTTableアクセスを正常に機能させることができました。

tbl := TTable.Create(nil);

tbl.DatabaseName := 'Exceline';
tbl.TableName := 'KUNDE.DBF';
tbl.Active := True;

WriteLn(tbl.RecordCount);

tbl.Active := False;

同じことを実現する方法はありますが、代わりに直接SQLステートメントを実行することで実現できますか?

4

3 に答える 3

8

TQuery コンポーネントを使用して同じことができます。

qry := TQuery.Create(nil);

qry.DatabaseName := 'Exceline';
qry.SQL.Add('SELECT COUNT(*) AS CNT FROM KUNDE');
qry.Active := True;

WriteLn(qry.FieldByName('CNT').AsString);

qry.Active := False;
于 2010-07-11T02:41:29.660 に答える
4

Serg が既に書いたように: tquery オブジェクトを使用して、dbase テーブルに対して SQL クエリを実行できます。ただし、注意してください: あなたが提案する方法 (stdin を介して SQL クエリをプログラムに渡し、結果を stdout に返す) は、Windows では非常に遅くなります。

また、クエリの結果が膨大な場合、バッチでデータを返すために、プログラムに追加のコマンドを追加する必要があります。Delphi で COM サーバーを記述し、C# で COM サーバーを使用する方がおそらく簡単で、パフォーマンスが大幅に向上します。

最後にもう 1 つ: BDE は、Borland/Codegear/Embarcadero によって数年間サポートされていません。それはまだ機能しますが、特に XP よりも新しい Windows バージョンでは、それを維持するのがますます難しくなっています。代替手段の 1 つは tdbf (sourceforge を参照) かもしれませんが、私はそれについて十分な情報に基づいた意見を述べるのに十分な経験がありません。

于 2010-07-11T10:28:51.767 に答える
0

BDEは 10 年前に廃止されて以来維持されていないため、次のようになります。

アドバンテージ データベース サーバーを検討しましたか? dBase、Clipper、その他xBaseにアクセスできるサーバーです

それは非常にうまく機能し、.NET Data Provider が利用可能です

これにより、ソリューション パスの複雑さが大幅に軽減されます。

--jeroen

于 2010-07-24T11:20:14.027 に答える