Avatar billede fhansen Praktikant
22. november 2006 - 02:03 Der er 10 kommentarer og
1 løsning

Value af Autoinc flet efter insert af ny record

Hejsa

Jeg har en Client table hvor min primær nøgle er et AutoInc felt.
Mit problem er at jeg har brug for at vide hvilken værdi feltet blev tildelt efter at insert af ny record.


procedure TMainFrm.AcceptBtnClick(Sender: TObject);
Var BookPost :TBookmark;
begin
    Case EdType  of
    1: begin Data.UpdateClient.SQL.Text :=
          'insert into Kunder.db '+
          '(Navn, Adresse, Postnummer, City) '+
          'values '+
          '(:CNavn, :CAdresse, :CPostnummer, :CCity)';
      end;
    2: begin Data.UpdateClient.SQL.Text :=
            'update Kunder.db '+
            'set '+
            'Navn = :CNavn,Adresse = :CAdresse,
            Postnummer = :CPostnummer,
            City= :CCity                                   
            'where '+
            'Nummer = :CNummer';
      end;
    end;
      Data.UpdateClient.Params[0].Value := EdCliname.Text;
      Data.UpdateClient.Params[1].Value := EdCliAdr.Text;
      Data.UpdateClient.Params[2].Value := EdCliPost.Text;
      Data.UpdateClient.Params[3].Value := EdCliCity.Text;
          if EdType = 2 Then Data.UpdateClient.Params[4].Value := Data.Client.FieldByName('Nummer').AsInteger;
    Data.UpdateClient.ExecSQL;

Der var ikke problem med at få værdien da der blev brugt TTable, men er det meningen at hele skal køre på SQL, og det er jeg langt fra stræk i.

Håber nogen kan hjælpe
Avatar billede kroning Nybegynder
22. november 2006 - 08:04 #1
Du bruger SELECT LAST_INSERT_ID() til dette hvis det er MySQL.
Avatar billede fhansen Praktikant
22. november 2006 - 10:08 #2
Det er meningen at det senere skal laves om til enten MySql eller MsSql, men lige nu er det  paradox tabeller
Avatar billede martinlind Nybegynder
22. november 2006 - 12:28 #3
AutoInc er forskelligt implementeret afhængig af hvilken SQL server du bruger, så det ville nok være en god ide at lave din kode så du ikke er afhængig at at kende værdien efter insert, alternativt kan du lave :

select max(<AutiIncFeltnavn>) from TableName
Avatar billede kroning Nybegynder
22. november 2006 - 15:54 #4
select max(<AutiIncFeltnavn>) from TableName vil i teorien jo kunne give et forkert resultat.
Avatar billede fhansen Praktikant
22. november 2006 - 17:26 #5
Indtil jeg skriver om til MySql, har jeg tænkt mig at gøre således, det virker, men det er måske ikke kønt og særlig stablit.

If EdType = 1 then begin
      Data.UpdateClient.SQL.Text := 'Select Nummer, Navn From Kunder.db';
      Data.UpDateClient.Open;
      Data.UpdateClient.FindLast;
      ShowMessage(Data.UpdateClient.FieldByName('Navn').AsString);
      LoadVenteList(Data.UpdateClient.FieldByName('Nummer').AsInteger,Data.UpdateClient.FieldByName('Navn').AsString);
    end;
Avatar billede kroning Nybegynder
22. november 2006 - 17:48 #6
Hvilken DB bruger du nu?
Avatar billede fhansen Praktikant
22. november 2006 - 19:02 #7
Jeg vil fortsætte med at bruge Paradoxen, indtil alle nye functioner er bygget ind i programmet, derefter vil jeg skrive om til MySql, jeg er bange for at lave begge ændringer på en gang bliver for meget for mig
Avatar billede kroning Nybegynder
22. november 2006 - 19:20 #8
ok, men så længe dit program kun benyttes at en enkelt bruger ad gangen så burde det vel også virke.
Avatar billede martinlind Nybegynder
22. november 2006 - 21:01 #9
og ja select max kan i teorien være forkert, men..... hvor ofte, man kan evt. ha' en nextID tabel som man tager næste id fra
Avatar billede fhansen Praktikant
10. april 2007 - 01:26 #10
Lig meget gerne et svar.
Avatar billede martinlind Nybegynder
10. april 2007 - 10:40 #11
SQL er nogle gange "lidt tungt" at bruge, men har langt flere fordele :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester