JoshuaBloom
IS-IT--Management
Im doing what can be considered a Mail Merge. Taking Field values from one table using a Replace Function and then inserting the results into another table using a
doCmd.RunSql ("Insert ..."
My throughput is about 2000 insertions a minute, does anyone think this can be speeded up, it seems very slow to me.
Thank you for your Help.
Josh
The code looks like this.
Public rst, rst2 As DAO.Recordset
Public fld2 As DAO.Field
Public Paragraph As String
Sub Insert()
Dim TblName As String
TblName = ContactTableName.Value
Set rst = CurrentDb.OpenRecordset("Select * from [" & TblName & "] Where [prefered_city] Is Not Null AND [city_alt1] Is Not Null AND [city_alt2] Is Not Null", dbOpenForwardOnly)
InsertDIExportTable 3, (TblName)
End Sub
Public Sub InsertDIExportTable(city_num As Integer, TblName As String)
Dim fld As DAO.Field
Dim email, FirstName, last_name, city_primary, st_primary, AltCity1, AltCity2, CID, Paragraph, EventParagraph As String
Do Until rst.EOF
For Each fld In rst.Fields
If fld.Name = "email" Then
email = fld.Value
ElseIf fld.Name = "first_name" Then
FirstName = fld.Value
ElseIf fld.Name = "last_name" Then
LastName = fld.Value
ElseIf fld.Name = "prefered_city" Then
city_primary = fld.Value
ElseIf fld.Name = "prefered_state" Then
st_primary = fld.Value
ElseIf fld.Name = "city_Alt1" Then
AltCity1 = fld.Value
ElseIf fld.Name = "city_Alt2" Then
AltCity2 = fld.Value
ElseIf fld.Name = "SecretID" Then
CID = fld.Value
End If
Next
Paragraph = ParaHandler(city_num, city_primary, AltCity1, AltCity2)
EventParagraph = SqlWrap(Paragraph)
email = SqlWrap(email)
FirstName = SqlWrap(FirstName)
LastName = SqlWrap(LastName)
city_primary = SqlWrap(city_primary)
st_primary = SqlWrap(st_primary)
CID = SqlWrap(CID)
sqlstatement = "INSERT INTO " & Me.ExportTable.Value & " (EmailAddress,FirstName,LastName,EventParagraph,city_primary,st_primary,CID)" _
& "VALUES (" & email & "," & FirstName & "," & LastName & "," & EventParagraph & "," & city_primary & "," & st_primary & "," & CID & "
"
DoCmd.RunSQL (sqlstatement)
rst.MoveNext
Loop
End Sub
Private Function ParaHandler(city_num As Integer, city_primary As Variant, city_alt1 As Variant, city_alt2 As Variant)
If city_num = 3 Then
Paragraph = Replace("Click below to register, get more info, or view the schedule of events in {city_primary}. Upcoming seminars are also scheduled for {city_alt1} and {city_alt2}:", "{city_primary}", city_primary, , , vbTextCompare)
Paragraph = Replace(Paragraph, "{city_alt1}", city_alt1, , , vbTextCompare)
Paragraph = Replace(Paragraph, "{city_alt2}", city_alt2, , , vbTextCompare)
ParaHandler = Paragraph
ElseIf city_num = 2 Then
Paragraph = Replace("Click below to register, get more info, or view the schedule of events in {city_primary}. Upcoming seminars are also scheduled for {city_alt1}:", "{city_primary}", city_primary, , , vbTextCompare)
Paragraph = Replace(Paragraph, "{city_alt1}", city_alt1, , , vbTextCompare)
ParaHandler = Paragraph
ElseIf city_num = 1 Then
Paragraph = Replace("Click below to register, get more info, or view the schedule of events in {city_primary}:", "{city_primary}", city_primary, , , vbTextCompare)
ParaHandler = Paragraph
End If
End Function
Private Function SqlWrap(Txt)
If IsNull(Txt) Then
SqlWrap = "'" & Txt & "'"
Else
Txt = Replace(Txt, "'", "''", , , vbTextCompare) 'Handling for ' in the String
SqlWrap = "'" & Txt & "'"
End If
End Function
doCmd.RunSql ("Insert ..."
My throughput is about 2000 insertions a minute, does anyone think this can be speeded up, it seems very slow to me.
Thank you for your Help.
Josh
The code looks like this.
Public rst, rst2 As DAO.Recordset
Public fld2 As DAO.Field
Public Paragraph As String
Sub Insert()
Dim TblName As String
TblName = ContactTableName.Value
Set rst = CurrentDb.OpenRecordset("Select * from [" & TblName & "] Where [prefered_city] Is Not Null AND [city_alt1] Is Not Null AND [city_alt2] Is Not Null", dbOpenForwardOnly)
InsertDIExportTable 3, (TblName)
End Sub
Public Sub InsertDIExportTable(city_num As Integer, TblName As String)
Dim fld As DAO.Field
Dim email, FirstName, last_name, city_primary, st_primary, AltCity1, AltCity2, CID, Paragraph, EventParagraph As String
Do Until rst.EOF
For Each fld In rst.Fields
If fld.Name = "email" Then
email = fld.Value
ElseIf fld.Name = "first_name" Then
FirstName = fld.Value
ElseIf fld.Name = "last_name" Then
LastName = fld.Value
ElseIf fld.Name = "prefered_city" Then
city_primary = fld.Value
ElseIf fld.Name = "prefered_state" Then
st_primary = fld.Value
ElseIf fld.Name = "city_Alt1" Then
AltCity1 = fld.Value
ElseIf fld.Name = "city_Alt2" Then
AltCity2 = fld.Value
ElseIf fld.Name = "SecretID" Then
CID = fld.Value
End If
Next
Paragraph = ParaHandler(city_num, city_primary, AltCity1, AltCity2)
EventParagraph = SqlWrap(Paragraph)
email = SqlWrap(email)
FirstName = SqlWrap(FirstName)
LastName = SqlWrap(LastName)
city_primary = SqlWrap(city_primary)
st_primary = SqlWrap(st_primary)
CID = SqlWrap(CID)
sqlstatement = "INSERT INTO " & Me.ExportTable.Value & " (EmailAddress,FirstName,LastName,EventParagraph,city_primary,st_primary,CID)" _
& "VALUES (" & email & "," & FirstName & "," & LastName & "," & EventParagraph & "," & city_primary & "," & st_primary & "," & CID & "
DoCmd.RunSQL (sqlstatement)
rst.MoveNext
Loop
End Sub
Private Function ParaHandler(city_num As Integer, city_primary As Variant, city_alt1 As Variant, city_alt2 As Variant)
If city_num = 3 Then
Paragraph = Replace("Click below to register, get more info, or view the schedule of events in {city_primary}. Upcoming seminars are also scheduled for {city_alt1} and {city_alt2}:", "{city_primary}", city_primary, , , vbTextCompare)
Paragraph = Replace(Paragraph, "{city_alt1}", city_alt1, , , vbTextCompare)
Paragraph = Replace(Paragraph, "{city_alt2}", city_alt2, , , vbTextCompare)
ParaHandler = Paragraph
ElseIf city_num = 2 Then
Paragraph = Replace("Click below to register, get more info, or view the schedule of events in {city_primary}. Upcoming seminars are also scheduled for {city_alt1}:", "{city_primary}", city_primary, , , vbTextCompare)
Paragraph = Replace(Paragraph, "{city_alt1}", city_alt1, , , vbTextCompare)
ParaHandler = Paragraph
ElseIf city_num = 1 Then
Paragraph = Replace("Click below to register, get more info, or view the schedule of events in {city_primary}:", "{city_primary}", city_primary, , , vbTextCompare)
ParaHandler = Paragraph
End If
End Function
Private Function SqlWrap(Txt)
If IsNull(Txt) Then
SqlWrap = "'" & Txt & "'"
Else
Txt = Replace(Txt, "'", "''", , , vbTextCompare) 'Handling for ' in the String
SqlWrap = "'" & Txt & "'"
End If
End Function