簡體   English   中英

從 VBA 到 SQL 服務器的數據傳輸不完整

[英]Incomplete Data Transfer from VBA to SQL Server

我在 Azure 中有一個 SQL-Server,我想使用 VBA 通過 VPN 隧道將數據從 Excel 傳輸到其中。 它可以工作,但在 801 個條目中,有時會傳輸 320 個,有時會傳輸 324 個,但始終在 300 到 350 之間的范圍內,再也不會。 它們以正確的順序傳輸,因為它們在 excel 文件中。 我根本沒有收到錯誤。 剛剛在 SQL 表中看到,其中並非所有條目。 我和我的同事也試過幾次,結果也一樣。 我的代碼是:

Sub Importer(ByVal tableName As String, ByVal importQuery As String, pass As String)

    Dim con As Object
    
    Set con = CreateObject("ADODB.Connection")
    
        con.Open _
                "Driver={ODBC Driver 17 for SQL Server};" & _
                "Server=tcp:myServer,1433;" & _
                "Database=myDB;" & _
                "Uid= admin;" & _
                "Pwd=" & pass & ";" & _
                "TrustServerCertificate=no;" & _
                "Connection Timeout=30;" & _
                "Encrypt=yes;"
        con.Execute importQuery
        con.Close
       
    Set con = Nothing
    
End Sub

雖然 importQuery 在一個查詢中包含 801 個 INSERT INTO 條目,如下所示:

INSERT INTO dbo.table(Variable1, Variable1, Variable1) Values(", 3)
INSERT INTO dbo.table(Variable1, Variable1, Variable1) Values(", 3)
INSERT INTO dbo.table(Variable1, Variable1, Variable1) Values(", 3)

...

我試圖設置超時但沒有效果。 任何人都知道可能導致問題的原因是什么?

您的偽代碼在語法上不正確,但我想這無關緊要。

當前,您正在以非事務方式執行多個 singleton INSERT語句。 肯定是您的連接斷開了,或者在代碼執行過程中發生了一些其他問題,導致僅插入了部分數據。

要么圍繞整個INSERT語句集包裝一個事務 或者更簡單的方法是將它們轉換為包含多個值的單個INSERT語句,這將是隱式事務性的並且可能更有效,如下所示:

INSERT INTO dbo.table(Column1, Column2, Column3)
VALUES
    (ValueA1, ValueA2, ValueA3),
    (ValueB1, ValueB2, ValueB3),
    (ValueC1, ValueC2, ValueC3),
    (ValueD1, ValueD2, ValueD3),
    (ValueE1, ValueE2, ValueE3);

至於您的應用程序遇到的任何錯誤/問題,不幸的是,如果沒有更多詳細信息(例如特定錯誤消息),這是不可取的。 但至少我上面提到的修復將確保所有數據或沒有數據被一致插入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM