お世話になります。
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();
}
もっと短時間に追加できる方法があれば教えて下さい。
宜しくお願い致します。
この発言も放置プレイですね。
BCBでも、Delphi言語のコンパイルって出来るって聞いてるけど!?
回答:
XMLフォーマットで保存しないで、ADOQueryのDataSourceからSQL作成するのは?
少なくともファイルのライト/ロードのオーバーヘッド分は短縮できると思うけど...
bob さん有難う御座います。
>BCBでも、Delphi言語のコンパイルって出来るって聞いてるけど!?
出来ますね、、
なかなかレスがつかないので、Delphiのコードとしてあげればよかったと
後悔してます。。。
>XMLフォーマットで保存しないで
過去のデータをバックアップしておいてそのデータを後で見れるように
しておかなければなりません。
今回の方法が駄目な場合、accessファイルをバックアップするしかないかな?
と考えております。
>ファイルのライト/ロードのオーバーヘッド分は短縮できると思うけど...
この件ですが、ファイルのライト/ロードは時間は殆どかかっておりませんので、
気にしてません。
ファイルからデータベースへの追加(insert into)が短縮できないかなと感じてます。
必要なときだけ、ファイル保存した方がいいと思います。
って僕のソースもXMLパーサーで分解する必要があって
行っている部分もありますが...
試してませんが、以下のプロパティを確認してはどうでしょう?
1.ExecuteOptions
2.Prepared
3.CacheSize
4.Prepared
・・・ってちょっと確認、同じデータベース内の別テーブルにデータの
コピー(?)みたいなのを作りたいって事ではないですよね?
bob さん 有難う御座います
> 必要なときだけ、ファイル保存した方がいいと思います。
毎回必要なデータを取るのに1時間くらいかかってしまう為、
そのときのデータをXMLで保存しておけば、次回はすばやく
開けるのではないかと思っています。。。
> 試してませんが、以下のプロパティを確認してはどうでしょう?
> 1.ExecuteOptions
> 2.Prepared
> 3.CacheSize
> 4.Prepared
試してみましたが、駄目でした。。。
> ・・・ってちょっと確認、同じデータベース内の別テーブルにデータの
> コピー(?)みたいなのを作りたいって事ではないですよね?
違いますね。。
ORACELから必要なデータを取得して、データ処理。
このときのデータを後で再利用する為にファイルに保存する。
後日そのファイルデータをACCESSに追加してデータ処理をする。
ようにしようとしてます。
私の説明が悪いと思われますので、再度行いたい事を説明します。
最初に書きましたように1件づつの追加は可能です。(時間がかかりすぎる)
1件づつだと、時間がかかる為、 ADOQueryにロードしたファイルデータを
insert into teble1 select ・・・・のように一括で追加できないものかと。。。
宜しくお願い致します。
SQL Server 2000なら、XMLをそのままテーブルにさせることは
出来たと思いますが、Accessの場合はわかりません。
#InsertのSQLを作る必要がないって事です。
たぶんそういう事ですよね?
>たぶんそういう事ですよね?
そういうことにもなりますね。。
ORACLE or SQLServerも考えましたが、使う人が1人か2人
なので、ACCESSでのローカルデータベースにしました。
気長に1レコードずつ追加するしかないようですね。。。
(17万レコードで1時間かかりました(CPU:500MHzで、、))
ADO 2.7を使ってみるとか。
でも、Delphiで使用としてうまくいかなかった
経験あり--; >過去ログ参照
bobさん有難う御座います。
ADO2.7の件については、試してませんが、
ADOTableだと、読み込んだxmlファイルを瞬時に表示するので、
このADOTableを利用して出来ないものかと試行錯誤してました。
結果的にどーやっても駄目でした。
仕方がないので、ACCESSのモジュールとVBでやる方向で再度検討
しなおします。
bobさんご協力有難う御座いました。
ツイート | ![]() |