Option Compare Database Public Function fnBulkInsert(sFilename As String, _ Optional sFieldTerminator As String, _ Optional sRowTerminator As String) As Boolean ' Currently supports FIELDTERMINATOR='+|' and ROWTERMINATOR='&|\n' ' + dec 43 | dec 124 & dec 38 On Error GoTo fnBulkInsert_Error_Routine fnBulkInsert = True Dim sErrFilename As String sErrFilename = "c:\logs\err" & Format(Now(), "yyyymmddHHMMSS") & ".txt" Dim i As Long Dim s As String Dim sInputChar As String Dim sInputChar2 As String Dim sInputChar3 As String Dim sSQL01 As String Dim sSQL02 As String Dim f As Integer Dim sPlus As String Dim sBar As String Dim sAmp As String If sFieldTerminator = "\t" Then Call fnBulkInsertTab(sFilename) GoTo End_Function End If If sFieldTerminator <> "+|" Then Open sErrFilename For Output As #9 Print #9, "Unsupported FIELDTERMINATOR **" & sFieldTerminator & "**" Print #9, Now() Print #9, CurrentDb.Name Print #9, "**END**" Close #9 fnBulkInsert = False GoTo End_Function End If If fnTableExists("tblBulkInsert") Then DoCmd.RunSQL "DROP TABLE tblBulkInsert" DoCmd.RunSQL "CREATE TABLE tblBulkInsert (" & _ "f1 varchar,f2 varchar,f3 varchar,f4 varchar,f5 varchar," & _ "f6 varchar," & _ "f7 varchar," & _ "f8 varchar," & _ "f9 varchar," & _ "f10 varchar," & _ "f11 varchar," & _ "f12 varchar," & _ "f13 varchar," & _ "f14 varchar," & _ "f15 varchar," & _ "f16 varchar," & _ "f17 varchar," & _ "f18 varchar," & _ "f19 varchar," & _ "f20 varchar," & _ "f21 varchar," & _ "f22 varchar," & _ "f23 varchar," & _ "f24 varchar," & _ "f25 varchar," & _ "f26 varchar" & _ ");" i = 1 f = 1 s = "" sInputChar = "" sInputChar2 = "" sInputChar3 = "" sSQL01 = "" sSQL02 = "" sPlus = "+" sBar = "|" sAmp = "&" Open sFilename For Input As #10 sInputChar = Input(1, #10) sInputChar2 = Input(1, #10) sInputChar3 = Input(1, #10) Do Until EOF(10) If Asc(sInputChar) < 127 Then If sInputChar = "'" Then GoTo Next_Char End If If sInputChar = sPlus And sInputChar2 = sBar Then If f = 1 Then sSQL01 = "INSERT INTO tblBulkInsert (f1" sSQL02 = "VALUES ('" & s & "'" End If If f > 1 Then sSQL01 = sSQL01 & ",f" & f sSQL02 = sSQL02 & ",'" & s & "'" End If s = "" f = f + 1 sInputChar = sInputChar2 sInputChar2 = sInputChar3 sInputChar3 = Input(1, #10) GoTo Next_Char End If If sInputChar = sAmp And sInputChar2 = sBar And sInputChar3 = vbCr Then ' MsgBox (s) ' MsgBox ("CR") ' Debug.Print "CR" sSQL01 = sSQL01 & ",f" & f & ") " sSQL02 = sSQL02 & ",'" & s & "');" sSQL01 = sSQL01 & sSQL02 ' MsgBox sSQL01 DoCmd.RunSQL sSQL01 s = "" sSQL01 = "" sSQL02 = "" f = 1 sInputChar = sInputChar2 sInputChar2 = sInputChar3 sInputChar3 = Input(1, #10) sInputChar = sInputChar2 sInputChar2 = sInputChar3 sInputChar3 = Input(1, #10) ' Gives "Input past end-of-file" GoTo Next_Char End If If sInputChar = vbLf Then ' MsgBox ("LF") ' Debug.Print "LF" s = "" GoTo Next_Char End If s = s & sInputChar End If Next_Char: i = i + 1 sInputChar = sInputChar2 sInputChar2 = sInputChar3 sInputChar3 = Input(1, #10) ' If i = 400 Then Exit Do Loop fnBulkInsert_Exit_Routine: ' MsgBox "Exit Routine" Close #10 Exit Function fnBulkInsert_Error_Routine: If Err.Number = 62 Then ' Input past end of file Resume fnBulkInsert_Exit_Routine End If Open sErrFilename For Output As #9 Print #9, "Industrial Computer Contracts (West Midlands) - Error Log - 15th May 2014" Print #9, Now() Print #9, Err.Number Print #9, Err.Description Print #9, CurrentDb.Name Print #9, "fnBulkInsert" Print #9, sSQL01 Print #9, sSQL02 Print #9, "**END**" Close #9 Resume fnBulkInsert_Exit_Routine End_Function: End Function |