Avatar billede weinreich Nybegynder
05. august 2004 - 09:37 Der 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
   
    Dim subcampainID As String
   
    Dim test As String
    Dim test2 As String
   
    Dim name, email as string

    Set db = CurrentDb
       
    orgsubject = Me.subcampain_message.Column(1)
    orgmessage = Me.subcampain_message.Column(2)
   
    subcampainID = Me.subcampain_RegID
   
    sql = "SELECT * FROM tbl_Individuals INNER JOIN tbl_Activities ON tbl_Individuals.individual_RegID = tbl_Activities.activity_individual WHERE (((tbl_Activities.activity_subcampain)=" & subcampainID & ") AND ((tbl_Activities.activity_completed)=False));"

    'Det er her jeg har nogen problemer tror jeg
    Set rs = db.OpenRecordset(sql, dbOpenDynaset)
   
    Do While Not rs.EOF
   
        message = orgmessage
        subject = orgsubject
       
        name = rs!individual_firstname
        email = rs!individual_email
       
        subject = Strings.Replace(subject, "[name]", name)
        subject = Strings.Replace(subject, "[email]", email)
       
        message = Strings.Replace(message, "[name]", name)
        message = Strings.Replace(message, "[email]", email)
       
        'her skal der sendes en email til personen               
       
        '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....

weinreich
Avatar billede carstensuurland Nybegynder
05. august 2004 - 09:51 #1
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)
Avatar billede weinreich Nybegynder
05. august 2004 - 09:53 #2
OK tak for hjælpen... jeg prøver lige at se om jeg kan få det til at virke...

Hvad mener du forresten med den sidste linje i parantesen?
Avatar billede weinreich Nybegynder
05. august 2004 - 09:54 #3
Og kan du forresten også fortælle mig hvad forskellen er på OpenDynaset og OpenDynamic (da jeg ikke lige selv kan se forskellen)
Avatar billede carstensuurland Nybegynder
05. august 2004 - 10:02 #4
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)
Avatar billede weinreich Nybegynder
05. august 2004 - 10:10 #5
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 :)
Avatar billede weinreich Nybegynder
05. august 2004 - 10:11 #6
øh forresten,,,, kan jeg ikke give flere point end først lagt på spørgsmålet?
Avatar billede mugs Novice
05. august 2004 - 10:20 #7
Jeg mener godt du kan justere antal point. Er der ikke en box i nærheden af den box hvori du vælger brugere der skal accepteres?
Avatar billede weinreich Nybegynder
05. august 2004 - 10:28 #8
hmm jeg kan ikke lige se det så?
Avatar billede carstensuurland Nybegynder
05. august 2004 - 10:36 #9
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
Avatar billede carstensuurland Nybegynder
05. august 2004 - 10:38 #10
En lille forglemmelse/skrivefejl:

***KLIP***
F.eks: "UPDATE tbl_Activities SET activity_completet = True WHERE mitFelt = 7"
***KLIP***
Avatar billede weinreich Nybegynder
05. august 2004 - 10:44 #11
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")
Avatar billede weinreich Nybegynder
05. august 2004 - 10:45 #12
Jeg kunne ikke lige se hvordan jeg skulle kunne give flere point men jeg har givet noget god Karma istedet ;)
Avatar billede carstensuurland Nybegynder
05. august 2004 - 10:48 #13
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
Avatar billede weinreich Nybegynder
05. august 2004 - 10:49 #14
oki tak endnu en gang
Avatar billede carstensuurland Nybegynder
05. august 2004 - 10:50 #15
Det var da så lidt :-)
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