2016-07-14 7 views
0

監査シートの形式(ユーザーがデータを入力する)のExcelアプリケーションを構築しています。 Data_uploadという別のシートがあり、監査ワークシートに記入されている情報が保存されています。大規模なデータをSQLデータベースに格納する

100文字を超えると、データがData_upload からアップロードされない状況が発生しました。

データの長さにかかわらずデータを保存するためにどのような変更を行うことができますか?あなたが話しているかの長さについて

'Opens the SQL server 

dbs.Open "Data Source =; Initial Catalog = ;Trusted_connection = Yes; Provider = ;; Integrated Security=SSPI;" 

dbs.Execute "INSERT INTO Acdbo. CHECKLIST([FileTime], [FileName], [AccName], [EffDate], [PolicyType], [Premium], [Underwriter], [Auditor],[UT_Score],[Underwriter_Score]) " _ 
      & "VALUES ('" & FileTime & "','" & FileName & "','" & AccName & "','" & EffDate & "','" & policy_type & "','" & premium_amt & "','" & UW_Name & "','" & Aud & "','" & ut * 100 & "','" & uw_score * 100 & "')" 

Set rcd = dbs.Execute(_ 
     "SELECT Acdbo.AUDIT_CHECKLIST.FileID " _ 
     & "FROM Acdbo.AUDIT_CHECKLIST " _ 
     & " WHERE Acdbo.AUDIT_CHECKLIST.FileTime = " & Chr(39) & FileTime & Chr(39) _ 
     & " AND Acdbo.AUDIT_CHECKLIST. FileName = " & Chr(39) & FileName & Chr(39)) 


If rcd.EOF Then 
    MsgBox "Error", vbCritical 
End 
End If 

rcd.MoveFirst 
FileID = rcd!FileID 
rcd.Close 


Dim iRowNo As Integer 
Dim sLabel As String 
Dim sData As String 
Dim sAdditionalComments As String 
'Dim sLink As String 

    With Sheets("Data_upload") 

    'Skip the header row 
    iRowNo = 2 

    'Loop until empty cell in CustomerId 
    Do Until .Cells(iRowNo, 2) = "" 

     sLabel = .Cells(iRowNo, 2) 
     sData = .Cells(iRowNo, 4) 
     sAdditionalComments = .Cells(iRowNo, 5) 
     'sLink = .Cells(iRowNo, 6) 

     'Generate and execute sql statement to import the excel rows to SQL Server table 
     dbs.Execute "Insert into Acdbo. CHECKLIST_DATA([FileID], [Label], [Data], [AdditinalComments]) values ('" & FileID & "', '" & sLabel & "', '" & sData & "','" & sAdditionalComments & "')" 
     On Error Resume Next 

     iRowNo = iRowNo + 1 
    Loop 
End With 


    endTime = Timer 
    dbs.Execute "UPDATE Acdbo. CHECKLIST SET [UploadTime] = " & endTime - startTime & " WHERE FileID = " & FileID  'Upload the time it takes to upload Checklist 
    dbs.Close 

Dim Response As VbMsgBoxResult 

Response = MsgBox("File Uploaded", vbOKOnly, "Database Upload") 
End 

'The following block of code provide procedures once an error occurs 
Error_Handler: 

'Upon error, hide RDT's "DatabaseExtract" tab and lock down Audit checklist's structure 
'ActiveWorkbook.Sheets("DatabaseExtract").Visible = False 
'ActiveWorkbook.Protect Structure:=True, Windows:=False, password:=pwd_WorkBook 

'Then display with the error message and exit the macro 
MsgBox "Error " & Err.Number & ": " & Err.Description & " in " & Application.VBE.ActiveCodePane.CodeModule, vbOKOnly, "Error" 

Application.ScreenUpdating = False 

End Sub 
+0

これの一部が切り捨てられ、 'Error_Handler'の統合方法が明確ではないため、完全なExcelサブルーチンVBAブロックを提供できますか?そして、宣言されていない 'End'行を整理してください。 – Parfait

+0

また、2つのクエリで多くの文字列が使用されているため、どのフィールドにデータが入力されていませんか?エラーが表示されますか?編集した投稿にそのような情報を含めてください。 – Parfait

答えて

0

? 255文字が必要な場合は、Accessのフィールドのテキストタイプを使用できます。それ以外の場合は、メモを使用する必要があります。制限はVBAコードではなく、データベースにあります。これをチェックしてくださいfor data limits of data types in Accessと追加情報how to change the type of fieldはここにあります。

SQLサーバーを使用している場合も同様です。長いテキストを格納しようとしている列のデータ型をチェックしなければなりません。非常に長いテキストの場合は、VARCHAR(MAX)タイプを変更してください。

+0

現在、私はこれをデータベースのカラムに使用しています。 DataおよびAdditinalComments列に大きなテキストデータ[Data] [nvarchar](max)NULL、[AdditinalComments] [nvarchar](max)NULL、 – Swathi

0

実際には2つの問題が発生する可能性があります。

1)Ondrej Holmanが指摘したように、SQLテーブルの受信データ型が問題である可能性があり、そのことを確認する必要があります。しかし可能な限りNVARCHAR over VARCHARを使用すると、より順方向に互換性があります。

2)2番目の問題は、コードを使用してどのようにコード化するかに応じてコード内にある可能性があります。これは、Stringを構築する際に、Stringが最大バッファ容量を持つことがあるためですあなたが持っているデータベースフィールドを超えています。たとえば、VBAでは、文字列の最大バッファ容量は@ 255文字です。これは、コメントフィールドの長さが拡張され、残りのInsert変数に対して使用可能なスペースが増え、Insertコマンド自体が縮小することを意味します。これが当てはまる場合は、最初に他のデータをすべて挿入し、後でそのコメントだけをレコードに更新します。コメントの長さが問題を引き起こさないと仮定します。 1文字のコメントを想定してコメントを更新し、スペースが残り、+1があなたのコメントの最大長であることを確認します。

関連する問題