|
▼satsuki さん:
こんにちは
私ならこんな感じと言うのを格好と流れだけ書いてみました。
でも、大体こんな感じ。
Private Enum TargetTableName
店別来店数
店別製品別売上数
店別個人別売上数
End Enum
Private Type RecordData
日付 As Date
店名 As String
人数 As Long
製品名 As String
担当名 As String
台数 As Long
End Type
Private Sub InsertMain()
Dim Cn As ADODB.Connection
Dim cnString As String
Dim typData() As RecordData
Dim fNum As Long
Dim Ret As Boolean
Const csvpath As String = "E:\Data\Office\Access\TestData.csv"
On Error GoTo ErrTrap
Set Cn = New ADODB.Connection
cnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\hogehogeDirctory\Test.mdb;" '後必要な引数加える
Cn.ConnectionString = cnString
Cn.Open
'/////////私なら多分読み取り部分も別Functionにすると思う///////////
fNum = FreeFile()
'データが数MBなら全部読み込んでおく
' ファイルオープン
' 全データ取得
' ファイルクローズ
'ここで必要なデータだけを取得してtypDataに入れる
'//////////////////////////////////////////////////////////////////
Ret = InSertData(店別来店数, typData, Cn)
'データの数だけ繰り返す
Cn.Close
Set Cn = Nothing
Exit Sub
ErrTrap:
'必要なエラー処理
End Sub
Private Function InSertData(ptbl As TargetTableName, pRec() As RecordData, pCn As ADODB.Connection) As Boolean
Dim sSQL As String
Dim Cmd As ADODB.Command
'引数チェック
'手抜き
'例えばSQLを投げる
sSQL = "INSERT INTO "
'SQL生成
Select Case ptbl
Case TargetTableName.店別来店数
'個別のSQL生成
sSQL = sSQL & TargetTableName & "(日付,店名,人数)" & _
" VALUES(#" & pRec.日付 & "#,'" & pRec.店名 & "'," & pRec.人数 & ")"
Case TargetTableName.店別個人別売上数
Case TargetTableName.店別製品別売上数
End Select
' Commandオブジェクト生成
'command実行
' '例えばパラメータクエリをキックする
' '私は大概こちらの方法をとります。
' Select Case ptbl
' Case TargetTableName.店別来店数
' 'パラメータ生成、パラメータにデータ入力
' Case TargetTableName.店別個人別売上数
' Case TargetTableName.店別製品別売上数
' End Select
' 'command実行
'commandオブジェクトの後始末
End Function
後、VBでInteger型を使うメリットはありません。最近のパソコンは
32bitか64bitですから最低でもそのメモリは消費しますから。ですから、
VBではintegerよりlongの方が無駄な変換がないだけ効率的らしいです。
|
|