- ベストアンサー
ADO(js)でのデータ挿入を高速化する方法について
- ADO(js)を使用してMDBのデータをCSV出力する際に、処理が非常に遅くなっている状況です。処理時間を短縮するための方法を教えていただきたいです。
- 現在、ADOを使用してMDBデータベースのデータをCSVファイルに出力しているところですが、100件のデータを出力するだけでも4秒かかってしまいます。ループで出力したいため、処理時間を短縮する方法を教えていただけないでしょうか。
- ADOを使用してMDBデータベースからCSVファイルにデータを出力する際に、処理時間が非常に長くなってしまいます。ループでの出力が必要なため、処理時間を短縮する方法を教えていただきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
うっかりしました。 SaveToFileメソッドは上書きなので、 以下のように変更してください。 obj.SaveToFile(ファイル名,2); 第2パラメータに2を指定しないと、 既存ファイルがある場合は失敗します。
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
では発想を変えて、CSVファイルの方を変換したら? function 変換(ファイル名) { var obj = new ActiveXObject("ADODB.Stream"); obj.Open(); obj.Type = 2; obj.Charset = "SHIFT_JIS"; obj.LoadFromFile(ファイル名); var 内容 = obj.ReadText(); 内容 = 内容.replace(/C/g,"@");//★適宜変更 obj.Position = 0; obj.WriteText(内容); obj.SaveToFile(ファイル名); obj.Close(); 内容 = null; obj = null; } インデントに漢字空白を使用しています。 コピペするとエラーになるので、半角空白に変換 してから御利用ください。
- nda23
- ベストアンサー率54% (777/1415)
MDBの中にクエリは作れませんか? クエリならReplaceやIIf等の関数が 使用できます。また、テーブルと 同様に操作することができます。
お礼
ありがとうございます。 ADOからmdbのクエリを操作できることは知りませんでした。 試してみます。 IIFは使用できるのですけど、replaceが・・・
- nda23
- ベストアンサー率54% (777/1415)
>例のようにループで出力したいと データベースの操作はSQLでやるのが最良です。 メソッドをループするのは最も拙い方法です。 その方法にこだわる限り、速度は改善しません。
お礼
なぜループにしたかといいますと、mdbから抽出したデータのワードを置換します。 しかしながら、ADOではreplaceが使えないようです。 データを成型し、どのようにcsv出力するかと考えたときに、 知識がない故、ローカルで成型し、メソッドのループしか思いつきませんでした。 お時間がありましたら、何卒アドバイスのほどよろしくお願いいたします。
補足
早々のご教示ありがとうございます。 申し訳ありません、DB操作も初心者と記述すべきでした。 私の検索方法が悪いのだとは思いますが、jsで探すとなかなか見つからなかったり メソッドをループさせたほうが早かったなどのHPがあり、行き詰っておりました。 こだわりは、DBの容量を肥大させないということだけです。 検索キーワード等、何かヒントがございましたら、どうかご教示願います。
お礼
ありがとうございます! CSVは更新できないと思い込んでしまってました。 streamからならいけますね。 光が見えた気がいたします。 IEの設定をいじってますが、 「オートメーションサーバーはオブジェクトを作成できません」 がでて、まだ試せてはおりませんが、無事解決できると思います。 まお礼が遅くなってしまい申し訳ありません。 本当にありがとうございました。