17. januar 2002 - 21:06Der 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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
>>>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.
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?
>>>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å?
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.
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 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
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
>>>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
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....
Synes godt om
Ny brugerNybegynder
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.