トップ回答者
mdbファイルのテーブルデータを他のmdbファイルのテーブルに移したい

質問
-
VB2005+Access2003(mdb)でスタンドアロン型のアプリケーションを開発しています。
OSはXpです。
下記のようなことをやりたいのですが、どんな手順で実行したらよいのでしょうか?
・e\VB2005\123.mdb のstaf_tblテーブルを、c\test\555.mdbのstaf_tblの対応する列に入れたいです。
イメージはこんな感じです。
e\VB2005\123.mdb test_DataSet(c\test\555.mdb) staf_tbl staf_tbl a b c d e a b c aaa d e 01 bbb ccc ddd eee → 01 bbb ccc 増 ddd eee 02 bbbb cccc dddd eeee 02 bbbb cccc 減 dddd eeee まずe\VB2005\123.mdb のstaf_tblテーブルに接続して、データをOleDbDataReaderなどで読み込んで・・・それから??
それともe\VB2005\123.mdb のstaf_tblテーブルをコピーしてそれをc\test\555.mdbのstaf_tblに入れる、でも列が増えててどうしよう・・・
という感じで止まっています。
何をしたらいいのかが、わかっていない状態なので書き込むのを迷ったのですが、手順を教えていただけませんでしょうか。
とても初歩的な質問ですみません。よろしくお願いします。
回答
-
bykyo さんからの引用 >select ~, 増減を判定してセット,~ into 新しいテーブル in 新しいテーブルを作るmdb
上のSQL文の「増減を判定してセット」を、ぬかせばなんとかできるでしょうか?
SQL文で実行すればいいのですね。
gekkaさんも書かれていますが、抜かす必要はありません。
さて、どのような実装を行うのか要件にも依存するのですが、とりあえずSQL文を実行するのであれば、以下のようになります。
Code SnippetOleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""e\VB2005\123.mdb"""
OleDbConnection1.Open()
OleDbCommand1.Connection = OleDbConnection1
Me.OleDbCommand1.CommandText = "insert into sataf_t in ""c\test\555.mdb"" select a, b, c, 0 as 増減, d, e from sataf_t"
OleDbCommand1.ExecuteNonQuery()
OleDbConnection1.Close()555.mdbにまだstaf_tが無い場合には、以下を実行します。
Code SnippetMe.OleDbCommand1.CommandText = "select a, b, c, 0 as 増減, e into staf_t in ""c\test\555.mdb"" from sataf_t"
すべての返信
-
trapemiyaさま、返信ありがとうございます。
私の書き方が悪くてすみません、aaa列は「増減」判定列ではなく実際は数字が入ります。数字の初期値は全部「0」でいいので、テーブルが移せたら、後で「0」を入れようと思ってました。質問するのに列に何か文字を入れておこうと思って、思いついた文字を入れてしまいました。考えていただいたのに申し訳ございません。次からは質問の仕方に気をつけます。
>select ~, 増減を判定してセット,~ into 新しいテーブル in 新しいテーブルを作るmdb
上のSQL文の「増減を判定してセット」を、ぬかせばなんとかできるでしょうか?
SQL文で実行すればいいのですね。
VB2005のデータソース構成ウィザードで自動で作られるのやデータセットデザイナばかり使っていたので、DataSetにないmdbへの接続や、そこからテーブルのデータを取得したり操作するというSQL文の組み立てやプログラムの仕方がいまいちわかっていませんでした。
とてもあつかましいですが、引き続きアドバイスありましたら宜しくお願い致します。
-
列名と列型が一致している場合にできるだけ自分でコードを書かずに楽して実現するには
- 空のデータセットを作成
- 挿入元のテーブルをサーバーエクスプローラーからデータセットデザイナにD&DするかDataAdapterを追加してDataAdapterとDataTableの型を設定
- 挿入先のテーブルをサーバーエクスプローラーからデータセットデザイナにD&DするかDataAdapterを追加してDataAdapterとDataTableの型を設定(aaa列がNULL許容で無い場合はAllowDBNullに注意)
- コピーしたいところで以下の処理を実行
Code SnippetDim daSelect As New DataAdapter2 '挿入元で作ったDataAdapter
Dim daInsert As New DataAdapter3 '挿入先で作ったDataAdapter
Dim dtInsert As New DataTable3 '挿入先で作ったDataTable
daSelect.Fill(dtInsert) '挿入元から読み込み
'ここでお好きな処理をどうぞ
For Each dr As DataRow In dtInsert
dr.SetAdded() '挿入するためにAddedに状態を変更
Next
daInsert.Update(dtInsert) '挿入先へ挿入
DataTableを余分に作りたくないならCommandTextとConnectionStringを書き換えればできます
#挿入元選択クエリでSELECT a,b,c,0 as aaa,d,e FROM staf_tblのようにしてaaa列の初期値を与えたりも -
bykyo さんからの引用 >select ~, 増減を判定してセット,~ into 新しいテーブル in 新しいテーブルを作るmdb
上のSQL文の「増減を判定してセット」を、ぬかせばなんとかできるでしょうか?
SQL文で実行すればいいのですね。
gekkaさんも書かれていますが、抜かす必要はありません。
さて、どのような実装を行うのか要件にも依存するのですが、とりあえずSQL文を実行するのであれば、以下のようになります。
Code SnippetOleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""e\VB2005\123.mdb"""
OleDbConnection1.Open()
OleDbCommand1.Connection = OleDbConnection1
Me.OleDbCommand1.CommandText = "insert into sataf_t in ""c\test\555.mdb"" select a, b, c, 0 as 増減, d, e from sataf_t"
OleDbCommand1.ExecuteNonQuery()
OleDbConnection1.Close()555.mdbにまだstaf_tが無い場合には、以下を実行します。
Code SnippetMe.OleDbCommand1.CommandText = "select a, b, c, 0 as 増減, e into staf_t in ""c\test\555.mdb"" from sataf_t"