tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルSQLでテーブル間でフィールドコピーするには?
記事No10711
投稿日: 2012/03/06(Tue) 10:51
投稿者ペコ
[開発環境]
・Windows7 64Bit
・VisualBasic2008EE
・Access2000
------------------------------
SQLについて質問です。

テーブル間でのフィールドのコピーを行いたいのですが、
下記のコード(モジュール)を連続的に実行すると
コピー先で本来
[フィールドA][フィールドB]
AAA           BBB
AAA           BBB
AAA           BBB
となるべきところが
[フィールドA][フィールドB]
AAA
AAA
AAA
              BBB
              BBB
              BBB
のようにズレてしまいまう上、コピー先ではオートナンバー型のフィールドも中途半端な番号から始まってしまいます。
また、コピーするフィールドによっては
「指定されたデータ量がフィールドサイズを超えています」
といったエラーも発生します。

何が原因かわかりません。
どなたかアドバイスをお願いいたします。

[--- コード ---]
    Sub DbCopyField(ByVal myFilePath As String, ByVal myExpTableName As String, ByVal myExpFieldName As String, ByVal myImpTableName As String, ByVal myImpFieldName As String)

        Dim Cn As New System.Data.OleDb.OleDbConnection(Provider & myFilePath)
        Dim SQLCm As System.Data.OleDb.OleDbCommand = Cn.CreateCommand

        Try
            Cn.Open()
            SQLCm.CommandText = "INSERT INTO " & myImpTableName & "(" & myImpFieldName & ") SELECT " & myExpFieldName & " FROM(" & myExpTableName & ")"
            SQLCm.ExecuteNonQuery()
            Cn.Close()

        Catch ex As Exception
            MessageBox.Show(ex.Message)
            Cn.Close()
        End Try

    End Sub

[ツリー表示へ]
タイトルRe: SQLでテーブル間でフィールドコピーするには?
記事No10712
投稿日: 2012/03/06(Tue) 13:23
投稿者shu

> コピー先で本来

> となるべきところが

> のようにズレてしまいまう
提示されているコードでは明らかに1フィールドしか指定しないでInsertしているので
当然の結果です。『となるべき』ではなく『としたい』ではないでしょうか?


> 上、コピー先ではオートナンバー型のフィールドも中途半端な番号から始まってしまいます。
オートナンバー型は自動で番号が入るフィールドなので最後にレコードを追加したときの番号から継続されますよ。


> また、コピーするフィールドによっては
> 「指定されたデータ量がフィールドサイズを超えています」
> といったエラーも発生します。
コピー先のフィールドサイズがコピー元より小さいためでしょう。

[ツリー表示へ]
タイトルRe^2: SQLでテーブル間でフィールドコピーするには?
記事No10713
投稿日: 2012/03/06(Tue) 14:18
投稿者ペコ
shuさん、レスありがとうございます。
> 提示されているコードでは明らかに1フィールドしか指定しないでInsertしているので
> 当然の結果です。
コピーが必要なフィールドをその都度、1フィールドずつコピーしたいのですが、
そのような処理は不可能ということでしょうか?
(レコード単位で書き込む方法のみ?)

> オートナンバー型は自動で番号が入るフィールドなので最後にレコードを追加したときの番号から継続されますよ。
UPDATEで最後にオートナンバーを書き直す処理が必要ということでしょうか?

> コピー先のフィールドサイズがコピー元より小さいためでしょう。
フィールドの型を変更することで解決しました。

初心者のため、間違った解釈をしているかもしれませんが、ご教示いただけると幸いです。

[ツリー表示へ]