![]() |
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... |
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 |
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?!?!?!? |
Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
Zitat:
|
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; |
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.
|
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: |
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:
beim debuggen bleibt er bei der ersten post anweisung stehen...
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; keine ahnung warum... |
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 |
Re: Access aussergewöhnlicher Fehler bei Unique-Key...?!?
wenn ich die zeile so ändere
Delphi-Quellcode:
meldet der compiler: inkompatible typen String u. PAnsiChar
Application.MessageBox(E.Message,'Warnung',48);
sry hab noch nie einen PAnsiChar umgewandelt :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
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