Avatar billede iver25 Nybegynder
19. oktober 2001 - 12:10 Der er 8 kommentarer og
1 løsning

Database problem

Jeg bruger følgende kode til at finde det næste ledige medlemsnummer (til oprettelse af nyt medlem):

  q := TQuery.Create(nil);
  q.DatabaseName := frmdatabase.QueryMedlem.DatabaseName;
  q.close;
  q.SQL.Clear;
  q.SQL.Add(\'SELECT medlemsnummer FROM medlem\');
  q.open;
  q.Last;
  result :=  q.FieldByName(\'medlemsnummer\').AsInteger + 1;
  q.close;
  q.free;


medlemsnummer er et autonummeringsfelt i en access database. Problemet med ovenstående kode er, at jeg det sidste medlemsnummer + 1, i stedet for det næste autonummereingstal. Disse er jo ikke ens hvis fx den sidste række er blevet slettet.
Avatar billede martinlind Nybegynder
19. oktober 2001 - 12:12 #1
Select Max(medlemnummer)+1 as NextNummer from medlem

/Martin
Avatar billede iver25 Nybegynder
19. oktober 2001 - 12:16 #2
Hvis jeg skriver sådan her:

  q := TQuery.Create(nil);
  q.DatabaseName := frmdatabase.QueryMedlem.DatabaseName;
  q.close;
  q.SQL.Clear;
  q.SQL.Add(\'Select Max(medlemnummer)+1 as NextNummer from medlem\');
  q.open;
  q.Last;
  result :=  q.FieldByName(\'medlemsnummer\').AsInteger;
  q.close;
  q.free;

Får jeg en fejl der siger \"too few parameters\"
Avatar billede martinlind Nybegynder
19. oktober 2001 - 12:22 #3
Hvis jeg skriver sådan her:

  q := TQuery.Create(nil);
  q.DatabaseName := frmdatabase.QueryMedlem.DatabaseName;
  q.close;
  q.SQL.Clear;
  q.SQL.Add(\'Select Max(medlemnummer)+1 as NextNummer from medlem\');
  q.open;
  result :=  q.FieldByName(\'Netxtnummer\').AsInteger;
  q.close;
  q.free;
Avatar billede iver25 Nybegynder
19. oktober 2001 - 12:29 #4
Der får jeg samme resultat som før. Det sidste medlemsnummer + 1, og ikke den næste autonummerinsværdi. Medlemmet bliver godt nok oprettet med det rigtige nummer, men det er det forkerte nummer der står i edit-boksen, hvilket jo ikke er særlig professionelt!
Avatar billede martinlind Nybegynder
19. oktober 2001 - 12:38 #5
Ja det skal sku nok passe, men hvis det er et autoinc felt behøver du jo ikke sætte det, det du skal gøre er at du skal poste et medlemskort hvor den kun har sat nummeret og så update den med de data du skal havde der udover, når du har post\'et kan du læse nummereret og skrive det i din Editbox

/Martin
Avatar billede iver25 Nybegynder
19. oktober 2001 - 12:42 #6
Ja, det ved jeg godt. Efter jeg trykker på \"opret\", bliver oplysningerne vist i et DBGrid, med det rigtig medlemsnummer. Men jeg kunne godt tænke mig at vise det rigtig medlemsnummer før jeg trykker på \"Opret\".
Avatar billede martinlind Nybegynder
19. oktober 2001 - 12:48 #7
Så drop autoinc, og brug \"select Max() \", det virker fint og hvis du vil undgå select max, kan du lave en tabel med næstemedlemsnummer du holder vedlige, autoinc er også noget der mest kører på \"små desktop\" baser og ikke på \"rigtige\" sql baser
Avatar billede iver25 Nybegynder
19. oktober 2001 - 12:52 #8
Jeg kommer nok ikke til at lave det om nu, for så har jeg en del tabeller der skal laves om. Men du skal have tak for hjælpen. Jeg har nogle flere småproblemer, så jeg opretter lige et par spørgsmål.
Avatar billede martinlind Nybegynder
19. oktober 2001 - 12:54 #9
Ok og selv tak
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