Dansk Access Forum
  Hjælp Hjælp  Søg i forum   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketId ved ny post ???

 Besvar Besvar
Forfatter
jokerper Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 16-06-2014
Status: Offline
Point: 5
Direkte link til dette indlæg Emne: Id ved ny post ???
    Sendt: 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...

 


Til top



Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 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
Til top
jokerper Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 16-06-2014
Status: Offline
Point: 5
Direkte link til dette indlæg Sendt: 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?

 
Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 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
Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 17-06-2014 kl. 03:13
Citat: jokerper 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
Til top
jokerper Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 16-06-2014
Status: Offline
Point: 5
Direkte link til dette indlæg Sendt: 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.
 
 
Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 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å.


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
Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 17-06-2014 kl. 12:21
Citat: jokerper 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
Til top
jokerper Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 16-06-2014
Status: Offline
Point: 5
Direkte link til dette indlæg Sendt: 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
Til top
hkh Se dropdown
Sølv bruger
Sølv bruger


Medlem: 15-08-2012
Status: Offline
Point: 320
Direkte link til dette indlæg Sendt: 18-06-2014 kl. 02:23
Velbekomme - Men du kommer bare igen hvis der er yderligere jeg kan hjælpe med.
Hans
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2013 - 2024 Dansk Access Forum - en del af Excel-regneark.dk