SAK 図書館
VB テクニック編18 - CSV テキストファイルインポート
■SAK 関数利用規程
・テクニック編で紹介する関数は、私こと Y.SAK の開発関数である。
・著作権明示部分の改編は認めない。
・個人、企業がこれらの関数を使用したり、一部を使用して新たなシステムや
プログラムを開発することは自由です。
・但し、これらの関数を一部でも使用しているソフトウェアをシェアウェア、
その他有償プロダクトとして配布・販売するには、私の許可が必要です。
(無償のフリーソフトウェアなら、自由に配布しても良い。)
・これらの関数を使用して発生した、いかなる形での損害も私こと Y.SAK は
賠償しません。
■CSV テキストファイルインポート (ADO 版)
・外部データ取込として、CSV テキストファイルをデータベースに追加更新す
るには、次のようにする。
先頭行を見出しとして無視するか指定できる。
見出しがない場合は、mds = false にする。
尚、ダブルコーテション「"」を CSV 項目の引用句として処理しているので、
CSV 項目データに半角や全角の「"」があると、このサンプルは誤動作する。
GetCntCSV() 関数は、「VB テクニック編6 - CSV ファイル項目数取得」を
使用してください。
また、テーブルの項目に、char、varchar2、number、long 以外があると、
文字列と数値の判断がおかしくなるかもしれません。
見出しによって、テーブル項目を指定することはしていないので、
CSV の項目順は、更新テーブルの項目順と一致していなければなりません。
・一括トランザクションをかけているため、大量のレコードを更新しようとす
ると、ロールバックセグメントがオーバーするか、著しく更新速度が低下す
る可能性があります。1 万件を超える場合は要注意です。
Dim s3cn_ado As variant
Dim dsn As String
Dim tbl As String
Dim tky As String
Dim sql As String
Dim rs As variant
Dim fnm As String
Dim mds As boolean
Dim fno As Integer
Dim cmax As Integer
Dim i As Integer
Dim j As Integer
Dim rec As String
Dim s As String
Dim ct As long
dsn = "dsn=SAK3_ADO;uid=SAK;pwd=SAK"
tbl = "sak.受注m"
tky = "受注番号 = ''" '0 件のダミー問い合わせ用のキー"
fnm = "g:\tmp\test.csv"
mds = true
set s3cn_ado = CreateObject ("ADODB.Connection")
s3cn_ado.Open dsn
sql = "select * from " & tbl & " where " & tky
set rs = s3cn_ado.Execute(sql)
j = rs.fields.count - 1
redim ctyp(j) as boolean
For i = 0 to j
select case rs(i).type
case 131, 139
ctyp(i) = true
case else
ctyp(i) = false
end select
Next
rs.close
cmax = GetCntCSV(fnm)
if cmax = 0 then msgbox "CSV 形式エラー"
if cmax <> j + 1 then msgbox "項目数不一致"
fno = FreeFile
Open fnm For input As fno Len = 32000
if mds and eof(fno) = false then
line input #fno, s
end if
s3cn_ado.BeginTrans
on error resume next
Do Until eof(fno)
s = ""
for i = 0 to j
input #fno, rec
rec = trim(rec)
if ctyp(i) then
s = s & "," & rec
else
s = s & ",'" & rec & "'"
end if
next
s = mid(s, 2)
sql = "insert into " & tbl & " values (" & s & ")"
s3cn_ado.Execute sql
if err <> 0 then
s3cn_ado.RollbackTrans
close fno
s3cn_ado.Close
msgbox "更新エラー" & chr(10) & err & ": " & error _
& chr(10) & ct + 1 & " 件目に問題あり" _
& chr(10) & sql
end
end if
ct = ct + 1
Loop
s3cn_ado.CommitTrans
on error goto 0
Close fno
s3cn_ado.Close
■VB テクニック編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料