1

私はVBAを初めて使用し、特定のフォルダーにある4つの.csvファイルをSQLデータベースにインポートする手順を自動化しようとしています。4つのコマンドボタンがあるコードがあり、それぞれ4つでファイルを選択し、SQLにインポートしています。ただし、特定のフォルダーからすべての.csvファイルを選択してSQLにインポートするコマンドボタンを1つだけ持つ方法があるかどうかを知りたいと思いました。次のパスのフォルダ名がDatabaseであると想定します:Y:\ Data \ Database

ローカルパスをSQLサーバーパスに変換する次のインポートボタンコードと、データをSQLサーバーにインポートする他のすべての種類の関数があります。(fName1 ... fName4は、ユーザーが現在選択している4つのファイルパスのTextBox値です)

Private Sub ImportButton_Click()
Dim fName1 As String
Dim fName2 As String
Dim fName3 As String
Dim fName4 As String
Dim perc As Single

Dim index As Integer
Dim subStr As String
Dim sqlStr As String
sqlStr = "E:\Analytics\"

'Convert the local path to SQL server path
fName1 = TextBox1.Value
index = InStr(1, fName1, "\")
subStr = Left(fName1, index)
fName1 = Replace(fName1, subStr, sqlStr, , 1)

fName2 = TextBox2.Value
index = InStr(1, fName2, "\")
subStr = Left(fName2, index)
fName2 = Replace(fName2, subStr, sqlStr, , 1)

fName3 = TextBox3.Value
index = InStr(1, fName3, "\")
subStr = Left(fName3, index)
fName3 = Replace(fName3, subStr, sqlStr, , 1)

fName4 = TextBox4.Value
index = InStr(1, fName4, "\")
subStr = Left(fName4, index)
fName4 = Replace(fName4, subStr, sqlStr, , 1)

'Modify the text captions for test purpose
TextBox1.Value = fName1
TextBox2.Value = fName2
TextBox3.Value = fName3
TextBox4.Value = fName4

Dim cnPubs As ADODB.Connection
Dim cmd As ADODB.Command

' Create a connection object.
Set cnPubs = New ADODB.Connection

' Provide the connection string.
Dim strConn As String

'Use the SQL Server OLE DB Provider.
strConn = "PROVIDER=SQLOLEDB;"

'Connect to the Pubs database on server hcdcd-actstat01 .
strConn = strConn & "DATA SOURCE=hcdcd-actstat01;INITIAL CATALOG=Analytics;"

'Use an integrated login.
strConn = strConn & " INTEGRATED SECURITY=sspi;"

'Now open the connection.
cnPubs.Open strConn


Set cmd = New ADODB.Command
cmd.ActiveConnection = cnPubs
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "dbo.Proc_CapitalAllocation_Step1"
cmd.CommandTimeout = 1200 'Seconds

''cmd.Parameters.Append cmd.CreateParameter_(fName1, fName2, fName3, fName4)
Call cmd.Execute(Parameters:=Array(fName1, fName2, fName3, fName4), Options:=adCmdStoredProc)

End Sub

どんな助けでもいただければ幸いです。どうもありがとう。

4

2 に答える 2

3

これは、フォルダ内の.csvファイルをループするのに役立ちます。

Option Explicit

Sub LoopThroughFiles()

    Dim strFile As String, strPath As String

    strPath = "E:\Analytics\"
    strFile = Dir(strPath & "*.csv")

    While strFile <> ""

        '-> code upload the file to SQL Database

        strFile = Dir

    Wend


End Sub

.csvフォルダ内の特定のファイルのみが必要な場合など、さらに詳細化が必要な場合は、後While strFile <> ""にステートメントを追加して、不要なファイルを削除します。何かのようなもの:

If InStr(1, strFile, "myName") > 0 Then
   '-> code to upload the file to SQL database
End If
于 2012-08-29T17:12:22.230 に答える
0

私は

SearchFile = Dir(SearchFolder & "*.csv")

最初にコードを介して.csvファイルのみを正常に選択するための行ですが、フォルダー内のすべてのファイルをループするときに

SearchFile = Dir

各ループで他のファイルの種類が選択されますが、そのコード行で強制的に .csv のみを選択する方法は見つかりませんでした。だから私の修正は、それをチェックするために直後にIFステートメントを追加することでした

     SearchFile = Dir         
CheckFile:
     If Right(SearchFile, 3) <> "csv" Then
         SearchFile = Dir
         GoTo CheckFile
     End If

このように、フォルダーに他のファイルの種類がある場合は、それらをスキップします。サブの他のコードのためにその形式を使用しますが、次のように書き直すことができます

CheckFile:
     SearchFile = Dir
     If Right(SearchFile, 3) <> "csv" Then
         GoTo CheckFile
     End If
于 2014-05-28T12:44:41.553 に答える