- - PR -
異データセット、同レイアウトデータテーブルへのコピー
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-25 19:41
いつも参考にさせていただいております。
早速ですが、データテーブル間のデータ移送についてご教授ください。 VB2005ですが、同じレイアウトのデータテーブル(仮にdtt_sameA,dtt_sameB)を、 異なるデータセット(仮にdts_A , dts_B)へ実装しています。 dts_A、dts_Bは別プロジェクト、使用するときの実体も当然別です。 このとき、dts_A.dtt_sameAの値をdts_B.dtt_sameBにコピー(あらいがえ)したいのですが 以下のコーディングでは「型を変換できません」ということでNGでした。 dts_A = dts_B dts_A = ctype(dts_B , [dts_Aの型名]) また、 dts_A.Merge(dts_B) についてはエラーとはならないのですが、dts_Bの値が dts_Aに値が反映されません。 そこで・・ 1)データセットの型変換がうまくいけば良いような雰囲気ですが どうすればデータセットが、型変換可能なのでしょうか。 (単純にデータテーブルとその要素が同じではNG?) 2)この場合、どうしてmergeがうまくいかないのでしょうか? 私のデータセット・データテーブルに対する考え方が根本的に 間違っているのかもしれませんが・・ お助けいただければ幸いです。 [ メッセージ編集済み 編集者: ぴらおか 編集日時 2008-04-25 19:42 ] | ||||||||
|
投稿日時: 2008-04-25 20:15
ImportRowで一行ずつコピーするとか。
| ||||||||
|
投稿日時: 2008-04-25 20:22
お返事ありがとうございます。 todoさんのご意見も考えたのですが、大量データのコピーを行う際に やはり時間がかかってしまうので、最後の手段です・・ (ものぐさで申し訳ありません) | ||||||||
|
投稿日時: 2008-04-25 21:44
これはコピーではありません。入れ替わっているだけです (それでも良いのかもしれませんが。。)
うまくいくと思いますが。。。。(例外出てないんですよね?) (主キーが足らない?) | ||||||||
|
投稿日時: 2008-04-25 22:01
indigo-xさん、ありがとうございます。
はい。例外は出ていません。 そして、確かに主キーはつけていません。 「うまくいかない」とは、ステップ実行してMergeした直後の行で止めて ウォッチで値をみた結果です。 トンチンカンかもしれませんが、AcceptChangeを実行してもだめでした。 もう少し思い当たる節あれば、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-04-25 22:32
(書き方がまずかったですが、
入れ替えの話は忘れてください) Mergeでないと無理と思ってもらってよいと思います。 主キーを取り合えず付けてはどうでしょう | ||||||||
|
投稿日時: 2008-04-25 23:36
件のデータテーブルには主キーはついていませんが、 主キーというキーワードで少し調べました。 「DataSet の内容のマージ」 http://msdn2.microsoft.com/ja-jp/library/aszytsd8(VS.80).aspx こちらを見てみましたが、「主キーに合致しなければ追記する」とありましたが おそらく、データテーブル名が一致しないと追記されない・・のでしょうか。 ひとつ修正があります。mergeの動きを全く理解していなかったのですが、 しっかりデータセットに新規データテーブルとして追加されていました。 やはり、データテーブル名が一致しないと、追記できないのでしょうか・・ | ||||||||
|
投稿日時: 2008-04-26 08:29
よく見たら dts_A ってデータテーブルじゃなくてデータセットなのですね。
DataSet.Merge なら当然、同じ名前のテーブルがなければ 新しいテーブルが作成されてそちらに追加されます。 また、そのデータセット内に他のテーブルがあれば、それもマージされてしまいます。 この場合使うべきなのは、DataTable.Merge の方でしょう。 ちょっと別のところで気になったのですが
DataTable はすべてのデータをメモリに保持します。 本当に「大量」なら DataSet の使用を避けた方がよいと思います。 |
1