Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Access aussergewöhnlicher Fehler bei Unique-Key...?!? (https://www.delphipraxis.net/58081-access-aussergewoehnlicher-fehler-bei-unique-key.html)

alexo 1. Dez 2005 08:42

Datenbank: Access • Zugriff über: AdoConnection,TAdoQuery,TAdoDataset,TAdoTable...

Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
hallo zusammen!

Hab in meiner Access-DB zwei unique key felder (autowert u. farbcode)..eintragen usw. funktioniert alles. sobald ich die selbe Farbe einfügen möchte kommt - logischerweise :mrgreen: - die access fehlermeldung

'änderung konnte nicht vorgenommen werden da der index, primärschlüssel....usw. doppelt vorkommen würde!'

..auch logisch! Wenn ich dann aber eine Farbe einfügen möchte die noch nicht vorhanden ist(zb grau), kommt wieder diese meldung!! Wenn ich das Programm schließe u. wieder öffne, kann ich diese farbe(in diesem fall grau) einfügen...?!?!?


ich weiß wirklich nicht mehr weiter :wall:


danke schon mal...

marabu 1. Dez 2005 09:45

Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
Hallo alexo,

hast du dieses Verhalten auch direkt im table editor von Access? Ich nicht!

Grüße vom marabu

alexo 1. Dez 2005 11:41

Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
direkt in access hab ich es auch nicht :gruebel:

k.a.

was kann man da machen, bzw. woran liegt dass?!?!?!?

Jelly 1. Dez 2005 11:57

Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
Zitat:

Zitat von alexo
was kann man da machen, bzw. woran liegt dass?!?!?!?

Dann zeig uns mal etwas Code. Über welche Kompos greifst Du auf die Datenbank zu... ADO oder nativ?

alexo 1. Dez 2005 12:18

Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
sieh doch mal in die überschrift ;-)

ado...

das ist meine speicher funktion

Delphi-Quellcode:
procedure TFrmKategorieErstellen.SaveNew(TblKat,TblFarb:TADOTable; EdtName:TEdit);
var
  HoechsteNr: Integer;
begin
    TblKat.Active := True;
    TblFarb.Active := True;
    TblKat.Append;
    TblFarb.Append;
    TblKat.FieldByName('KategorieName').AsString := Edtname.Text;
    TblKat.FieldByName('KategorieArtEinnahme').AsBoolean := rdbEinnahme.Checked;
    //KategorieNr ermitteln
      with Datamodule1.AdoQuery1 do
      begin
        active := false;
        Sql.Clear;
        Sql.Add('Select Max(KategorieNr) As HoechsteNr');
        Sql.Add('from TblKategorie');
        active := true;
        HoechsteNr := FieldByName('HoechsteNr').AsInteger;
      end;
    TblKat.FieldByName('KategorieNr').AsInteger := (HoechsteNr + 1);
    TblFarb.FieldByName('FarbcodeNr').AsInteger := clb.ItemIndex;
    TblFarb.FieldByName('FarbCodeText').AsString := ColorToString(clb.selected);
    TblKat.FieldByName('FarbCode').AsInteger := TblFarb.FieldByName('FarbCodeNr').AsInteger;
    TblKat.Post;
    TblFarb.Post;
end;

Jelly 1. Dez 2005 14:49

Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
Ich denke dein Problem ist, dass bei einem 2. Aufruf, deine 2 Tabellen bereits auf Active stehen. Setz doch mal dein Post in einen try...except Block und mach ein Cancel im Except Teil. So, wie du es hast, schlägt der Post fehl, und bei einem erneuten Aufruf deiner Prozedur bist du immer noch im Append Modus. Besser also, schön sauber deine vorherige Aktion zu canceln.

alexo 1. Dez 2005 14:59

Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
danke!!!!!

funktioniert :thumb:

auf das "canceln" wär ich nie gekommen *gg*..... hab den except block zuvor wieder raus genommen weil er mir ohne cancel logischerweise nicht viel gebracht hat :lol:


danke nochmal... :dp:

alexo 5. Dez 2005 11:27

Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
:(

hab jetzt das ganze WE damit verbracht den fehler zu beheben:

eigentlich hat alles funktioniert(post usw.)

plötzlich führt er den post aber nicht mehr aus :wall: hier der
code:

Delphi-Quellcode:
function TFrmKategorieErstellen.SaveNew(TblKat,TblFarb:TADOTable; EdtName:TEdit):Boolean;
var
  HoechsteNr: Integer;
begin
    TblKat.Active := True;
    TblFarb.Active := True;
    TblKat.Append;
    TblFarb.Append;
    TblKat.FieldByName('KategorieName').AsString := Edtname.Text;
    TblKat.FieldByName('KategorieArtEinnahme').AsBoolean := rdbEinnahme.Checked;
    //KategorieNr ermitteln
      with Datamodule1.AdoQuery1 do
      begin
        active := false;
        Sql.Clear;
        Sql.Add('Select Max(KategorieNr) As HoechsteNr');
        Sql.Add('from TblKategorie');
        active := true;
        HoechsteNr := FieldByName('HoechsteNr').AsInteger;
      end;
    TblKat.FieldByName('KategorieNr').AsInteger := (HoechsteNr + 1);
    TblFarb.FieldByName('FarbcodeNr').AsInteger := clb.ItemIndex;
    TblFarb.FieldByName('FarbCodeText').AsString := ColorToString(clb.selected);
    TblKat.FieldByName('FarbCode').AsInteger := TblFarb.FieldByName('FarbCodeNr').AsInteger;
    try
    TblKat.Post;
    TblFarb.Post;
    Result := True;
    except
    on E: Exception do
    begin
    Application.MessageBox('Farbe bereits in Verwendung!','Warnung',48);
    TblKat.Cancel;
    TblFarb.Cancel;
    Result := False;
    end;
    end;
end;
beim debuggen bleibt er bei der ersten post anweisung stehen...

keine ahnung warum...

marabu 5. Dez 2005 12:27

Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
Hallo Alex,

in der MessageBox solltest du E.Message ausgeben - eventuell erfährst du dann eine ganz andere Fehlerursache, als die vermutete.

Übrigens ist deine Methode zur Ermittlung einer neuen KategorieNr in einer Mehrbenutzerumgebung unsicher.

Grüße vom marabu

alexo 5. Dez 2005 12:39

Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
 
wenn ich die zeile so ändere

Delphi-Quellcode:
Application.MessageBox(E.Message,'Warnung',48);
meldet der compiler: inkompatible typen String u. PAnsiChar


sry hab noch nie einen PAnsiChar umgewandelt :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz