none
mdbファイルのテーブルデータを他のmdbファイルのテーブルに移したい RRS feed

  • 質問

  • 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に入れる、でも列が増えててどうしよう・・・

    という感じで止まっています。

    何をしたらいいのかが、わかっていない状態なので書き込むのを迷ったのですが、手順を教えていただけませんでしょうか。

    とても初歩的な質問ですみません。よろしくお願いします。

    2008年6月14日 1:29

回答

  •  bykyo さんからの引用

    >select ~, 増減を判定してセット,~ into 新しいテーブル in 新しいテーブルを作るmdb 

     

    上のSQL文の「増減を判定してセット」を、ぬかせばなんとかできるでしょうか?

    SQL文で実行すればいいのですね。

     

    gekkaさんも書かれていますが、抜かす必要はありません。

    さて、どのような実装を行うのか要件にも依存するのですが、とりあえずSQL文を実行するのであれば、以下のようになります。

     

    Code Snippet
    OleDbConnection1.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 Snippet

    Me.OleDbCommand1.CommandText = "select a, b, c, 0 as 増減, e into staf_t in ""c\test\555.mdb"" from sataf_t"

     

    2008年6月16日 1:35
    モデレータ

すべての返信

  • ちょっと試す時間がありませんが、select ~, 増減を判定してセット,~ into 新しいテーブル in 新しいテーブルを作るmdb 

    というSQL文が思い浮かびます。ちょっと確かめてないんで自信がありませんが、とりあえずこのSQL文を調べるとできるかもしれません。

    2008年6月14日 2:16
    モデレータ
  • trapemiyaさま、返信ありがとうございます。

    私の書き方が悪くてすみません、aaa列は「増減」判定列ではなく実際は数字が入ります。数字の初期値は全部「0」でいいので、テーブルが移せたら、後で「0」を入れようと思ってました。質問するのに列に何か文字を入れておこうと思って、思いついた文字を入れてしまいました。考えていただいたのに申し訳ございません。次からは質問の仕方に気をつけます。

     

    >select ~, 増減を判定してセット,~ into 新しいテーブル in 新しいテーブルを作るmdb 

     

    上のSQL文の「増減を判定してセット」を、ぬかせばなんとかできるでしょうか?

    SQL文で実行すればいいのですね。

    VB2005のデータソース構成ウィザードで自動で作られるのやデータセットデザイナばかり使っていたので、DataSetにないmdbへの接続や、そこからテーブルのデータを取得したり操作するというSQL文の組み立てやプログラムの仕方がいまいちわかっていませんでした。

     

    とてもあつかましいですが、引き続きアドバイスありましたら宜しくお願い致します。

     

    2008年6月14日 11:29
  • 列名と列型が一致している場合にできるだけ自分でコードを書かずに楽して実現するには
    1. 空のデータセットを作成
    2. 挿入元のテーブルをサーバーエクスプローラーからデータセットデザイナにD&DするかDataAdapterを追加してDataAdapterとDataTableの型を設定
    3. 挿入先のテーブルをサーバーエクスプローラーからデータセットデザイナにD&DするかDataAdapterを追加してDataAdapterとDataTableの型を設定(aaa列がNULL許容で無い場合はAllowDBNullに注意)
    4. コピーしたいところで以下の処理を実行
    Code Snippet

    Dim 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列の初期値を与えたりも
    2008年6月14日 16:47
  •  bykyo さんからの引用

    >select ~, 増減を判定してセット,~ into 新しいテーブル in 新しいテーブルを作るmdb 

     

    上のSQL文の「増減を判定してセット」を、ぬかせばなんとかできるでしょうか?

    SQL文で実行すればいいのですね。

     

    gekkaさんも書かれていますが、抜かす必要はありません。

    さて、どのような実装を行うのか要件にも依存するのですが、とりあえずSQL文を実行するのであれば、以下のようになります。

     

    Code Snippet
    OleDbConnection1.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 Snippet

    Me.OleDbCommand1.CommandText = "select a, b, c, 0 as 増減, e into staf_t in ""c\test\555.mdb"" from sataf_t"

     

    2008年6月16日 1:35
    モデレータ
  • gekkaさま、返信ありがとうございました。

    詳しい手順を教えてくださってありがとうございます。

    aaa列に「0」を後から入れなくでも、クエリで値を最初から設定できるんですね!

    空のデータセットを作る、という発想が無かったのでとても勉強になりました。

    まだまだ不勉強でお尋ねすることばかりですが、また見かけた際には宜しくお願いします。

    ありがとうございました。

     

    2008年6月16日 12:03
  • trapemiyaさま返信ありがとうございました。

    自分で書いたinsert into 文が間違っていて思うとおりの処理ができいなかったのでとても助かりました。

    書いていただいたSQL文を見てなるほど!という感じです。

    これから早速試してみます、本当にありがとうございました。

    2008年6月16日 12:13