|

|
|
 |
5.4 ワークブックやCSVファイルへのデータ追加、更新 |
 |
|
|
|
|
|
ADOを使って開いたワークシートやCSVファイルに変更を加える方法です。これらも、ADOオブジェクトのExecuteというメソッドでSQLを実行し行います。
なお、更新系のSQL文を実行してもレコードセットは返ってきません。また、オープン時は必ず更新モード(ReadOnly=0)を指定する必要があります。
それと、それと少しだけRDBとの違いがあるのも注意が必要。トランザクション処理が出来ない点、INSERT時はプライマリ重複エラーがない点です。
また、ワークシートでは追加(INSERT)と更新(UPDATE)が可能、CSVでは追加(INSERT)のみが可能という制約もあります。
|
|
|
|
|
|
|
|
|
|
CSVファイルは、データの追加(INSERT)のみが可能です。例では、c:\happyというフォルダに入っているADO_EXCEL.csvというCSVファイルへレコードを追加しています。やってることは、かなりムリヤリで実用的じゃないですが、まぁ気にしないでくださいな(汗)
CSVファイルの場合は追加時にキー重複エラーが発生することはありませんが、一応On Error Resume Nextを入れ、更新の後にエラー判定処理を行っています。
なお、基本的には、『3.6 SQLの実行(更新、追加、削除等)』と似ているので、細かいことはそちらを参照してください。大きな違いは、トランザクション処理を行っていない(出来ない)点です。
Sub prcAdCsvInsert()
'Access VBA Tips
'5.4 データ追加、更新/CSVは追加のみ
'@SQLエラーでプログラムが異常終了するのを回避するため
On Error Resume Next
Dim objADO As New ADODB.Connection
Dim strSQL As String
'ADOを使い更新モードでCSVファイルを扱う準備(Open)を行います。
objADO.Open "Driver={Microsoft Text Driver (*.txt; *.csv)}; " & _
"DBQ=c:\happy;" & _
"ReadOnly=0"
'==============================================================
'= データ追加の例
'==============================================================
'レコード追加のSQLを定義
strSQL = "INSERT INTO ADO_EXCEL.csv " & _
" (日付 " & _
" ,店舗コード) " & _
"VALUES ('2003/11/30' " & _
" ,'T5130') "
'レコード追加のSQLを実行します
objADO.Execute strSQL
'SQL実行結果の判定
If Err.Number <> 0 Then
'SQLが異常終了したらエラー内容の表示をします
Call prcSqlError(objADO)
End If
'ADOをクローズします
objADO.Close
'オブジェクトの破棄
Set objADO = Nothing
End Sub
'==============================================================
'= エラー時処理(例ではエラーの詳細を表示するだけ)
'==============================================================
Sub prcSqlError(tmpCon As ADODB.Connection)
Dim objErrItem As Error
Set objErrItem = tmpCon.Errors.Item(0)
Debug.Print "Description=" & objErrItem.Description
Debug.Print "HelpContext=" & objErrItem.HelpContext
Debug.Print "HelpFile=" & objErrItem.HelpFile
Debug.Print "NativeError=" & objErrItem.NativeError
Debug.Print "Number=" & objErrItem.Number
Debug.Print "Source=" & objErrItem.Source
Debug.Print "SQLState=" & objErrItem.SQLState
Set objErrItem = Nothing
End Sub
|
|
|
|
|
|
|
|
|
|
|
ワークシートは、データの追加(INSERTI)と更新(UPDATE)が可能です。例では、c:\happy\ADO_EXCEL.xlsというワークブックを開き、ワークシートへレコードの追加とレコードの更新を行っています。これも、かなりムリヤリで実用的じゃないですが、まぁ気にしないでくださいな(汗)
なお、ワークシートの場合も追加時のキー重複エラーが発生することはありませんが、一応On Error Resume Nextを入れ、更新の後にエラー判定処理を行っています。
なお、基本的には、『3.6 SQLの実行(更新、追加、削除等)』と似ているので、細かいことはそちらを参照してください。大きな違いは、トランザクション処理を行っていない(出来ない)点です。
Sub prcAdoExcelUpdate()
'Access VBA Tips
'5.4 データ追加、更新/Excelは追加と更新のみ
'SQLエラーでプログラムが異常終了するのを回避するため
On Error Resume Next
Dim objADO As New ADODB.Connection
Dim strSQL As String
'ADOを使いCSVファイルを更新モードで開きます。
objADO.Open "Driver={Microsoft Excel Driver (*.xls)}; " & _
"DBQ=c:\happy\ADO_EXCEL.xls;" & _
"ReadOnly=0"
'レコード追加のSQLを定義
strSQL = "INSERT INTO U_TBL " & _
" (日付 " & _
" ,店舗コード) " & _
"VALUES ('2003/11/30' " & _
" ,'Z5130') "
'レコード追加のSQLを2回実行します。
'(エクセルファイルなのでキー重複エラーは出ません)
'追加したデータが、次の更新時の対象データになります。
objADO.Execute strSQL
objADO.Execute strSQL
'レコード更新のSQLを定義
strSQL = "UPDATE U_TBL " & _
" SET データ番号 = '100'" & _
" ,担当者 = '00M5365'" & _
" ,会員番号 = '5144M200210724'" & _
" WHERE 店舗コード='Z5130'"
'レコード更新のSQLを実行します。事前に、対象データを2件追加しています。
'ただし、更新時のキー重複はエラーです
objADO.Execute strSQL
'SQL実行結果の判定
If Err.Number <> 0 Then
'SQLが異常終了したらエラー内容の表示をします
Call prcSqlError(objADO)
End If
'データベースのクローズ
objADO.Close
End Sub
'==============================================================
'= エラー時処理(例ではエラーの詳細を表示するだけ)
'==============================================================
Sub prcSqlError(tmpCon As ADODB.Connection)
Dim objErrItem As Error
Set objErrItem = tmpCon.Errors.Item(0)
Debug.Print "Description=" & objErrItem.Description
Debug.Print "HelpContext=" & objErrItem.HelpContext
Debug.Print "HelpFile=" & objErrItem.HelpFile
Debug.Print "NativeError=" & objErrItem.NativeError
Debug.Print "Number=" & objErrItem.Number
Debug.Print "Source=" & objErrItem.Source
Debug.Print "SQLState=" & objErrItem.SQLState
End Sub
|
|
|
|
|
|