C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.57558 の関連記事表示

<< 0 >>
■57558  ADODBで永続化したレコードセットの復元について
□投稿者/ ふるふる -(2011/03/04(Fri) 10:31:14)

    分類:[Microsoft Office 全般] 

    HTAアプリケーションを作って複数のユーザーに利用してもらってます。どれだけのユーザーがいるかは不定で、ユーザーごとの設定を
    ADTG形式のレコードセットを使ってプログラムからテーブルで管理しています。

    開発とメンテナンスのため、開発機のAccess2007でADTGのファイルを取り込みたいのですが、レコードセットとしてOpenすることはできますけどAccessのテーブルオブジェクトとして取り込む方法がわかりません。

    VBAでレコードセットを開き、同じ形式のテーブルを動的に作成してレコードを1件1件コピーする方法を思いつきましたが、効率が悪そうです。
    AccessでもテーブルをRecordsetで開いてSaveにより永続化できるのだから、永続化したファイルをAccessに簡単に取り込めそうな気がするのですが。

親記事 /過去ログ96より / 関連記事表示
削除チェック/

■57570  Re[1]: ADODBで永続化したレコードセットの復元について
□投稿者/ 魔界の仮面弁士 -(2011/03/04(Fri) 23:52:30)
    No57558 (ふるふる さん) に返信
    > 開発機のAccess2007でADTGのファイルを取り込みたいのですが、レコードセットとしてOpenすることはできますけど
    > Accessのテーブルオブジェクトとして取り込む方法がわかりません。

    恐らくは、ふるふるさんが考えられている方法しか無いと思いますよ。

    別解として思いつくのは、
     ・Excel の CopyFromRecordset で xls 化してから DoCmd.TransferDatabase でインポート、または I-ISAM で SELECT INTO。
     ・GetString メソッドで CSV 化してから DoCmd.TransferDatabase でインポート、または I-ISAM で SELECT INTO。
     ・ADTG を XML 形式で Save しなおしてから、XSLT で属性を要素に変換し、ImportXML メソッド。
    ぐらいですかね。効率については、やってみないと分かりませんけれども。


    > 1件1件コピーする方法を思いつきましたが、効率が悪そうです。
    インポートでは無く個別登録で処理効率を上げるとすれば、DAO(≠ADO)で
    dbOpenTable 形式の dbAppendOnly な Recordset を開き、そこに AddNew するとか。
記事No.57558 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57612  Re[2]: ADODBで永続化したレコードセットの復元について
□投稿者/ ふるふる -(2011/03/07(Mon) 09:45:25)
    回答ありがとうございます。

    Recordsetの永続化はデータベース上のテーブルを外部ファイルとして保存するような機能なので、逆に取り込む機能も実装しているだろう、と思って探したところ見つからなかったので質問してみた次第です。
    ユーザーごとの設定事項は容量的にたかが知れているので、当初のアイデアどおり、レコードセットとしてオープンし、DB上のテーブルへ更新する方法にします。


    No57570 (魔界の仮面弁士 さん) に返信
    > ■No57558 (ふるふる さん) に返信
    >>開発機のAccess2007でADTGのファイルを取り込みたいのですが、レコードセットとしてOpenすることはできますけど
    >>Accessのテーブルオブジェクトとして取り込む方法がわかりません。
    >
    > 恐らくは、ふるふるさんが考えられている方法しか無いと思いますよ。
    >
    > 別解として思いつくのは、
    >  ・Excel の CopyFromRecordset で xls 化してから DoCmd.TransferDatabase でインポート、または I-ISAM で SELECT INTO。
    >  ・GetString メソッドで CSV 化してから DoCmd.TransferDatabase でインポート、または I-ISAM で SELECT INTO。
    >  ・ADTG を XML 形式で Save しなおしてから、XSLT で属性を要素に変換し、ImportXML メソッド。
    > ぐらいですかね。効率については、やってみないと分かりませんけれども。
    >
    >
    >>1件1件コピーする方法を思いつきましたが、効率が悪そうです。
    > インポートでは無く個別登録で処理効率を上げるとすれば、DAO(≠ADO)で
    > dbOpenTable 形式の dbAppendOnly な Recordset を開き、そこに AddNew するとか。
記事No.57558 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57613  Re[3]: ADODBで永続化したレコードセットの復元について
□投稿者/ ふるふる -(2011/03/07(Mon) 09:45:55)
    解決マークを忘れました。
記事No.57558 のレス / END /過去ログ96より / 関連記事表示
削除チェック/

■57614  Re[3]: ADODBで永続化したレコードセットの復元について
□投稿者/ 魔界の仮面弁士 -(2011/03/07(Mon) 10:10:56)
    No57612 (ふるふる さん) に返信
    > Recordsetの永続化はデータベース上のテーブルを外部ファイルとして保存するような機能なので、
    > 逆に取り込む機能も実装しているだろう、と思って探したところ見つからなかったので質問してみた次第です。
    
    「データ」を取り込む機能ならあります(そもそもはオフライン更新のための機能です)。
    しかし、テーブル構造をスキーマごとインポートするための機能は用意されていません。
    
    永続化されたデータの編集結果(削除/更新/追加レコード)を反映させるには、このようにします。
     Set rs = New ADODB.Recordset
     rs.CursorLocation = adUseClient   '永続化にはクライアントカーソルが必要
     rs.Open data                      '永続化された IStream (もしくはファイルパス) を開く
     Set rs.ActiveConnection = con     '再接続する
     rs.UpdateBatch adAffectAll        '一括反映
    
    ただしバッチ更新モードを使うためには、OLE DB プロバイダー側のサポートが必要になりますし、
    データ競合(編集対象のレコードが既に編集されていた場合)への対処も考慮せねばなりません。
記事No.57558 のレス / END /過去ログ96より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -