ADO og Edit/Update problem
Jeg har en lille metode hvor jeg ønsker/prøver at fjerne null værdier fra en table i en database.Jeg får følgende fejl:
Run-time error '3251':
Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype.
Så har den makeret rs.edit. Her kan i se min kode.
Public Sub nullToZero(columeName As String, tableName As String)
Dim rs As New ADODB.Recordset
Dim fld As ADODB.Field
Dim rsString As String
Dim dbConnect As String
rsString = "SELECT " + columeName + " FROM " + Settings.getPrefix() + tableName
dbConnect = "DSN=" + Settings.getAccessDNS + ";"
rs.Open rsString, dbConnect, adOpenDynamic
'Set rs = Settings.getAccess.OpenRecordset(rsString)
With rs
Do While Not rs.EOF
For Each fld In rs.Fields
'MsgBox fld.Type
rs.Edit
'Finds empty feilds
If IsNull(fld.value) Then
'Set all dbBoolean fields to 0
If (fld.Type = 1) Then
fld.value = 0
'Set all dbByte fields to 0
ElseIf (fld.Type = 2) Then
fld.value = 0
'Set all dbInteger fields to 0
ElseIf (fld.Type = 3) Then
fld.value = 0
'Set all dbLong fields to 0
ElseIf (fld.Type = 4) Then
fld.value = 0
'Informs user of dbCurrency field
ElseIf (fld.Type = 5) Then
MsgBox ("dbCurrency field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Informs user of dbSingle field
ElseIf (fld.Type = 6) Then
MsgBox ("dbSingle field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Set all dbDouble fields to 0
ElseIf (fld.Type = 7) Then
fld.value = 0
'Informs user of dbDate field
ElseIf (fld.Type = 8) Then
MsgBox ("dbDate field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Informs user of dbBinary field
ElseIf (fld.Type = 9) Then
MsgBox ("dbBinary field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Set all String fields to 0
ElseIf (fld.Type = 10) Then
fld.value = "0"
'Informs user of dbLongBinary field
ElseIf (fld.Type = 11) Then
MsgBox ("dbLongBinary field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Set all String fields to 0
ElseIf (fld.Type = 12) Then
fld.value = "0"
'Informs user of dbGUID field
ElseIf (fld.Type = 15) Then
MsgBox ("dbGUID field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Set all dbBigInt fields to 0
ElseIf (fld.Type = 16) Then
fld.value = 0
'Informs user of dbVarBinary field
ElseIf (fld.Type = 17) Then
MsgBox ("dbVarBinary field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Informs user of dbVarChar field
ElseIf (fld.Type = 18) Then
MsgBox ("dbChar field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Informs user of dbNumeric field
ElseIf (fld.Type = 19) Then
MsgBox ("dbNumeric field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Informs user of dbDecimal field
ElseIf (fld.Type = 20) Then
MsgBox ("Decimal field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Informs user of dbFloat field
ElseIf (fld.Type = 21) Then
MsgBox ("dbFloat field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Informs user of dbTime field
ElseIf (fld.Type = 22) Then
MsgBox ("dbTime field found in" + Settings.getPrefix + tableName + "." + fld.name)
'Informs user of dbTimeStamp field
ElseIf (fld.Type = 23) Then
MsgBox ("dbTimeStamp field found in" + Settings.getPrefix + tableName + "." + fld.name)
Else
MsgBox (" -Zero- Unknowen field found in" + Settings.getPrefix + tableName + "." + fld.name)
End If
End If
rs.Update
Next fld
rs.MoveNext
Loop
End With
rs.Close
End Sub
