TADOQueryについて

解決


ハロハロ  2004-10-14 19:57:48  No: 11379

お世話になります。

BCBですがお知恵を貸してください。
TADOQueryを使ってデータをSaveToFileでXMLフォーマットで保存し、
そのデータをLoadToFileで読み込み、ACCESSに追加していますが、
データ件数(約15万件)が多い為時間がかかっています。

コード
while( !ADOQuery2->Eof )
{
  for( int i=0; i<ADOQuery2->FieldCount; i++)
  {
    str += "'" + ADOQuery2->Fields->Fields[i]->AsString + "',";
  }
  ADOQuery1->SQL->Text = "insert into test values(" + str + ")";
  ADOQuery1->ExecSQL();
  ADOQuery2->Next();
}
もっと短時間に追加できる方法があれば教えて下さい。
宜しくお願い致します。


bob  2004-10-15 03:24:36  No: 11380

この発言も放置プレイですね。
BCBでも、Delphi言語のコンパイルって出来るって聞いてるけど!?

回答:
XMLフォーマットで保存しないで、ADOQueryのDataSourceからSQL作成するのは?
少なくともファイルのライト/ロードのオーバーヘッド分は短縮できると思うけど...


ハロハロ  2004-10-15 17:52:45  No: 11381

bob さん有難う御座います。

>BCBでも、Delphi言語のコンパイルって出来るって聞いてるけど!?
出来ますね、、
なかなかレスがつかないので、Delphiのコードとしてあげればよかったと
後悔してます。。。

>XMLフォーマットで保存しないで
過去のデータをバックアップしておいてそのデータを後で見れるように
しておかなければなりません。
今回の方法が駄目な場合、accessファイルをバックアップするしかないかな?
と考えております。

>ファイルのライト/ロードのオーバーヘッド分は短縮できると思うけど...
この件ですが、ファイルのライト/ロードは時間は殆どかかっておりませんので、
気にしてません。
ファイルからデータベースへの追加(insert into)が短縮できないかなと感じてます。


bob  2004-10-15 18:24:45  No: 11382

必要なときだけ、ファイル保存した方がいいと思います。
って僕のソースもXMLパーサーで分解する必要があって
行っている部分もありますが...

試してませんが、以下のプロパティを確認してはどうでしょう?
1.ExecuteOptions
2.Prepared
3.CacheSize
4.Prepared

・・・ってちょっと確認、同じデータベース内の別テーブルにデータの
コピー(?)みたいなのを作りたいって事ではないですよね?


ハロハロ  2004-10-15 18:52:15  No: 11383

bob さん  有難う御座います

> 必要なときだけ、ファイル保存した方がいいと思います。
  毎回必要なデータを取るのに1時間くらいかかってしまう為、
  そのときのデータをXMLで保存しておけば、次回はすばやく
  開けるのではないかと思っています。。。

> 試してませんが、以下のプロパティを確認してはどうでしょう?
> 1.ExecuteOptions
> 2.Prepared
> 3.CacheSize
> 4.Prepared
  試してみましたが、駄目でした。。。

> ・・・ってちょっと確認、同じデータベース内の別テーブルにデータの
> コピー(?)みたいなのを作りたいって事ではないですよね?
  違いますね。。
  ORACELから必要なデータを取得して、データ処理。
  このときのデータを後で再利用する為にファイルに保存する。
  後日そのファイルデータをACCESSに追加してデータ処理をする。
  ようにしようとしてます。

私の説明が悪いと思われますので、再度行いたい事を説明します。
最初に書きましたように1件づつの追加は可能です。(時間がかかりすぎる)
1件づつだと、時間がかかる為、 ADOQueryにロードしたファイルデータを
insert into teble1 select ・・・・のように一括で追加できないものかと。。。
宜しくお願い致します。


bob  2004-10-16 00:05:22  No: 11384

SQL Server 2000なら、XMLをそのままテーブルにさせることは
出来たと思いますが、Accessの場合はわかりません。
#InsertのSQLを作る必要がないって事です。

たぶんそういう事ですよね?


ハロハロ  2004-10-16 02:41:54  No: 11385

>たぶんそういう事ですよね?
そういうことにもなりますね。。

ORACLE or SQLServerも考えましたが、使う人が1人か2人
なので、ACCESSでのローカルデータベースにしました。

気長に1レコードずつ追加するしかないようですね。。。
(17万レコードで1時間かかりました(CPU:500MHzで、、))


bob  2004-10-19 18:09:38  No: 11386

ADO 2.7を使ってみるとか。
でも、Delphiで使用としてうまくいかなかった
経験あり--; >過去ログ参照


ハロハロ  2004-10-23 02:38:57  No: 11387

bobさん有難う御座います。

ADO2.7の件については、試してませんが、
ADOTableだと、読み込んだxmlファイルを瞬時に表示するので、
このADOTableを利用して出来ないものかと試行錯誤してました。
結果的にどーやっても駄目でした。

仕方がないので、ACCESSのモジュールとVBでやる方向で再度検討
しなおします。

bobさんご協力有難う御座いました。


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

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






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