Avatar billede elohite Nybegynder
14. april 2003 - 16:21 Der er 1 løsning

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
Avatar billede mortrr Praktikant
14. april 2003 - 17:33 #1
Hvis du ikke angiver en LockType er default read-only.

Fx:
rs.Open rsString, dbConnect, adOpenDynamic, adLockOptimistic
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester