Avatar billede nolle_k Nybegynder
23. juni 2000 - 11:56 Der er 14 kommentarer og
1 løsning

Skrivening til Database via ADO!

Hej!

Jeg har lavet en forbindelse til en Access98 database fil *.mdb på følgende måde;

Dim str As String
  str = "Provider=Microsoft.Jet.OLEDB.3.51;"
  str = str + "Data Source="
  str = str + DataBase
  str = str + ";Persist Security Info=False"

  Connection.ConnectionString = str
  Connection.Open
 
str = "SELECT *"
  str = str + " From PageITQueue"
  str = str + " Where ((([PageITQueue].[Read]) = No))"
  str = str + " ORDER BY [PageITQueue].[Time];"
   
  RecordSet.CursorLocation = adUseServer
  RecordSet.CursorType = adOpenDynamic
 
  RecordSet.Source = str
  Set RecordSet.ActiveConnection = Connection
  RecordSet.Open
  RecordSet.MoveFirst
 
Hvis jeg så skriver

  RecordSet!Read = True

får jeg følgende fejlmeddelelse??

"Object or Provider is not capable of performing requested operation"

Hvad skyldes det?? Hvorfor kan jeg ikke få lov til at skrive til databasen?? Skal det gøre ved hjælp af SQL?? Jeg mener bare at have læst at det kan lade sig gøre på den viste måde! Er der noget jeg har glemt??
Avatar billede privaten Nybegynder
23. juni 2000 - 14:17 #1
MoveFirst henter data fra tabellen, når du har brugt disse skal du bruge movenext for at komme til næste record.

Hvis du vil indsætte en record anvendes AddNew og hvis du skal rette bruges edit
Avatar billede privaten Nybegynder
23. juni 2000 - 14:20 #2
fx.

RecordSet.MoveFirst
While not RecordSet.EOF
  MsgBox "Første felt i rækken indeholder: " & RecordSet(0)
  RecordSet.MoveNext
Wend
Avatar billede nolle_k Nybegynder
23. juni 2000 - 14:59 #3
MoveFirst henter ikke data fra tabellen!!! Den sætter cursoren til at pege på det første element i databasen!!

Herefter kan man hente data ved hjælp af a = RecordSet!Read

Men hvorfor kan jeg ikke skrive til databasen???

Har løst problemet ved at undlade at bruge en database men nøjes med at bruge et Dynamisk Recordset! Skide smart! Men jeg vil nu gerne have løst mit lille mysterium alligevel i tilfælde af....... I ved!


Nikolaj
Avatar billede privaten Nybegynder
23. juni 2000 - 16:40 #4
Nu har jeg ikke vildt meget forstand på ADO/DAO/RDO og hvad det hedder alt sammen, og det er sikkert også rigtigt at MoveFirst ikke "henter data", men som jeg plejer at tilgå data, har jeg erfaring for, at når MoveFirst er kaldt er "RecordSet" også loadet med data fra første række i tabellen.
Jeg har ikke prøvet din metode, men er det ikke umiddelbart til at sammenligne...?

Som jeg ser det åbner du en "læse-cursor" og er nødt til at bruge AddNew eller Edit, eller hur?
Avatar billede nolle_k Nybegynder
23. juni 2000 - 19:06 #5
Nej det tror jeg ikke!

Jeg skal ændre en værdi i en allerede eksisterende record!

Men tak for hjælpen alligevel!
Avatar billede privaten Nybegynder
24. juni 2000 - 10:04 #6
Hvis du skal ændre værdien skal du bruge RecordSet.Edit og RecordSet.Update
Avatar billede privaten Nybegynder
25. juni 2000 - 11:28 #7
>> Nolle_K

Jeg har kigget lidt på problematikken:

Test.mdb oprettet med 2 felter:
1: et id -> autonumber felt
2: et tekst -> Text felt

Nedenstående afviklet i VB, uden problemer

Private Sub Command1_Click()
    Dim objCnn      As New ADODB.Connection
    Dim objRecordSet As New ADODB.Recordset
    Dim strConn      As String

    strConn = "Provider=Microsoft.Jet.OLEDB.3.51; Data Source=c:\dokumenter\test.mdb"
    objCnn.Open strConn
    objRecordSet.Open "TestTabel", objCnn, , adLockOptimistic
    objRecordSet.MoveFirst
    ' Først lister vi de allerede eksisterende rækker
    While Not objRecordSet.EOF
        MsgBox objRecordSet(1)
        objRecordSet.MoveNext
    Wend
    ' Så opdaterer vi den sidste række
    objRecordSet.MoveFirst
    objRecordSet(1) = "Denne række er opdateret via ADO " & Now
    objRecordSet.Update
    objRecordSet.AddNew
    objRecordSet(1) = "Denne række er indsat via ADO " & Now
    objRecordSet.Update
    objCnn.Close
End Sub
Avatar billede privaten Nybegynder
25. juni 2000 - 11:30 #8
prøv at lave et cut'n paste og hvis det stadig ikke virker må vi jo prøve igen
Avatar billede nolle_k Nybegynder
26. juni 2000 - 10:28 #9
Godt nok men det er jo ikke det jeg vil! Jeg vil ændre et felts værdi for en record eller række om du vil, der allerede eksistere! Ikke oprette en ny record!

OK?

Nikolaj
Avatar billede privaten Nybegynder
26. juni 2000 - 10:39 #10
Jamen, Nikolaj...

Hvad er det der står her?

objRecordSet(1) = "Denne række er opdateret via ADO " & Now
objRecordSet.Update

Her opdaterer du et felt i en allerede eksisterende række/record :-)


Avatar billede privaten Nybegynder
26. juni 2000 - 10:43 #11
(Koden afprøver netop:
-Listning af eksisterende rækker
-Update af eksisterende rækker
-Oprettelse af nye rækker)
Avatar billede nolle_k Nybegynder
28. juni 2000 - 10:19 #12
Det jeg  ledte efter var at jeg skulle sætte LockType til adLockOptimistic!

Så værsgo selvom jeg ikke er meget for det!

Tak for det selvom det ikke var det du skrev der hjalp selvom jeg godt kan se at du har brugt adLockOptimistic!

Avatar billede privaten Nybegynder
28. juni 2000 - 16:21 #13
Jeg overvejede også 'adLockOptimistic' undervejs, men koncentrerede mig mere om hvilke funktionaliteter du ville have understøttet, og som jeg skrev kunne du prøve med et cut and paste for at checke om det ikke kørte hos dig....

Så jeg forstår ikke hvad du mener med: "Så værsgo selvom jeg ikke er meget for det!"?

Avatar billede nolle_k Nybegynder
29. juni 2000 - 08:25 #14
En Joke!! Du ved!!!

Man skal jo ikke komme alt for let til tingene vel?? *GGGG*

Avatar billede privaten Nybegynder
06. juli 2000 - 13:54 #15
Ok, point taken... ;-)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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