Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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

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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...