|

|
|
 |
8.4 データ追加、更新 |
 |
|
|
|
|
|
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を入れ、更新の後にエラー判定処理を行っています。
なお、基本的には『6.5 SQLの実行/INSERT、UPDATE系』と似ています。SQLの実行方法やエラー情報の取得方法は、そちらを参照してください。大きな違いは、トランザクション処理を行っていない(出来ない)点です。
■VBScriptでの記述例
Option Explicit
'@SQLエラーでプログラムが異常終了するのを回避するため
On Error Resume Next
Dim objADO
Dim strSQL
'ADOオブジェクトを作成します
Set objADO = CreateObject("ADODB.Connection")
'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
End If
'ADOをクローズします
objADO.Close
'オブジェクトの破棄
Set objADO = Nothing
'==============================================================
'= エラー時処理(例ではエラーの詳細を表示するだけ)
'==============================================================
Sub prcSqlError()
Dim objErrItem
Set objErrItem = objADO.Errors.Item(0)
WScript.echo "Description=" & objErrItem.Description
WScript.echo "HelpContext=" & objErrItem.HelpContext
WScript.echo "HelpFile=" & objErrItem.HelpFile
WScript.echo "NativeError=" & objErrItem.NativeError
WScript.echo "Number=" & objErrItem.Number
WScript.echo "Source=" & objErrItem.Source
WScript.echo "SQLState=" & objErrItem.SQLState
Set objErrItem = Nothing
End Sub
|
■JScript(JavaScript)での記述例
var strSQL
//ADOオブジェクトを作成します
var objADO = new ActiveXObject("ADODB.Connection");
//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')";
try {
//レコード追加のSQLを実行します
objADO.Execute(strSQL);
} catch(e) {
//SQLが異常終了したらエラー内容の表示をします
prcSqlError();
}
//ADOをクローズします
objADO.Close();
//オブジェクトの破棄
objADO = null;
//==============================================================
//= エラー時処理(例ではエラーの詳細を表示するだけ)
//==============================================================
function prcSqlError() {
var objErrItem = objADO.Errors.Item(0);
WScript.echo("Description=" + objErrItem.Description);
WScript.echo("HelpContext=" + objErrItem.HelpContext);
WScript.echo("HelpFile=" + objErrItem.HelpFile);
WScript.echo("NativeError=" + objErrItem.NativeError);
WScript.echo("Number=" + objErrItem.Number);
WScript.echo("Source=" + objErrItem.Source);
WScript.echo("SQLState=" + objErrItem.SQLState);
objErrItem = null;
}
|
|
|
|
|
|
|
|
|
|
|
ワークシートは、データの追加(INSERT)と更新(UPDATE)が可能です。例では、c:\happy\ADO_EXCEL.xlsというワークブックを開き、ワークシートへレコードの追加とレコードの更新を行っています。これも、かなりムリヤリで実用的じゃないですが、まぁ気にしないでくださいな(汗)
ワークシートの場合も追加時のキー重複エラーが発生することはありませんが、一応On Error Resume Nextを入れ、更新の後にエラー判定処理を行っています。
なお、基本的には『6.5 SQLの実行/INSERT、UPDATE系』と似ています。SQLの実行方法やエラー情報の取得方法は、そちらを参照してください。大きな違いは、トランザクション処理を行っていない(出来ない)点です。
■VBScriptでの記述例
Option Explicit
'@SQLエラーでプログラムが異常終了するのを回避するため
On Error Resume Next
Dim objADO
Dim strSQL
'ADOオブジェクトを作成します
Set objADO = CreateObject("ADODB.Connection")
'ADOを使いエクセルファイルを更新モードで開きます。
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
End If
'ADOをクローズします
objADO.Close
'オブジェクトの破棄
Set objADO = Nothing
'==============================================================
'= エラー時処理(例ではエラーの詳細を表示するだけ)
'==============================================================
Sub prcSqlError()
Dim objErrItem
Set objErrItem = objADO.Errors.Item(0)
WScript.echo "Description=" & objErrItem.Description
WScript.echo "HelpContext=" & objErrItem.HelpContext
WScript.echo "HelpFile=" & objErrItem.HelpFile
WScript.echo "NativeError=" & objErrItem.NativeError
WScript.echo "Number=" & objErrItem.Number
WScript.echo "Source=" & objErrItem.Source
WScript.echo "SQLState=" & objErrItem.SQLState
Set objErrItem = Nothing
End Sub
|
■VBScriptでの記述例
var strSQL
//ADOオブジェクトを作成します
var objADO = new ActiveXObject("ADODB.Connection");
//ADOを使いエクセルファイルを更新モードで開きます。
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件追加しています)
try {
objADO.Execute(strSQL);
} catch(e) {
//SQLが異常終了したらエラー内容の表示をします
prcSqlError();
}
//ADOをクローズします
objADO.Close();
//オブジェクトの破棄
objADO = null;
//==============================================================
//= エラー時処理(例ではエラーの詳細を表示するだけ)
//==============================================================
function prcSqlError() {
var objErrItem = objADO.Errors.Item(0);
WScript.echo("Description=" + objErrItem.Description);
WScript.echo("HelpContext=" + objErrItem.HelpContext);
WScript.echo("HelpFile=" + objErrItem.HelpFile);
WScript.echo("NativeError=" + objErrItem.NativeError);
WScript.echo("Number=" + objErrItem.Number);
WScript.echo("Source=" + objErrItem.Source);
WScript.echo("SQLState=" + objErrItem.SQLState);
objErrItem = null;
}
|
|
|
|
|
|