Avatar billede nca Juniormester
17. januar 2002 - 21:06 Der er 9 kommentarer og
1 løsning

Ændre en tabels datasource medens tabellen er lukket

Jeg har i Access 2000 opbygget en kundedatabase. I basen er kunderne fordelt i 4 grupper. Kundetypen har jeg placeret i feltet \"Kundetype\" Jeg vil bruge den samme formular til at behandle alle 4 kundetyper i. Datasourcen til denne formular har jeg sat til Delkunder. For overskuelighedens skyld ønsker jeg kun at arbejde med én gruppe ad gangen. Jeg vil gerne lave en menu, hvorfra man fx. vælger gruppe 1. Hvordan får jeg skiftet posterne ud i delkunder, så kun de med det rigtige kundenummer er i tabellen?
Avatar billede mugs Novice
17. januar 2002 - 21:43 #1
Denne fungerer i Access97. skulle der opstå fejl, check da dine referencer i et kodemodul:

DoCmd.OpenForm \"Form2\"
Forms!Form2!Felt1.SetFocus
DoCmd.FindRecord Me!Felt1

Du står i en formular (lad os kalde den Form1), og ønsker at åbne formularen \"Form2\", hvor data i Felt1 matcher data i Felt1 i \"Form1\"

Ordet \"Me\" refererer til den altid aktuelle formular.
Avatar billede nca Juniormester
17. januar 2002 - 21:53 #2
>>>mugs
Jeg vil netop ikke åbne en form, når jeg har valgt gruppe. Jeg vil bare ha\' fyldt tabellen \"Delkunder\", så når jeg senere åbner en form, vil den indeholde de rigtige oplysninger.
Avatar billede mugs Novice
17. januar 2002 - 22:24 #3
Der er noget selvmodsigende i dit spørgsmål og kommentar.
Formularens datakilde er en tabel (Delkunder). Så skriver du i din kommentar, at du vil have fyldt denne tabel. Men den er jo fyldt!

I dit spørgsmål vil du have tabellens datakilde ændret - Det kan du ikke, idet en tabel jo netop er det sted i databasen, hvor du lagrer alle poster. Du kan derimod i forespørgsler / formularer udtrække poster ved hjælp af kriterier i forespørgsler og filtrering i formularer. Men du kan ikke ændre en tabels datakilde, idet den jo ikke har nogen.

Hvis du i din formular vil filtrere nogle poster, så du kun ser en bestemt kundetype, kan du gøre det ved at søge enfter en kundetype, og derefter filtrere efter det markerede. Så ser du kun den valgte kundetype.

Hvis du vil fylde en ny tabel med en bestemt kundetype, kan du brige en tilføjelsesforespørgsel, hvor du sætter et kriterie ind, der svarer til den kundetype du ønsker tabellen skal fyldes med. Men hvad er dit formål med dette?


Avatar billede nca Juniormester
17. januar 2002 - 22:58 #4
>>>mugs
Jeg prøver lige igen :-)
Jeg har somt sagt en database, der indeholder 4 typer kunder. I øjeblikket bliver hele basen vist i de formularer jed har lavet. En del af formularerne henter deres data fra forespørgsler. Jeg har nu fået til opgave, at kun én type kunder vises ad gangen. Da kunderne kan skifte status, er det vigtigt, at de bliver i samme tabel.
Jeg har prøvet at lave en oprettelsesforespørgsel til Delkunder. Det fungerer så vidt godt nok, jeg kan bare ikke slippe af med advarslen om at Delkunder slettes før forespørgslen køres.
Jeg har også prøvet flg.:
Private Sub Form_Open(Cancel As Integer)
    Dim strNewRecord As String
    strNewRecord = \"SELECT * FROM Kunde WHERE Nummer =Kundenummer\"
    Me.RecordSource = strNewRecord
End Sub
Hvis jeg kunne oprette en global variable som jeg kunne give en værdi fra en knap på en formular og læse fra en anden formular, så kunne det også løse problemet.
Måske er der en helt anden måde at løse problemet på?
Avatar billede mugs Novice
18. januar 2002 - 08:34 #5
Du skriver:
Hvis jeg kunne oprette en global variable som jeg kunne give en værdi fra en knap på en formular og læse fra en anden formular, så kunne det også løse problemet.

Den kode gav jeg dig iaftes kl 21:43.
Jeg mener ikke du skal lave en oprettelsesforespørgsel, for du skal jo ikke oprette nye poster.
Hvis du har flere formularer, der skal filtreres, så de alle viser de samme kunder, skal du oprette et modul, i hvilket du skriver den VBA kode der filtrerer posterne. Denne procedüre skal så kaldes fra hver enkelt formular hvor du i VedAktuel (OnCurrent) event kalder først modulet og derefter procedüren og sender variablen Kuntype til procedüren således:

Private Sub ...
Modulnavn.Procedürenavn Kundetype
End Sub

I modulets procedüre skal du så angive at variablen skal modtages:

Public Sub....(Kundetype)
bla bla
End Sub

Jeg skal til et møde nu, men vil kigge nærmere på det iaften.








18. januar 2002 - 08:46 #6
NCA-> Jeg ville benytte mig af formularens filtre, til at filtrere på de 4 kundetyper.

Øverst ville jeg lave en komboboks eller en gruppeboks, hvor man kunne vælge hvilken kundetype man ønskede at se. Denne boks kaldes i det efterfølgende for \"filterKundetype\".

På boksens EfterOpdatering-hændelse ville jeg lægge følgende kode:

If isNull(Me!filterKundetype) Or Me!filterKundetype=\"\" then
  Me.FilterOn = False
else
  Me.Filter = \"Kundetype = \'\" & Me!filterKundetype & \"\'\"
  Me.Filteron = True
endif

Hvis Kundetype er nummerisk, skal der ikke være \' omkring kriteriet.

/Thomas
Avatar billede nca Juniormester
18. januar 2002 - 09:52 #7
>>>Thomas
Jeg har løst problemet ved at oprette en global variabel i et modul.
Med hjælp (se http://www.eksperten.dk/spm/160227)
kan jeg få fat i denne værdi, som jeg så sætter ind i Formularen Filter i OnOpen Event
18. januar 2002 - 09:58 #8
Ja (næsten)! Du skal nu bare lægge den i formens OnLoad i stedet for OnOpen. Dette skyldes at ved OnOpen er data endnu ikke blevet indlæst, da denne hændelse indtræffer lige før formen åbnes.

I formens OnLoad skriver du så:

Private Sub Form_Load()
  Me.Filter = \"Kundetype = \" & getNCAKundeType
  Me.Filteron = True
End sub
Avatar billede nca Juniormester
18. januar 2002 - 10:48 #9
>>>Thomas
Mange tak for hjælpen og henvisningen. Det hele fungerer fint.
Kan du anbefale noget litteratur, når jeg gerne vil lære lidt om at programmere i Access?
Jeg skal lige bemærke, at jeg er rimelig rutineret i at programmere i Delphi og tidligere har gjort i Visual Basic
18. januar 2002 - 10:54 #10
Biblen over dem alle er:
\"Access Developers Handbook\" af Getz, Litwin og Gilbert. Bogen er udgivet af \"Sybex\". Men lad mig advare: til Access 2000 er der rundt regnet 2500 sider fordelt på 2 bind. Men det er vikelig guf. Og niveau\'et starter ved den avancerede bruger, som, netop som dig, måske har leget med andre programmeringssprog, eller slet ikke har programmeringserfaring.

Ellers er der altid de røde bøger fra forlaget Wrox: \"Beginning Access 2000 VBA\". Stort set alle Wrox\'es bøger er ret gode (og ikke helt så omfattende som ADH, som jeg nævnte først.)

Jeg har ikke den store erfaring med danske bøger....
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