The code below keeps increasing the size of the database until max size (1 G) is reached, at which time it errors out. Can anyone point out to me which area(s) are causing this? The "Check_" table, after running 2090 records (the highest count I've gotten to) only has 14 records at that point.
Option Compare Database
Option Explicit
'Cleans and validates data immediately prior to output.
Public Function clean_and_validate()
Dim rcd As Recordset, rcd1 As Recordset, rcd2 As Recordset, rcd3 As Recordset
Dim flag As Integer, total1 As Integer, ind0 As Integer, seq As Integer, tleng As Integer, counter As Integer
Dim x As Integer, y As Integer, ind As Integer, ind1 As Integer, total As Integer, nflag As Integer
Dim fldname As String, flddata As String, simin As String, lineout As String, term1 As String, fterm As String
Dim noun As String, modf As String, term As String, tablename As String, test As String, term2 As String
Dim sstr As String
Dim optionset1, optionset2, optionset3
Dim qry As QueryDef, qry1 As QueryDef
Dim fld1 As field, fld2 As field, fld3 As field, fld4 As field
Dim idx As Index
Dim vtable As TableDef
tablename = InputBox("Enter table name to process: ", "Table:", "Working"
optionset1 = Application.GetOption("Confirm Document Deletions"
optionset2 = Application.GetOption("Confirm Action Queries"
optionset3 = Application.GetOption("Confirm Record Changes"
Application.SetOption "Confirm Document Deletions", 0
Application.SetOption "Confirm Action Queries", 0
Application.SetOption "Confirm Record Changes", 0
'Creates error table.
Set vtable = CurrentDb.CreateTableDef("Check_" & tablename)
With vtable
Set fld1 = vtable.CreateField("SIM", dbText, 20)
Set fld2 = vtable.CreateField("Field Name", dbText)
Set fld3 = vtable.CreateField("Invalid Data", dbMemo)
Set fld4 = vtable.CreateField("Error Condition", dbText)
vtable.Fields.Append fld1
vtable.Fields.Append fld2
vtable.Fields.Append fld3
vtable.Fields.Append fld4
vtable.Fields.Refresh
CurrentDb.TableDefs.Append vtable
CurrentDb.TableDefs.Refresh
End With
Set rcd2 = CurrentDb.OpenRecordset("Check_" & tablename)
Set qry = CurrentDb.CreateQueryDef("Temp_Query"
qry.SQL = "SELECT [_SMD].Noun, [_SMD].Modifier, [_SMD].Seq, [_SMD].Characteristic FROM _SMD"
qry.Close
CurrentDb.QueryDefs.Refresh
'Opens working recordset.
Set rcd = CurrentDb.OpenRecordset(tablename)
total = (rcd.Fields.count) - 2
With rcd
.MoveFirst
counter = 1
While Not .EOF
For x = 0 To total
If rcd.Fields(x).name = "SIM" Then
For y = 1 To Len(!sim)
If Val(Mid(!sim, y, 1)) = 0 And (Mid(!sim, y, 1)) <> "0" Then
flag = 1
lineout = "SIM Error - contains non-numerics: " & (Mid(!sim, y, 1))
GoSub 100
End If
Next y
If Len(!sim) <> 11 Then
flag = 1
lineout = "SIM Error: " & Len(!sim) & " characters"
GoSub 100
End If
If Left(!sim, 6) <> !Mfr_No Then
flag = 1
lineout = "Mismatched with Mfr_No " & !Mfr_No
GoSub 100
End If
If Right(!sim, 5) <> !Item_No Then
flag = 1
lineout = "Mismatched with Item_No " & !Item_No
GoSub 100
End If
End If
If rcd.Fields(x).name = "Mfr_No" Then
If IsNull(!Mfr_No) Then
flag = 1
lineout = "Missing Mfr_No"
.Edit
!Mfr_No = "Null"
GoSub 100
End If
For y = 1 To Len(!Mfr_No)
If Val(Mid(!Mfr_No, y, 1)) = 0 And (Mid(!Mfr_No, y, 1)) <> "0" And !Mfr_No <> "Null" Then
flag = 1
lineout = "Mfr_No Error - contains non-numerics: " & (Mid(!Mfr_No, y, 1))
GoSub 100
End If
Next y
If Len(!Mfr_No) <> 6 And !Mfr_No <> "Null" Then
flag = 1
lineout = "Mfr_No Error: " & Len(!Mfr_No) & " characters"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Item_No" Then
If IsNull(!Item_No) Then
flag = 1
lineout = "Missing Item_No"
.Edit
!Item_No = "Null"
GoSub 100
End If
For y = 1 To Len(!Item_No)
If Val(Mid(!Item_No, y, 1)) = 0 And (Mid(!Item_No, y, 1)) <> "0" And !Item_No <> "Null" Then
flag = 1
lineout = "Item_No Error - contains non-numerics: " & (Mid(!Item_No, y, 1))
GoSub 100
End If
Next y
If Len(!Item_No) <> 5 And !Item_No <> "Null" Then
flag = 1
lineout = "Item_No Error: " & Len(!Item_No) & " characters"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Manufacturer" Then
If IsNull(!Manufacturer) Then
flag = 1
lineout = "Missing Manufacturer"
.Edit
!Manufacturer = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Part_No" Then
If IsNull(!PART_No) Then
flag = 1
lineout = "Missing Part_No"
.Edit
!PART_No = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Major_CC" Then
If IsNull(!major_cc) Then
flag = 1
lineout = "Missing Category code"
.Edit
!major_cc = "MT"
GoSub 100
End If
For y = 1 To Len(!major_cc)
If Val(Mid(!major_cc, y, 1)) = 0 And (Mid(!major_cc, y, 1)) <> "0" And !major_cc <> "MT" Then
flag = 1
lineout = "Major_CC Error - contains non-numerics: " & (Mid(!major_cc, y, 1))
GoSub 100
End If
Next y
End If
If rcd.Fields(x).name = "MajorCode" Then
If IsNull(!majorcode) Then
flag = 1
lineout = "Missing Major code description"
.Edit
!majorcode = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Noun" Then
If IsNull(!noun) Then
flag = 1
nflag = 1
lineout = "Missing Noun"
.Edit
!noun = "Null"
GoSub 100
End If
Set rcd1 = CurrentDb.OpenRecordset("_SMD"
noun = rcd!noun
rcd1.FindFirst "Noun = '" & noun & "'"
If rcd1.NoMatch Then
flag = 1
nflag = 1
lineout = "Invalid Noun"
GoSub 100
End If
rcd1.Close
End If
If rcd.Fields(x).name = "Modifier" Then
If IsNull(!modifier) Then
flag = 1
nflag = 1
lineout = "Missing Modifier"
.Edit
!modifier = "Null"
End If
Set rcd1 = CurrentDb.OpenRecordset("_SMD"
modf = rcd!modifier
rcd1.FindFirst "Modifier = '" & modf & "'"
If rcd1.NoMatch Then
flag = 1
nflag = 1
lineout = "Invalid Modifier"
GoSub 100
End If
rcd1.Close
End If
If nflag <> 1 Then
If Left(rcd.Fields(x).name, 14) = "Characteristic" Then
If Not (IsNull(rcd.Fields(x))) And (IsNull(rcd.Fields(x + 1))) Then
flag = 1
lineout = "No corresponding value for Characteristic"
GoSub 100
End If
If Not IsNull(rcd.Fields(x)) Then
term = rcd.Fields(x)
End If
qry.SQL = "SELECT [_SMD].Noun, [_SMD].Modifier, [_SMD].Seq, [_SMD].Characteristic FROM _SMD " & _
"WHERE ((([_SMD].Noun)= '" & noun & "') AND (([_SMD].Modifier)= '" & modf & "'))"
Set rcd3 = CurrentDb.OpenRecordset("Temp_Query"
rcd3.FindFirst "Characteristic = '" & term & "'"
If rcd3.NoMatch Then
term1 = rcd.Fields(x).name
tleng = Len(term1)
term2 = Val(Right(term1, (tleng - 14)))
qry.SQL = "SELECT [_SMD].Noun, [_SMD].Modifier, [_SMD].Seq, [_SMD].Characteristic FROM _SMD " & _
"WHERE ((([_SMD].Noun)= '" & noun & "') AND (([_SMD].Modifier)= '" & modf & "') and (([_SMD].Seq)=" & term2 & ")"
With rcd3
.MoveFirst
fterm = rcd3!Characteristic
rcd.Edit
rcd.Fields(x) = fterm
rcd.Update
End With
End If
End If
End If
If rcd.Fields(x).name = "dss_UOM" Then
If !dss_UOM <> "E" And !dss_UOM <> "C" And !dss_UOM <> "M" And Not IsNull(!dss_UOM) Then
flag = 1
lineout = "Invalid dss Unit of measure"
GoSub 100
End If
If IsNull(!dss_UOM) Then
flag = 1
lineout = "Missing dss Unit of measure"
.Edit
!dss_UOM = "0"
GoSub 100
End If
End If
If rcd.Fields(x).name = "PCF" Then
If IsNull(!PCF) Then
flag = 1
lineout = "Missing PCF"
.Edit
!PCF = 0
GoSub 100
End If
End If
If rcd.Fields(x).name = "unit_of_measure" Then
If IsNull(!unit_of_measure) Then
flag = 1
lineout = "Missing unit_of_measure"
.Edit
!unit_of_measure = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "unit_of_issue_abbrev" Then
If IsNull(!unit_of_issue_abbrev) Then
flag = 1
lineout = "Missing unit_of_issue_abbrev"
.Edit
!unit_of_issue_abbrev = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "unit_of_issue_full_name" Then
If IsNull(!unit_of_issue_full_name) Then
flag = 1
lineout = "Missing unit_of_issue_full_name"
.Edit
!unit_of_issue_full_name = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Price_final" Then
If IsNull(!price_final) Or !price_final = 0 Then
flag = 1
lineout = "Missing price"
!price_final = 0
GoSub 100
End If
End If
If rcd.Fields(x).name = "UPC" Then
If IsNull(!upc) Then
.Edit
!upc = !sim
.Update
Else
If !upc <> !sim Then
flag = 1
lineout = "WARNING - UPC does not match SIM"
GoSub 100
End If
End If
End If
If rcd.Fields(x).name = "Short_Description" Then
If IsNull(!short_description) Then
flag = 1
lineout = "Short_Description missing"
!short_description = "Null"
GoSub 100
Else
sstr = !short_description
If InStr(1, sstr, "*" Then
flag = 1
lineout = "WARNING - Errors in Short_Description"
GoSub 100
End If
End If
End If
Next x
nflag = 0
counter = counter + 1
.MoveNext
Wend
End With
100 If flag = 1 Then
rcd2.AddNew
rcd2!sim = rcd!sim
rcd2![field name] = rcd.Fields(x).name
rcd2![Invalid data] = rcd.Fields(x)
rcd2![Error condition] = lineout
rcd2.Update
flag = 0
Return
End If
End Function
Option Compare Database
Option Explicit
'Cleans and validates data immediately prior to output.
Public Function clean_and_validate()
Dim rcd As Recordset, rcd1 As Recordset, rcd2 As Recordset, rcd3 As Recordset
Dim flag As Integer, total1 As Integer, ind0 As Integer, seq As Integer, tleng As Integer, counter As Integer
Dim x As Integer, y As Integer, ind As Integer, ind1 As Integer, total As Integer, nflag As Integer
Dim fldname As String, flddata As String, simin As String, lineout As String, term1 As String, fterm As String
Dim noun As String, modf As String, term As String, tablename As String, test As String, term2 As String
Dim sstr As String
Dim optionset1, optionset2, optionset3
Dim qry As QueryDef, qry1 As QueryDef
Dim fld1 As field, fld2 As field, fld3 As field, fld4 As field
Dim idx As Index
Dim vtable As TableDef
tablename = InputBox("Enter table name to process: ", "Table:", "Working"
optionset1 = Application.GetOption("Confirm Document Deletions"
optionset2 = Application.GetOption("Confirm Action Queries"
optionset3 = Application.GetOption("Confirm Record Changes"
Application.SetOption "Confirm Document Deletions", 0
Application.SetOption "Confirm Action Queries", 0
Application.SetOption "Confirm Record Changes", 0
'Creates error table.
Set vtable = CurrentDb.CreateTableDef("Check_" & tablename)
With vtable
Set fld1 = vtable.CreateField("SIM", dbText, 20)
Set fld2 = vtable.CreateField("Field Name", dbText)
Set fld3 = vtable.CreateField("Invalid Data", dbMemo)
Set fld4 = vtable.CreateField("Error Condition", dbText)
vtable.Fields.Append fld1
vtable.Fields.Append fld2
vtable.Fields.Append fld3
vtable.Fields.Append fld4
vtable.Fields.Refresh
CurrentDb.TableDefs.Append vtable
CurrentDb.TableDefs.Refresh
End With
Set rcd2 = CurrentDb.OpenRecordset("Check_" & tablename)
Set qry = CurrentDb.CreateQueryDef("Temp_Query"
qry.SQL = "SELECT [_SMD].Noun, [_SMD].Modifier, [_SMD].Seq, [_SMD].Characteristic FROM _SMD"
qry.Close
CurrentDb.QueryDefs.Refresh
'Opens working recordset.
Set rcd = CurrentDb.OpenRecordset(tablename)
total = (rcd.Fields.count) - 2
With rcd
.MoveFirst
counter = 1
While Not .EOF
For x = 0 To total
If rcd.Fields(x).name = "SIM" Then
For y = 1 To Len(!sim)
If Val(Mid(!sim, y, 1)) = 0 And (Mid(!sim, y, 1)) <> "0" Then
flag = 1
lineout = "SIM Error - contains non-numerics: " & (Mid(!sim, y, 1))
GoSub 100
End If
Next y
If Len(!sim) <> 11 Then
flag = 1
lineout = "SIM Error: " & Len(!sim) & " characters"
GoSub 100
End If
If Left(!sim, 6) <> !Mfr_No Then
flag = 1
lineout = "Mismatched with Mfr_No " & !Mfr_No
GoSub 100
End If
If Right(!sim, 5) <> !Item_No Then
flag = 1
lineout = "Mismatched with Item_No " & !Item_No
GoSub 100
End If
End If
If rcd.Fields(x).name = "Mfr_No" Then
If IsNull(!Mfr_No) Then
flag = 1
lineout = "Missing Mfr_No"
.Edit
!Mfr_No = "Null"
GoSub 100
End If
For y = 1 To Len(!Mfr_No)
If Val(Mid(!Mfr_No, y, 1)) = 0 And (Mid(!Mfr_No, y, 1)) <> "0" And !Mfr_No <> "Null" Then
flag = 1
lineout = "Mfr_No Error - contains non-numerics: " & (Mid(!Mfr_No, y, 1))
GoSub 100
End If
Next y
If Len(!Mfr_No) <> 6 And !Mfr_No <> "Null" Then
flag = 1
lineout = "Mfr_No Error: " & Len(!Mfr_No) & " characters"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Item_No" Then
If IsNull(!Item_No) Then
flag = 1
lineout = "Missing Item_No"
.Edit
!Item_No = "Null"
GoSub 100
End If
For y = 1 To Len(!Item_No)
If Val(Mid(!Item_No, y, 1)) = 0 And (Mid(!Item_No, y, 1)) <> "0" And !Item_No <> "Null" Then
flag = 1
lineout = "Item_No Error - contains non-numerics: " & (Mid(!Item_No, y, 1))
GoSub 100
End If
Next y
If Len(!Item_No) <> 5 And !Item_No <> "Null" Then
flag = 1
lineout = "Item_No Error: " & Len(!Item_No) & " characters"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Manufacturer" Then
If IsNull(!Manufacturer) Then
flag = 1
lineout = "Missing Manufacturer"
.Edit
!Manufacturer = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Part_No" Then
If IsNull(!PART_No) Then
flag = 1
lineout = "Missing Part_No"
.Edit
!PART_No = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Major_CC" Then
If IsNull(!major_cc) Then
flag = 1
lineout = "Missing Category code"
.Edit
!major_cc = "MT"
GoSub 100
End If
For y = 1 To Len(!major_cc)
If Val(Mid(!major_cc, y, 1)) = 0 And (Mid(!major_cc, y, 1)) <> "0" And !major_cc <> "MT" Then
flag = 1
lineout = "Major_CC Error - contains non-numerics: " & (Mid(!major_cc, y, 1))
GoSub 100
End If
Next y
End If
If rcd.Fields(x).name = "MajorCode" Then
If IsNull(!majorcode) Then
flag = 1
lineout = "Missing Major code description"
.Edit
!majorcode = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Noun" Then
If IsNull(!noun) Then
flag = 1
nflag = 1
lineout = "Missing Noun"
.Edit
!noun = "Null"
GoSub 100
End If
Set rcd1 = CurrentDb.OpenRecordset("_SMD"
noun = rcd!noun
rcd1.FindFirst "Noun = '" & noun & "'"
If rcd1.NoMatch Then
flag = 1
nflag = 1
lineout = "Invalid Noun"
GoSub 100
End If
rcd1.Close
End If
If rcd.Fields(x).name = "Modifier" Then
If IsNull(!modifier) Then
flag = 1
nflag = 1
lineout = "Missing Modifier"
.Edit
!modifier = "Null"
End If
Set rcd1 = CurrentDb.OpenRecordset("_SMD"
modf = rcd!modifier
rcd1.FindFirst "Modifier = '" & modf & "'"
If rcd1.NoMatch Then
flag = 1
nflag = 1
lineout = "Invalid Modifier"
GoSub 100
End If
rcd1.Close
End If
If nflag <> 1 Then
If Left(rcd.Fields(x).name, 14) = "Characteristic" Then
If Not (IsNull(rcd.Fields(x))) And (IsNull(rcd.Fields(x + 1))) Then
flag = 1
lineout = "No corresponding value for Characteristic"
GoSub 100
End If
If Not IsNull(rcd.Fields(x)) Then
term = rcd.Fields(x)
End If
qry.SQL = "SELECT [_SMD].Noun, [_SMD].Modifier, [_SMD].Seq, [_SMD].Characteristic FROM _SMD " & _
"WHERE ((([_SMD].Noun)= '" & noun & "') AND (([_SMD].Modifier)= '" & modf & "'))"
Set rcd3 = CurrentDb.OpenRecordset("Temp_Query"
rcd3.FindFirst "Characteristic = '" & term & "'"
If rcd3.NoMatch Then
term1 = rcd.Fields(x).name
tleng = Len(term1)
term2 = Val(Right(term1, (tleng - 14)))
qry.SQL = "SELECT [_SMD].Noun, [_SMD].Modifier, [_SMD].Seq, [_SMD].Characteristic FROM _SMD " & _
"WHERE ((([_SMD].Noun)= '" & noun & "') AND (([_SMD].Modifier)= '" & modf & "') and (([_SMD].Seq)=" & term2 & ")"
With rcd3
.MoveFirst
fterm = rcd3!Characteristic
rcd.Edit
rcd.Fields(x) = fterm
rcd.Update
End With
End If
End If
End If
If rcd.Fields(x).name = "dss_UOM" Then
If !dss_UOM <> "E" And !dss_UOM <> "C" And !dss_UOM <> "M" And Not IsNull(!dss_UOM) Then
flag = 1
lineout = "Invalid dss Unit of measure"
GoSub 100
End If
If IsNull(!dss_UOM) Then
flag = 1
lineout = "Missing dss Unit of measure"
.Edit
!dss_UOM = "0"
GoSub 100
End If
End If
If rcd.Fields(x).name = "PCF" Then
If IsNull(!PCF) Then
flag = 1
lineout = "Missing PCF"
.Edit
!PCF = 0
GoSub 100
End If
End If
If rcd.Fields(x).name = "unit_of_measure" Then
If IsNull(!unit_of_measure) Then
flag = 1
lineout = "Missing unit_of_measure"
.Edit
!unit_of_measure = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "unit_of_issue_abbrev" Then
If IsNull(!unit_of_issue_abbrev) Then
flag = 1
lineout = "Missing unit_of_issue_abbrev"
.Edit
!unit_of_issue_abbrev = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "unit_of_issue_full_name" Then
If IsNull(!unit_of_issue_full_name) Then
flag = 1
lineout = "Missing unit_of_issue_full_name"
.Edit
!unit_of_issue_full_name = "Null"
GoSub 100
End If
End If
If rcd.Fields(x).name = "Price_final" Then
If IsNull(!price_final) Or !price_final = 0 Then
flag = 1
lineout = "Missing price"
!price_final = 0
GoSub 100
End If
End If
If rcd.Fields(x).name = "UPC" Then
If IsNull(!upc) Then
.Edit
!upc = !sim
.Update
Else
If !upc <> !sim Then
flag = 1
lineout = "WARNING - UPC does not match SIM"
GoSub 100
End If
End If
End If
If rcd.Fields(x).name = "Short_Description" Then
If IsNull(!short_description) Then
flag = 1
lineout = "Short_Description missing"
!short_description = "Null"
GoSub 100
Else
sstr = !short_description
If InStr(1, sstr, "*" Then
flag = 1
lineout = "WARNING - Errors in Short_Description"
GoSub 100
End If
End If
End If
Next x
nflag = 0
counter = counter + 1
.MoveNext
Wend
End With
100 If flag = 1 Then
rcd2.AddNew
rcd2!sim = rcd!sim
rcd2![field name] = rcd.Fields(x).name
rcd2![Invalid data] = rcd.Fields(x)
rcd2![Error condition] = lineout
rcd2.Update
flag = 0
Return
End If
End Function