Print side | Luk vindue

DAO og VBA

Udskrevet fra: Dansk Access Forum
Kategori: Hjælp til Access
Forum navn: Forespørgsler og SQL scripts (Query)
Forum beskrivelse: Spørgsmål relateret til SQL og forespørgsler
Web-adresse: https://www.accessforum.dk/forum_posts.asp?TID=107
Udskrevet den: 28-04-2024 kl. 12:03


Emne: DAO og VBA
Besked fra: LarsHT
Emne: DAO og VBA
Posteringsdato: 10-05-2017 kl. 16:44
Hey

Jeg åbner et recordset på baggrund af en forespørgsel:

dim db As DAO.Database
dim rs as DAO.recordset
set db = CurrentDb
set rs=db.OpenRecordset("SELECT * FROM MinTabel WHERE Navn = 'Zoo' ")

Hvis jeg retter i en record, med: 

rs.edit
rs.fields("DyreNavn")="Krododille"
rs.update

bliver posten i MinTabel også rettet!

Hvordan forhindrer jeg dette? 
Jeg ønsker bare et udtræk, som IKKE mere er "forbundet" med MinTabel.


Hej fra Lars




Svar:
Besked fra: hkh
Posteringsdato: 10-05-2017 kl. 17:20
Hej Lars

Hvad ønsker du at opnå, ved at foretage en ændring som du ikke ønsker?

Hvis du ikke bruger rs.update bliver posten ikke gemt, men der må være en dybere mening.

Hvis du vil foretage en udvælgelse af nogle enkelte poster(søge)
Skal du benytte en WHERE sætning.
Det kan enkelt og ligetil gøres fra forespørgselsdesign, hvor du indsætter dit søgefelt og teksten du søger efter i 'Kriterier', hvis du har flere kriterier på samme linje skal de alle være opfyldt, medens kun et skal være opfyldt hvis hvert kriterie står på en ny linje.

Du skal benytte select DinTabel.* from dintabel where ((dintabel.søgefelt)='søgetekst';)

-------------
Hans


Besked fra: hkh
Posteringsdato: 10-05-2017 kl. 17:32
Der er en genvej til rs.fields("DyreNavn")="Krododille"
rs!DyreNavn="Krododille"

eller


rs![DyreNavn]="Krododille"

Det sidste skal benyttes hvis der er mellemrum i feltnavnet, feltnavnet starter med et tal og helst også ved brug af danske æøå

Du skal også huske
set rs=nothing eller rs.close
set db=nothing eller db.close

Brug af Close giver en fejl hvis ikke db er åben.

-------------
Hans


Besked fra: LarsHT
Posteringsdato: 10-05-2017 kl. 17:54
Citat: hkh hkh skrev:

Hej Lars

Hvad ønsker du at opnå, ved at foretage en ændring som du ikke ønsker?


Tak for svarene! 

Kan godt forstå, at du spørger til den dybere mening. 
Jeg har brug for at foretage et udtræk af data, som jeg skal lave noget databehandling på (ændre nogle værdier og tilføje nogle poster), som ikke skal gemmes tilbage i tabellen.

Måske er det bare lettere at gemme udtrækket i et 2D-array og så lave databehandlingen her?

Troede nok bare, at jeg kunne gemme et udtræk af data som et recordset - men arvede felttyper - og så ændre recordsettet - UDEN at det var i forbindelse med den/de oprindelige tabeller.
Har nok ikke HELT forstået, hvad et recordset så er, selvom jeg har abejdet en hel del med dem. :-)

In real life husker jeg at frigive hukommelsen, når jeg er færdig med db og rs!

Tak for tippet vedr felt-angivelser


Besked fra: LarsHT
Posteringsdato: 10-05-2017 kl. 17:57
Hmmm - det er vist ds.GetRows jeg skal have fat I, hva?


Besked fra: hkh
Posteringsdato: 10-05-2017 kl. 18:29
Du kan også oprette en midlertidig tabel, hvor du kopierer din data over i, foretager det du nu skal, så har du stadig dine originale data.

Næste gang starter du med at slette data i den midlertidige tabel og så oprette de data du har behov for.

Denne metode benytter jeg selv til nogle rapporter hvor jeg gerne vil have nogle data til rådighed og i tilfælde hvor jeg f.eks ønsker flere ens sider i en rapport. (Infobreve m.m. der afleveres i postkassen)

Et array kan godt blive lidt tungt at arbejde med, hvis du har mange felter, men når først koden er der, så virker det lige så godt som en midlertidig tabel, rent bortset fra at den midlertidige tabel holder data når maskinen lukkes ned.



-------------
Hans



Print side | Luk vindue