05. august 2004 - 09:37Der er
13 kommentarer og 2 løsninger
Gennemgang af recordset
Jeg vil gerne kunne gennemgå et recordset men det er måske ikke lige det jeg er bedst til... umiddelbart vil jeg gerne ændre nogen variable i det recordset jeg henter ind men jeg kan ikke rigtig få det til at virke... Jeg har følgende kode:
Private Sub Command24_Click()
Dim db As DAO.Database Dim rs As DAO.Recordset Dim sql As String
'her skriver jeg i tabelen at emailen er blevet sendt: rs!activity_completed = True
rs.MoveNext Loop End Sub
Det som der er problemet er at jeg ikke rigtig kan få lov til at sætte rs!activity_competed til true... det er en YES/NO i tabelen og jeg ved ikke rigtig hvad jeg gør galt... jeg kan ikke rigtig åbne recordset'et ved hjælp af OpenDynamic... så går der et eller andet galt?!? Er der nogen der kan hjælpe....
Du kan ikke opdatere tbl_Activities via dette recordset, da recordsettet (og dermed din adgang til tbl_Activities) er dannet med udgangspunkt i en JOIN.
Du bør derfor oprette en SQL sætning som du Executer i din Do...While sætning i stedet for at forsøge at redigere dit recordet. (Altså en UPDATE tbl_Activities SET activitity_completed = True WHERE...)
(Du i øvrigt også have rs.Edit samt rs.Update på når du opdaterer et recordset)
Der manglede lige et enkelt ord... sorry. Jeg skrev at du også skal skrive rs.Edit før du begynder at redigere data via et Recordset og slutte af med rs.Update når dine ændringer skal gemmes.
Forskellen på OpenDynaset og OpenDynamic er (så vidt jeg ved) at OpenDynamic bruges når du tilgår databaser (ODBC datakilder) udenom Jet (Access DataEngine). Det kunne f.eks være en mySQL database. Når du tilgår en Accessdatabase direkte (som det er tilfældet ovenfor) bør du bruge OpenDynaset. Begge cursortyper giver dig mulighed for at manipulere de underliggende data (modsat f.eks. OpenSnapshot som giver et statisk billede at dine data) samt fri bevægelsesfrihed (i modsætning til OpenForwardOnly)
takker ... super :) Men så bliver jeg lige nød til at spørge hvordan jeg laver den update? (jeg har ikke arbejdet så meget i VBA ;) Jeg kan forstå at jeg så må lave en UPDATE tbl_Activities SET activitity_completed = True WHERE men hvordan får jeg lige rs'et til at køre denne update? Jeg kan yderligere forstå at jeg bliver nød til at sige rs.edit et eller andet kode rs.update men hvad er "et eller andet kode så" LOL
Jeg sætter lige lidt flere point ind til dig, for vi er vist lidt længere i svaret :)
Du skal eksekvere din sql-sætning på den aktuelle database: CurrentDB.Execute "UPDATE ......"
Du skal huske (!!!) at bygge WHERE delen af SQLsætningen, således at den kun arbejder på den post du i øjeblikket "kigger på" i din Do...While struktur.
F.eks: "UPDATE tbl_Activities SET activity_completet WHERE mitFelt = 7" Det er så den sidste del (alt efter WHERE) du selv skal strikke sammen. Gør du ikke det, vil alle poster i tbl_Activities blive opdateret.
Med hensyn til rs.Edit og rs.Update så er det blot to kommandoer du skal bruge inden og efter du gerne vil redigere i et recordset. Altså:
Set rs = CurrentDB.OpenRecordset("SELECT * FROM minTabel") rs.Edit rs.Fields("MitFelt").Value = 10 rs.Fields("EtAndetFelt").Value = "En tekst" rs.Update
ok super igen ;) Det er jeg rigtig glad for, det hjælper mig rigtig meget det her.... Lige et sidste spørgsmål (du får dine point nu alligevel) men er CurrentDB.execute "sql streng blabla" så ikke lidt det samme som DoCmd.RunSQL("et eller andet sql")
Jo det er det. Jeg bruger bare helst ikke DoCmd, da jeg har min egen ide om at den er grim... :-) Den er versionspecifik og ikke specielt forklarende i forhold til det aktuelle programmeringskontext (det lyder flot).
Jeg mener: Hvis du gerne vil eksekvere en sql sætning op imod den aktuelle database, så er det lidt nemmere at se når man skriver CurrentDB.Execute("...") end at kalde et menupunkt eller andet via DoCmd
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.