Avatar billede fileto Seniormester
12. februar 2004 - 17:04 Der er 16 kommentarer og
2 løsninger

Hvordan finder man en records unique id efter update.

Hej jeg vil gerne vide hvordan man får fat i id som automatisk bliver genneret i access lige efter man har opdateret i basen.

I almindelig asp ser det sådan ud :

objRS.Update ' generere ny id i felt definere med autonum
ID = objRS("ID") ' idet ligger nu i recordsættet

Når man har sagt update dannes en unik nøgle vha. autonumerering
og denne havner i recordsettet efter en update så man kan bruge det i sit script.

Hvordan gøres dette i Asp.net ?
Avatar billede burningice Nybegynder
12. februar 2004 - 17:35 #1
den bedste måde er at benytte sql-serverens egen indbyggede metode, og det gælder også i asp.

Efter at du har indsat en ny record executer du en ny query på den SAMME command FØR du lukker den.

i access/mssql er det "SELECT @@Identity"
i mysql er det vist "SELECT_LAST_INSERT_ID"

derefter kan du hente dem ud som et normalt felt, f.eks. med ExecuteScalar()
Avatar billede arne_v Ekspert
12. februar 2004 - 19:10 #2
select last_insert_id()

det er en funktion i MySQL
Avatar billede repsak Nybegynder
12. februar 2004 - 22:51 #3
jeg har aldrig funder ud af hvordan man kalder sådan en funktion i asp.net.
I php er det jo meget let f.eks. $test = mysql_affected_rows();
Avatar billede arne_v Ekspert
12. februar 2004 - 22:58 #4
xxxCommand cmd = new xxxCommand("SELECT LAST_INSERT_ID()")
int id = (Int32)cmd.ExecuteScalar();

ville være mit gæt (jeg har aldrig prøvet).
Avatar billede burningice Nybegynder
12. februar 2004 - 23:12 #5
myCommand.CommandText = "SLECT last_insert_id()";
int id = (int)myCommand.ExecuteScalar();

så svært er det nu heller ikke
Avatar billede fileto Seniormester
13. februar 2004 - 05:52 #6
Tak skal i have, jeg tygger lige på det.
Avatar billede fileto Seniormester
13. februar 2004 - 13:43 #7
Nå jeg endte med at sige :
        MovieDb.MdbPassSqlsCommand("SELECT MAX(id) AS newest FROM tabel");
        OleDbDataReader reader;
        reader = MovieDb.MovieDbCommand.ExecuteReader();
        reader.Read();
        Testlabel.Text = "'" + reader.GetValue(0) + "'";

Så fik jeg det til at spille, men er det ikke rigtigt at jeg bør holde connection åben fra det øjeblik jeg danne recorden og til jeg er ferdig med at finde den sidste record. Jeg mener hvis der opdateres samtidig skulle den ene nødigt få den andens id. Jeg går ud fra at når en bruger har connection åben er der ingen andre der kan opdatere eller hyr?

Der er point til jer alle 3 da jeres svar har inspireret mig til at finde løsningen.
Så post lige et svar og tak for hjælpen.
Avatar billede burningice Nybegynder
13. februar 2004 - 13:56 #8
fileto>> pas på med det der... du risikerer at en anden når at indsætte en record FØR at du henter det højeste id ud, og så bryder kæden.

for det andet, så er der absolut ingen grund til at åbne en hel reader for at få fat i et enkelt felt. Brug hellere ExecuteScalar()
Avatar billede arne_v Ekspert
13. februar 2004 - 14:03 #9
svar
Avatar billede arne_v Ekspert
13. februar 2004 - 14:04 #10
Og jeg er helt enig med cyberfessor: SELECT MAX(id) er en tikkende bombe
Avatar billede repsak Nybegynder
14. februar 2004 - 00:11 #11
jeg skal ikke have points her :-)
(mere hvis jeg var en af 'jer alle 3')
Avatar billede burningice Nybegynder
14. februar 2004 - 00:21 #12
svar
Avatar billede fileto Seniormester
14. februar 2004 - 11:13 #13
Hej
Når jeg bruger

OleDbCommand("SELECT LAST_INSERT_ID()");
int Id = (int) OleDbCommand.ExecuteScalar();

Får jeg følgende fejl :
System.Data.OleDb.OleDbException: Der er en ikke-defineret funktion "LAST_INSERT_ID" i udtrykket

Hvad gør jeg galt ?
Avatar billede arne_v Ekspert
14. februar 2004 - 11:17 #14
Bruger du MySQL ?
Avatar billede fileto Seniormester
14. februar 2004 - 11:22 #15
Nej jeg bruger ACCESS 2000.
Avatar billede arne_v Ekspert
14. februar 2004 - 11:28 #16
select last_insert_id()

er til MySQL.

select @@identity

er til SQLServer.

Men som jeg fortså cyberfessor, så skulle den også kunne bruge til Access.

Værd at prøve !
Avatar billede arne_v Ekspert
14. februar 2004 - 11:33 #17
Jep.

Jeg fandt følgende hos Microsoft:

However, Microsoft Access 2000 or later does support the @@IDENTITY property to retrieve the value of an Autonumber field after an INSERT.

(selvom jeg ikke kan finde noget i online help i min Access 2000)
Avatar billede fileto Seniormester
14. februar 2004 - 11:45 #18
Jeps, nu spiller det :-)
Mange tak for hjælpen
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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