HDSoftware Skrevet 22. mars 2007 Del Skrevet 22. mars 2007 Heisan folkens Tenk deg en ordre/kunde database. Tenk det også at ordreregisteret er fremme. Bruker trykker på "Ny ordre" knappen. Ny blank ordre kommer frem. Tenk deg videre at bruker trykker "Ny kunde" knapp Ok. Situasjonen er dermed at vi har en Ny ordre/Ny kunde situasjon Bak "ny kunde" knappen har jeg noe slikt: if frmKunder.ShowDialog() = Windows.Forms.DialogResult.OK me.KundeTableAdapter.Insert(frmKunder.Kundenavn.text,,,,,,etc) End if Dermed har vi lagt inn den nye kunden, men hvordan får jeg tak i primær nøkkelen til den nye kunden? Jeg må jo ha den for å legge den til i ordrehodet. Takker for all hjelp Ole Lenke til kommentar
aadnk Skrevet 23. mars 2007 Del Skrevet 23. mars 2007 Hm, jeg kan ikke si sikkert om dette er den beste løsningen, men det løste nå i hvert fall et liknende problem for meg: Public Function GetLastID(ByVal Connection As OleDbConnection) As Integer Dim oLast As New OleDbCommand("SELECT @@IDENTITY", Connection) ' Use Access' function for selecting the last added record to retrieve its ID Return Integer.Parse(oLast.ExecuteScalar) End Function Dette forutsetter at du benytter Microsoft Access. Lenke til kommentar
Harald Staff Skrevet 23. mars 2007 Del Skrevet 23. mars 2007 Jeg bruker ikke .net mye, så dette blir et mer skjematisk svar. Jeg ville brukt et kunde-objekt med properties ID (=primærnøkkel), navn, adresse, telefon og alt det der. Kunden har bl.a. metoden "SaveMe", hvis ID er 0 så er kunden ny og tilordnes en ny ID som den nå husker. ID >0 er en endring; nytt telefonnummer eller noe sånt. Altså Hvis GjeldendeKunde har ID 0 så registrer ny kunde. GjeldendeOrdre.KundeID = GjeldendeKunde.ID (som nå er 144 eller whatever). Dersom du ikke programmerer dette objektorientert og heller ikke ønsker å begynne, sett "Save Kunde" som en funksjon som returnerer den nye primærnøkkelen ved lagring. HTH. Beste hilsen Harald Lenke til kommentar
HDSoftware Skrevet 23. mars 2007 Forfatter Del Skrevet 23. mars 2007 Hm, jeg kan ikke si sikkert om dette er den beste løsningen, men det løste nå i hvert fall et liknende problem for meg: Public Function GetLastID(ByVal Connection As OleDbConnection) As Integer Dim oLast As New OleDbCommand("SELECT @@IDENTITY", Connection) ' Use Access' function for selecting the last added record to retrieve its ID Return Integer.Parse(oLast.ExecuteScalar) End Function Dette forutsetter at du benytter Microsoft Access. 8216906[/snapback] Det er nok ikke riktig at dertte krever Access. Derimot er det slik at dette ble støttet i Access versjon 2000+ eller noe slik. Det har hele tiden vert slik med SQL. Men takk for tipset. Hadde egentlig håpet det fantes en annen mulighet en å bruke SQL SELECT statementet. Men jeg må jo bare spørre: Alle har jo behov for å lage slik relasjon, enten det er kunde/ordre/Faktura eller annen form for relasjon. Lite trolig det finnes database orienterte programmer som ikke har behov for relasjon. Hvordan gjør dere dette i VB da? I Clarion fantes det ikke noe som heter SEED value og slikt da Clarion stort sett jobber på egne data filer og ingen database. Derfor måtte jeg programmere dette selv ved å finne høyeste verdi som hittil er brukt og selv legge dette inn i record settet. Men siden en SQL server har dette innebygget og at en relasjon på SQL siden definitivt benytter Primary key så må det da være mulig å lage et program som benytter dette. Jeg får forske videre... Takker for svar Ole Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå