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

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

C# と VB.NET の入門サイト

Re[3]: ADODBで永続化したレコードセットの復元について


(過去ログ 96 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

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

分類:[Microsoft Office 全般] 

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

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

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


引用返信 編集キー/
■57570 / inTopicNo.2)  Re[1]: ADODBで永続化したレコードセットの復元について
□投稿者/ 魔界の仮面弁士 (2119回)-(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 するとか。
引用返信 編集キー/
■57612 / inTopicNo.3)  Re[2]: ADODBで永続化したレコードセットの復元について
□投稿者/ ふるふる (11回)-(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 するとか。
引用返信 編集キー/
■57613 / inTopicNo.4)  Re[3]: ADODBで永続化したレコードセットの復元について
□投稿者/ ふるふる (12回)-(2011/03/07(Mon) 09:45:55)
解決マークを忘れました。

解決済み
引用返信 編集キー/
■57614 / inTopicNo.5)  Re[3]: ADODBで永続化したレコードセットの復元について
□投稿者/ 魔界の仮面弁士 (2121回)-(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 プロバイダー側のサポートが必要になりますし、
データ競合(編集対象のレコードが既に編集されていた場合)への対処も考慮せねばなりません。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -