VBS : SQLExpress(SQLServer) 2005 接続と通常処理

  Microsoft OLE DB Provider



関連するMicrosoft ドキュメント
付録 A: プロバイダ
Microsoft OLE DB Provider for SQL Server
SQL Native Client での接続文字列キーワードの使用
Connection オブジェクトのプロパティ、メソッド、およびイベント
Recordset オブジェクトのプロパティ、メソッド、およびイベント
Field オブジェクトのプロパティ、メソッド、およびイベント


※ SQLOLEDB は、ODBC では無い、Microsoft の純正接続です

ADO では、接続文字列( プロバイダによって変わります ) が違うだけで、
接続してしまえば利用するメソッドに基本的に同じです。
但し、ドライバや更新方法によって、多少のプロパティをチューニングする必要はあります

更新や機能で重要になるのが、接続オブジェクトの CursorLocation で、これは 3( クライアント )
に設定するほうが多くの有用な機能が利用できます
( CursorLocationEnum )

また、オブジェクトを利用して更新する場合は レコードセットオブジェクトの LockType を 3 にする
事(レコードロックが最も推奨される状態) が必要です。デフォルトでは読み込みしかできません。
( LockTypeEnum )

しかし、接続オブジェクト の Execute メソッドで SQL を実行するのであれば、その限りではありません


接続環境の構築や別名に関しては、SQLExpress 2005 の接続設定 を参照して下さい。

Visual Studio とは関係無く単独でインストールする場合は、
SQLExpress 2005 のインストールから最速設定 を参照して下さい







  純正接続のソースコード ( for SQL Server )



  
' ***********************************************************
' SQLExpress 2005 / OLE DB / 純正接続
' ADO : 読み込みのみ
' FileSystemObject : CSV出力
' ***********************************************************
strTarget = "NIGHT_TCP"		' 別名
strDB = "lightbox"
strUser = "sa"
strPass = "passwordpassword"

' ***********************************************************
' ADO + FileSystemObject
' ***********************************************************
Set Cn = CreateObject( "ADODB.Connection" )
Set Rs = CreateObject( "ADODB.Recordset" )
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' **********************************************************
' 接続文字列
' **********************************************************
ConnectionString = _
	"Provider=SQLOLEDB;" & _
	"Data Source=" & strTarget & ";" & _
	"Initial Catalog=" & strDB & ";" & _
	"User ID=" & strUser & ";" & _
	"Password=" & strPass & ";"

' **********************************************************
' 接続
' クライアントカーソル(3)を使う事が推奨されます
' **********************************************************
Cn.CursorLocation = 3
on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	WScript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

Query = "select * from [社員マスタ]"

' **********************************************************
' レコードセット
' オブジェクト更新時はレコード単位の共有的ロック(3)を
' 使用します( デフォルトでは更新できません )
' **********************************************************
'Rs.LockType = 3
on error resume next
Rs.Open Query, Cn
if Err.Number <> 0 then
	Cn.Close
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' 出力ファイルオープン
' **********************************************************
Set Csv = Fso.CreateTextFile( "社員マスタ.csv", True )

' **********************************************************
' タイトル出力
' **********************************************************
Buffer = ""
For i = 0 to Rs.Fields.Count - 1
	if Buffer <> "" then
		Buffer = Buffer & ","
	end if
	Buffer = Buffer & Rs.Fields(i).Name
Next
Csv.WriteLine Buffer

' **********************************************************
' データ出力
' **********************************************************
Do While not Rs.EOF
	Buffer = ""
	For i = 0 to Rs.Fields.Count - 1
		if Buffer <> "" then
			Buffer = Buffer & ","
		end if
		Buffer = Buffer & Rs.Fields(i).Value
	Next
	Csv.WriteLine Buffer
	Rs.MoveNext
Loop

' **********************************************************
' ファイルクローズ
' **********************************************************
Csv.Close
' **********************************************************
' レコードセットクローズ
' **********************************************************
Rs.Close
' **********************************************************
' 接続解除
' **********************************************************
Cn.Close
  



  ODBC( ドライバ名 : SQL Server ) 接続のソースコード

  
' ***********************************************************
' SQLExpress 2005 / ODBC / {SQL Server}
' ADO : 文字列更新
' FileSystemObject : CSV出力
' ***********************************************************
strDriver = "{SQL Server}"
strTarget = "NIGHT_TCP"		' 別名
strDB = "lightbox"
strUser = "sa"
strPass = "passwordpassword"

' ***********************************************************
' ADO + FileSystemObject
' ***********************************************************
Set Cn = CreateObject( "ADODB.Connection" )
Set Rs = CreateObject( "ADODB.Recordset" )
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' **********************************************************
' 接続文字列
' **********************************************************
ConnectionString = _
	"Provider=MSDASQL;" & _
	"Driver=" & strDriver & ";" & _
	"SERVER=" & strTarget & ";" & _
	"DATABASE=" & strDB & ";" & _
	"UID=" & strUser & ";" & _
	"PWD=" & strPass & ";"

' **********************************************************
' 接続
' クライアントカーソル(3)を使う事が推奨されます
' **********************************************************
Cn.CursorLocation = 3
on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	WScript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

Query = "select * from [社員マスタ]"

' **********************************************************
' レコードセット
' オブジェクト更新時はレコード単位の共有的ロック(3)を
' 使用します( デフォルトでは更新できません )
' ※ デフォルトでも SQLによる更新は可能です
' **********************************************************
'Rs.LockType = 3
on error resume next
Rs.Open Query, Cn
if Err.Number <> 0 then
	Cn.Close
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' 出力ファイルオープン
' **********************************************************
Set Csv = Fso.CreateTextFile( "社員マスタ.csv", True )

' **********************************************************
' タイトル出力
' **********************************************************
Buffer = ""
' 社員コードと氏名のみ
For i = 0 to 1
	if Buffer <> "" then
		Buffer = Buffer & ","
	end if
	Buffer = Buffer & Rs.Fields(i).Name
Next
Csv.WriteLine Buffer

' **********************************************************
' データ出力
' **********************************************************
UpdateCnt = 0
Do While not Rs.EOF
	Buffer = ""
	Buffer = Buffer & Rs.Fields("社員コード").Value
	Buffer = Buffer & "," & Rs.Fields("氏名").Value

	' 更新
	strDay = (UpdateCnt mod 10) + 1
	Query = "update [社員マスタ] set [生年月日] = '2005/01/0" & strDay & "'"
	Query = Query & " where 社員コード = '" 
	Query = Query & Rs.Fields("社員コード").Value
	Query = Query & "'"
	Cn.Execute( Query )

	Csv.WriteLine Buffer
	Rs.MoveNext
	UpdateCnt = UpdateCnt + 1
Loop

' **********************************************************
' ファイルクローズ
' **********************************************************
Csv.Close
' **********************************************************
' レコードセットクローズ
' **********************************************************
Rs.Close
' **********************************************************
' 接続解除
' **********************************************************
Cn.Close
  



  ODBC( ドライバ名 : SQL Native Client ) 接続のソースコード

  
' ***********************************************************
' SQLExpress 2005 / ODBC / {SQL Native Client}
' ADO : オブジェクト更新
' Cn.CursorLocation = 3
' Rs.LockType = 3
' ***********************************************************
strDriver = "{SQL Native Client}"
strTarget = "NIGHT_TCP"		' 別名
strDB = "lightbox"
strUser = "sa"
strPass = "passwordpassword"

' ***********************************************************
' ADO + FileSystemObject
' ***********************************************************
Set Cn = CreateObject( "ADODB.Connection" )
Set Rs = CreateObject( "ADODB.Recordset" )

' **********************************************************
' 接続文字列
' **********************************************************
ConnectionString = _
	"Provider=MSDASQL;" & _
	"Driver=" & strDriver & ";" & _
	"SERVER=" & strTarget & ";" & _
	"DATABASE=" & strDB & ";" & _
	"UID=" & strUser & ";" & _
	"PWD=" & strPass & ";"

' **********************************************************
' 接続
' クライアントカーソル(3)を使う事が推奨されます
' この処理では必須です
' **********************************************************
Cn.CursorLocation = 3
on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	WScript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

Query = "select * from [社員マスタ]"

' **********************************************************
' レコードセット
' ODBC 接続のオブジェクト更新では、
' レコード単位の共有的ロック(3)を使用しています
' デフォルトでは更新できません
' ※ デフォルトでも SQLによる更新は可能です
' **********************************************************
Rs.LockType = 3
on error resume next
Rs.Open Query, Cn
if Err.Number <> 0 then
	Cn.Close
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' 更新
' **********************************************************
dt = CDate("2005/01/01")
Do While not Rs.EOF
	' 更新
	Rs.Fields("生年月日").Value = dt
	Rs.Update

	dt = dt + 1
	Rs.MoveNext
Loop

' **********************************************************
' レコードセットクローズ
' **********************************************************
Rs.Close
' **********************************************************
' 接続解除
' **********************************************************
Cn.Close
  

オブジェクトを使った更新ですが、クセがあるので SQL を作成したほうが無難です。
しかし、利用方法を良く知っておれば、同一構造のデータのコピー等は容易にできます。

新規時は、AddNew メソッドを使用します

  
' ************************************************
' 更新処理
' ************************************************
function UpdateData()

	Query = "select * from 更新テーブル"

	Rs.LockType = 3
	Rs.Open Query, Cn

	if Rs.EOF then
		Rs.AddNew
		Rs.Fields( "コード" ).Value = "0001"
	end if

	Rs.Fields( "名称" ).Value = "名称"
	Rs.Fields( "数値" ).Value = 100
	Rs.Fields( "日付" ).Value = Empty

	Rs.Update

end function
  











  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ