Avatar billede vint Nybegynder
19. januar 2007 - 12:02 Der er 3 kommentarer og
2 løsninger

Tjek om post eksisterer i DB inden postning

Hej.

Jeg har i mit program forbindelse til en database (TTable, TDatasource osv.

Jeg har en TDBlookupListbox og en TDBEdit, hvor meningen er, at indholdet af databasens ID-felt (består af 2 bogstaver) vises deri.

I TDBEdit-boksen skal jeg kunne skrive et nyt ID, som ved klik på "tilføj" skal tilføjes databasen - men KUN hvis den ikke findes i forvejen.

Det er den krølle, jeg har problemer med, altså at det kun skal tilføjes, hvis værdien ikke findes i forvejen.
Avatar billede kroning Nybegynder
19. januar 2007 - 14:01 #1
if Table.Locate('ID',Edit.Text,[loCaseInsensitive]) then
      ShowMessage('ID Findes')
  else
      Tilføj DB
Avatar billede hrc Mester
21. januar 2007 - 01:21 #2
Hvis ID er en primærnøgle, så kan du jo bare prøve at indsætte den og så ignorere en eventuel exception vha. en try-except blok. Er det ikke den normale tilgang? En Locate ville ikke være sikker i et flerbruger miljø idet andre kan have indsat ID uden at din TTable vidste noget om det. Jeg ser ikke anden (sikker) løsning end den jeg foreslår.

Du burde også skippe TTable for det er en forkert komponent at bruge. En TTable bruger meget mere hukommelse end en TQuery, idet indekser og den slags også føres med når den åbnes.

Desuden er det min mening altid at bruge SQL frem for TTable. Eventuelt kopiere data over i et DataSet af en eller anden art. Jeg syntes der var en TCustomDataSet i min palette - men jeg kan sguette finde den.
Avatar billede vint Nybegynder
21. januar 2007 - 13:16 #3
Tak til begge, vil i smide svar.
Avatar billede hrc Mester
21. januar 2007 - 13:23 #4
Et svar. Hvis du prøver mit forslag, så kan du køre programmet og se hvad exception der bliver raised - evt hvilken fejlcode der kastes.

En Exception har nemlig en ErrorCode (hedder måske noget andet), som er koden for "duplicate key"

Altså noget i denne retning:

  try
    Table.Insert;
    Table.FieldByName('ID').AsString := 'HRC';
    Table.Post;
  except
    on e: EDatabaseException do
    begin
      if e.ErrorNo <> 12345 then // not duplicate key
        raise;
    end;
  end;
Avatar billede kroning Nybegynder
21. januar 2007 - 16:52 #5
k
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