Id ved ny post ???
Udskrevet fra: Dansk Access Forum
Kategori: Hjælp til Access
Forum navn: Formularer (Forms)
Forum beskrivelse: Spørgsmål vedr. formularer og alt hvad der vedrører disse
Web-adresse: https://www.accessforum.dk/forum_posts.asp?TID=40
Udskrevet den: 21-11-2024 kl. 20:24
Emne: Id ved ny post ???
Besked fra: jokerper
Emne: Id ved ny post ???
Posteringsdato: 16-06-2014 kl. 22:36
Hejsa
Kan godt være det er et tåbeligt spørgsmål, men når jeg ikke ved bedre så prøver jeg alligevel.
Når jeg har en formular fx en ordre tabel eller ny kunde / kontakt mv.
Hvis jeg gerne vil oprette en ny ordre under en specifik kunde, hvor får jeg så id med ved valg af ny post på formularen. Ved hjælp af postvælger knapperne. Ny post.
Så ordren kommer på samme kunde eller skal man selv huske sidste id og indtaste det igen???
Håber det giver mening...
|
Svar:
Besked fra: hkh
Posteringsdato: 16-06-2014 kl. 23:34
Jeg forstår ikke helt hvad dit problem er, men prøver alligevel. Hvis du har en formular, hvor du har dine kundeoplysninger med navn adresse osv.
Når denne kunde afgiver en ordre, skal du have bundet ordren sammen med kunden?
En måde at gøre det på er: i tabellen med ordrene har du et nøglefelt der er autonummer. Der skal også være et felt der hedder kundeid.
I ordreformularens felt kundeid under egenskaben standardværdi henviser du til formularen kunders felt kundeid f.eks =forms!frm_kunder!kundeid feltet kan være skjult.
din ordreformulars kildekode skal så hente alle ordrer hvor kundeid = kundeformularens kundeid "select tab_ordre.* from tab_ordre where ((tab_ordre.kundeid)= " & forms!frm_kunder!kundeid &")) order by (tab_order.orderid);"
hvis det er en selvstændeig formular, skal du have en knap der åbner ordreformularen, hvis det er en underformular skal feltet kundeid i kundeformularen bindes til feltet kundeid i underformularen
Hvis jeg har misforstået dig, må du uddybe lidt mere hvad det er du vil/ønsker.
------------- Hans
|
Besked fra: jokerper
Posteringsdato: 17-06-2014 kl. 01:12
Jamen, jeg er bestemt sikker på du har forstået hvad jeg mener...
Jeg har forsøgt med: [Kunde-id] = Formularer![KundeDB ForespørgselKontaktInfo]![Id]
Hvor [Kunde-id] - er et felt på ordreformularen som åbnes via en knap på [KundeDB ForespørgselKontakt] formularen.
så begge formularer er åbne samtidigt altså Id burde jo være "aktivt"
Men den fejler med -> #Navn?
Så noget må jeg gøre forkert.
Men den lister rigtigt nok ordrene under den rigtige kunde...
For ikke at forvirre så er dette SQL-sætningen som viser ordrene på forespørgslen. ------------------------------------ SELECT KundeDB.Id, KundeDB.Kundenr, KundeDB.Kundenavn, KundeDB.Afdeling, KundeDB.CVR, KundeDB.Adresse, KundeDB.By, KundeDB.Postnr, KundeDB.[Telefon (Primær)], KundeDB.[Telefon (Direkte)], KundeDB.Mobil, KundeDB.Email, KundeDB.Dato, KundeDB.Kontaktperson, KundeDB.WWW, KundeDB.Rabatkode, KundeDB.Notat, OrdreDB.Ordredato, OrdreDB.Afsendelsesdato, OrdreDB.OrdreStatus, OrdreDB.[Betalt den], OrdreDB.Produktnavn, OrdreDB.Forbrug, OrdreDB.Pris, OrdreDB.Sum FROM KundeDB RIGHT JOIN OrdreDB ON KundeDB.Id = OrdreDB.[Kunde-id]; ------------------------------------- Giver det mening?
|
Besked fra: hkh
Posteringsdato: 17-06-2014 kl. 02:42
Du skal benytte forms![KundeDB ForespørgselKontaktInfo]![Id],
Nu skriver du ikke hvilken version af Access du benytter, men med Access 2003 skal du bruge (Forms) i stedet for formularer, men du kan benytte udtryksgeneratoren, den finder du på knappen ude for enden af hændelsesegenskaben, der kan du vælge udtryksgenerator, makro eller kodegenerator, der findes også en knap der åbner udtryksgeneratoren, der klikker du på formularer - åbne formularer, vælger formularen og derefter feltet, klik på indsæt og afslut med ok
------------- Hans
|
Besked fra: hkh
Posteringsdato: 17-06-2014 kl. 03:13
jokerper skrev:
Jamen, jeg er bestemt sikker på du har forstået hvad jeg mener... ------------------------------------ SELECT KundeDB.Id, KundeDB.Kundenr, KundeDB.Kundenavn, KundeDB.Afdeling, KundeDB.CVR, KundeDB.Adresse, KundeDB.By, KundeDB.Postnr, KundeDB.[Telefon (Primær)], KundeDB.[Telefon (Direkte)], KundeDB.Mobil, KundeDB.Email, KundeDB.Dato, KundeDB.Kontaktperson, KundeDB.WWW, KundeDB.Rabatkode, KundeDB.Notat, OrdreDB.Ordredato, OrdreDB.Afsendelsesdato, OrdreDB.OrdreStatus, OrdreDB.[Betalt den], OrdreDB.Produktnavn, OrdreDB.Forbrug, OrdreDB.Pris, OrdreDB.Sum FROM KundeDB RIGHT JOIN OrdreDB ON KundeDB.Id = OrdreDB.[Kunde-id]; ------------------------------------- Giver det mening?
| Nej ikke rigtigt, du har både data for kunde og ordrer i den forespørgsel, det vil selvfølgelig virke, men det belaster pc. Det er ikke kundedb.Id der skal være lig med ordredb.[kunde-id] men omvendt. Det betyder nok ikke noget funktionelt, men det er mere korrekt hvis der om et halvt år skal rettes, så kan man pludselig ikke huske så godt.
din forespørgsel til ordreformularen kunne ligne dette: SELECT ordredb.* FROM ordredb right JOIN kundedb ON ordredb.[kunde-id] = kundedb.id;
brug af * har den fordel, at hvis du senere tilføjer et eller flere felter til tabellen kommer de automatisk med i forespørgslen. Det kræver lidt mere planlægning ved tabeldesign hvis der skal benyttes opslag. Men der kan man nøjes med de felter man skal bruge.
du har ikke noget at bruge kundeoplysningerne til i ordreformularen, derudover afhænger det lidt af størrelsen på din kundedb, der ville jeg nok have en seperat tabel til postnumrene, så bynavnet blev indsat automatisk når postnr. blev indtastet.
I Access 2003 er der en skabelon til oprettelse af en kunde-ordre database der kan det du her forsøger at lave. Det er ikke sikkert den opfylder alle dine behov, men den kan være et godt udgangspunkt, at arbejde videre fra.
Der er dog efter min mening en designfejl, jeg mener at tabellerne ordre og ordreoplysninger burde være byttet, men funktionen fejler ikke noget.
------------- Hans
|
Besked fra: jokerper
Posteringsdato: 17-06-2014 kl. 10:22
Okay jeg prøver lige at forklare noget baggrund... Access 2010. Jeg har tidligere forsøgt med flere tabeller og relationer som gik galt, derfor ville jeg forsøge med 2 tabeller for bedre at kunne styre det og se hvad der sker. Jeg har derfor en kundeDB tabel og en OrdreDB tabel Relation kundeDB (Id) Primær OrdreDB (Ordre-id) Primær OrdreDB (Kunde-id) Fremmednøgle -> KundeDB (Kunde-id) Men det som fejler er den ikke sætter KundeDB (Id) Ind i OrdreDB (kunde-Id) Jeg har forsøgt at læse og se videoer om det men jeg syntes kun det er opbygningen og ikke ligesom brugen/funktionerne mellem formularerne. Men jeg har måske heller ikke helt forstået brugen af formularerne/forespørgslerne. Da jeg selv tror de kan bruges på forskellige måder og måske give det samme resultat alligevel. Er der evt. nogle danske bøger som kan anbefales at læse i vedr. Access 2010. Håber du stadigvæk har tålmodighed, til at hjælpe mig.
|
Besked fra: hkh
Posteringsdato: 17-06-2014 kl. 11:37
Alt efter office 2003 er jeg uvenner med, jeg kan simpelthen ikke enes med båndet, alt er flyttet, intet ligger hvor det lå.
uploads/7/Ordreindtastning1.zip" rel="nofollow - Ordreindtastning1.zip
Prøv at kikke på denne, denne db gør i store træk gør det du søger. Der er en del kode som man kan lære af.
------------- Hans
|
Besked fra: hkh
Posteringsdato: 17-06-2014 kl. 12:21
jokerper skrev:
Okay jeg prøver lige at forklare noget baggrund... Access 2010. Jeg har tidligere forsøgt med flere tabeller og relationer som gik galt, derfor ville jeg forsøge med 2 tabeller for bedre at kunne styre det og se hvad der sker. Jeg har derfor en kundeDB tabel og en OrdreDB tabel Relation kundeDB (Id) Primær OrdreDB (Ordre-id) Primær OrdreDB (Kunde-id) Fremmednøgle -> KundeDB (Kunde-id) Men det som fejler er den ikke sætter KundeDB (Id) Ind i OrdreDB (kunde-Id) Jeg har forsøgt at læse og se videoer om det men jeg syntes kun det er opbygningen og ikke ligesom brugen/funktionerne mellem formularerne. Men jeg har måske heller ikke helt forstået brugen af formularerne/forespørgslerne. Da jeg selv tror de kan bruges på forskellige måder og måske give det samme resultat alligevel. Er der evt. nogle danske bøger som kan anbefales at læse i vedr. Access 2010. Håber du stadigvæk har tålmodighed, til at hjælpe mig. |
Som udgangspunkt kan du ikke få Access til at oprette nye poster ved hjælp af relationer, men relationer kan bruges til at opdatere eller slette poster der hører sammen, feks hvis du sletter en kunde fra databasen kan Access slette alle ordre fra denne kunde så der ikke er ordrer i databasen uden kunde.
Når du opretter en ny ordre, skal du sørge for, at du opretter relationen til til kundetabellen.
Det kan gøres ved hjælp af egenskab for feltet kunde-id i ordreformularen (standardværdi), eller ordreformularens hændelse før indsættelse og kodegeneratoren.
så vil du få en kode der ligner denne.
Private Sub Form_BeforeInsert(Cancel As Integer)
End Sub
Private Sub Form_BeforeInsert(Cancel As Integer) [me]![kunde-id] = [forms]![kundeformularen]![kunde-id] End Sub
Man kan også oprette kundeformularen uden kildekode og have en knap der indsætter posten i ordretabellen DEt skal gøre ved hjælp af hændelsen vedklik
Private Sub Knap_GemOrdrer_Click() Dim GemOrdre as Recordset 'Forbered dit datasæt
On Error GoTo Fejl_Knap_GemOrdrer 'Hvis der opstår en fejl, hop til fejlrutine Set GemOrdre = CurrentDB().OpenRecordset("ordreDB") 'Åben Ordretabellen GemOrdre.AddNew 'Indsæt en ny post GemOrdre!{Kunde-id]=[forms]![kundeformularen]![kunde-id] Herfølger dine øvrige oplysninger GemOrdre!Produkt= [Me]![Produktnavn]
GemOrdre.Update 'Gem oplysningerne
Afslut: 'Luk ordretabellen og ryd op If GemOrdre <> Nothing Then GemOrdre.Close 'Hvis GemOrdre er åben, skal den lukkes, hvis den lukkes uden at kontrollere, resulterer det i en fejl set GemOrdre=Nothing Exit Sub
'Fejlrutine Fejl_Knap_GemOrdrer: MsgBox Err.Description 'Vis fejlbesked Resume Afslut 'Fortsæt efter fejl, hop til afslut End Sub
PS! Det kan godt være at, din version skal bruge [Formularer] og ikke [Forms], da jeg tror det er en fejl i oversættelsen, der ikke er blevet oversat
------------- Hans
|
Besked fra: jokerper
Posteringsdato: 17-06-2014 kl. 13:28
Tusind tak, Hans Du har været en super hjælp for mig. Det har helt klart givet mig klarhed over nogle ting, så nu vil jeg lige prøve at bruge lidt tid på det. Du har givet mig nogle super brugbare oplysninger. /Per
|
Besked fra: hkh
Posteringsdato: 18-06-2014 kl. 02:23
Velbekomme - Men du kommer bare igen hvis der er yderligere jeg kan hjælpe med.
------------- Hans
|
|