Option Explicit
Public cn As New ADODB.Connection
Public cmd As New ADODB.Command
Public rs As New ADODB.Recordset
Private Sub removeMileDupes()
Dim strSQL As String
'
Dim ConStr As String
Dim oCmd As ADODB.Command ' Use a local object. You may use global, but make sure you know what it does :)
' Add error handler
On Error GoTo ErrorHandler
' I had to set and open connection object in here. You may do it before calling this sub
ConStr = "PROVIDER=SQLOLEDB;Data Source=JASMIN\SQLEXPRESS; INITIAL CATALOG=EditorTest; User ID=XXXXXX; Password=XXXXXX;"
Set oConn = New ADODB.Connection
oConn.Open ConStr
Set oCmd = New ADODB.Command
Set oCmd.ActiveConnection = oConn ' Set a connection for the command
' I think you might have missed this OR the connection's state wasn't Open
' I commented this out. If this opens the connection, you may have to move Set oCmd.ActiveConnection = oConn after this block
If cn.State = 0 Then
'fileset says which set of files are being loaded at the moment
Call doDBaction("openDB", fileSet)
End If
'clean_dupes tables have ignore duplicates flag on
'vb catches the error and stops
'so resume next.
' No need to Resume Next in here
'On Error Resume Next
strSQL = "TRUNCATE TABLE CLEAN_MILE_DUPES"
oCmd.CommandText = strSQL
oCmd.CommandType = adCmdText
Set rs = oCmd.Execute
' strSQL = "INSERT CLEAN_MILE_DUPES (" & vbCrLf _
' & " CASE_IDENTIFIER" & vbCrLf _
' & " ,DOCUMENT_TYPE" & vbCrLf _
' & " ,DOCUMENT_NUMBER" & vbCrLf _
' & " ,MILESTONE" & vbCrLf _
' & " ,MILESTONE_DATE_TYPE" & vbCrLf _
' & " ,MILESTONE_DATE)" & vbCrLf _
' & "SELECT CASE_IDENTIFIER" & vbCrLf _
' & " ,DOCUMENT_TYPE" & vbCrLf _
' & " ,DOCUMENT_NUMBER" & vbCrLf _
' & " ,MILESTONE" & vbCrLf _
' & " ,MILESTONE_DATE_TYPE" & vbCrLf _
' & " ,MILESTONE_DATE " & vbCrLf _
' & " FROM CASE_MILESTONE_TEMP"
' My "simplified" table
strSQL = "INSERT CLEAN_MILE_DUPES (" & vbCrLf _
& " CASE_IDENTIFIER" & vbCrLf _
& " ,MILESTONE_DATE" & vbCrLf _
& " ,TEXT_FIELD) " & vbCrLf _
& "(SELECT CASE_IDENTIFIER" & vbCrLf _
& " ,MILESTONE_DATE" & vbCrLf _
& " ,TEXT_FIELD " & vbCrLf _
& " FROM CASE_MILESTONE_TEMP)"
oCmd.CommandText = strSQL
oCmd.CommandType = adCmdText
' Now, here is the only place where Resume Next is needed
On Error Resume Next
Set rs = oCmd.Execute
On Error GoTo ErrorHandler
'THIS ^^^ IS THE COMMAND THAT IS FAILING. IT HANGS FOR 5 OR
'MORE SECONDS. DOING COUNT(*) ON THAT TABLE GIVES 0
'RECORDS. THEREFORE THE FOLLOWING CODE JUST REMOVES
'EVERYTHING FROM THE TEMP TABLE.
strSQL = "TRUNCATE TABLE CASE_MILESTONE_TEMP"
oCmd.CommandText = strSQL
oCmd.CommandType = adCmdText
Set rs = oCmd.Execute
' My "simplified" table again. I dropped your strSQL somewhere...
strSQL = "INSERT CASE_MILESTONE_TEMP (" & vbCrLf _
& " CASE_IDENTIFIER" & vbCrLf _
& " ,MILESTONE_DATE" & vbCrLf _
& " ,TEXT_FIELD) " & vbCrLf _
& " SELECT CASE_IDENTIFIER" & vbCrLf _
& " ,MILESTONE_DATE" & vbCrLf _
& " ,TEXT_FIELD " & vbCrLf _
& " FROM CLEAN_MILE_DUPES"
oCmd.CommandText = strSQL
oCmd.CommandType = adCmdText
Set rs = oCmd.Execute
strSQL = "TRUNCATE TABLE CLEAN_MILE_DUPES"
oCmd.CommandText = strSQL
oCmd.CommandType = adCmdText
Set rs = oCmd.Execute
Sub_Exit:
oConn.Close
Exit Sub
ErrorHandler:
' Handle errors here (this is just to trap errors)
Resume Sub_Exit
End Sub