- PR -

異データセット、同レイアウトデータテーブルへのコピー

1
投稿者投稿内容
ぴらおか
会議室デビュー日: 2003/08/26
投稿数: 15
投稿日時: 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 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2008-04-25 20:15
ImportRowで一行ずつコピーするとか。
ぴらおか
会議室デビュー日: 2003/08/26
投稿数: 15
投稿日時: 2008-04-25 20:22
引用:

todoさんの書き込み (2008-04-25 20:15) より:
ImportRowで一行ずつコピーするとか。



お返事ありがとうございます。

todoさんのご意見も考えたのですが、大量データのコピーを行う際に
やはり時間がかかってしまうので、最後の手段です・・
(ものぐさで申し訳ありません)

indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-04-25 21:44
引用:

dts_A = dts_B
dts_A = ctype(dts_B , [dts_Aの型名])


これはコピーではありません。入れ替わっているだけです
(それでも良いのかもしれませんが。。)

引用:

dts_A.Merge(dts_B)


うまくいくと思いますが。。。。(例外出てないんですよね?)
(主キーが足らない?)
ぴらおか
会議室デビュー日: 2003/08/26
投稿数: 15
投稿日時: 2008-04-25 22:01
indigo-xさん、ありがとうございます。

引用:

indigo-xさんの書き込み (2008-04-25 21:44) より:
これはコピーではありません。入れ替わっているだけです
(それでも良いのかもしれませんが。。)
引用:


入れ替わっていたら、それはそれでOKなのですが
そもそも型変換エラーとなってしましいます。
どういう条件の時、データセットからデータセットへキャストできるのでしょうか・・?

dts_A.Merge(dts_B)


うまくいくと思いますが。。。。(例外出てないんですよね?)
(主キーが足らない?)



はい。例外は出ていません。
そして、確かに主キーはつけていません。
「うまくいかない」とは、ステップ実行してMergeした直後の行で止めて
ウォッチで値をみた結果です。
トンチンカンかもしれませんが、AcceptChangeを実行してもだめでした。

もう少し思い当たる節あれば、よろしくお願いいたします。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-04-25 22:32
(書き方がまずかったですが、
  入れ替えの話は忘れてください)

Mergeでないと無理と思ってもらってよいと思います。
主キーを取り合えず付けてはどうでしょう
ぴらおか
会議室デビュー日: 2003/08/26
投稿数: 15
投稿日時: 2008-04-25 23:36
引用:

indigo-xさんの書き込み (2008-04-25 22:32) より:
(書き方がまずかったですが、
  入れ替えの話は忘れてください)

Mergeでないと無理と思ってもらってよいと思います。
主キーを取り合えず付けてはどうでしょう



件のデータテーブルには主キーはついていませんが、
主キーというキーワードで少し調べました。
「DataSet の内容のマージ」
http://msdn2.microsoft.com/ja-jp/library/aszytsd8(VS.80).aspx
こちらを見てみましたが、「主キーに合致しなければ追記する」とありましたが
おそらく、データテーブル名が一致しないと追記されない・・のでしょうか。


ひとつ修正があります。mergeの動きを全く理解していなかったのですが、
しっかりデータセットに新規データテーブルとして追加されていました。
やはり、データテーブル名が一致しないと、追記できないのでしょうか・・
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-04-26 08:29
よく見たら dts_A ってデータテーブルじゃなくてデータセットなのですね。
DataSet.Merge なら当然、同じ名前のテーブルがなければ
新しいテーブルが作成されてそちらに追加されます。
また、そのデータセット内に他のテーブルがあれば、それもマージされてしまいます。
この場合使うべきなのは、DataTable.Merge の方でしょう。

ちょっと別のところで気になったのですが
引用:

todoさんのご意見も考えたのですが、大量データのコピーを行う際に
やはり時間がかかってしまうので、最後の手段です・・


DataTable はすべてのデータをメモリに保持します。
本当に「大量」なら DataSet の使用を避けた方がよいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)