Autor |
Beitrag |
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Fr 08.06.07 14:52
Ich kämpfe seit Tagen in der Firma, in welcher ich arbeite, mit einem seltsamen Fehler.
Wenn ich auf eine LEERE Tabelle mit Primary Key ein Insert machen will, bekomme ich den Fehler, dass eine Verleztung des primary keys aufgetreten ist und der insert nicht ausgeführt werden kann. In der Konsole klappt es. Als Komponenten benutze ich SQLDirect 5.x
Irgendwelche Ideen?
Oder andere Komponenten im Sinn ?
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 08.06.07 15:14
Wie fügst Du diesen neuen Datensat ein? Per SQL? Ich bin nicht so ganz firm mit SQLServer (bisher), muss bei einem Primary Key dann nicht eine Art Trigger laufen, wenn Du sie über die Datenbank vergeben willst?
|
|
HelgeLange 
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Fr 08.06.07 17:28
naja, es ist eher so, dass ich per SQL den Primary mit vergebe (liegt daran, dass die Daten aus XML importiert werden und die die Keys schon haben).
Die Sache ist dann die, dass ich diese Verletzung auch bekomme, wenn ich den 1. Datensatz in die Tabelle einfüge, die frisch erstellt wurde.
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 08.06.07 17:44
Dann zeig mal das SQL-Statement, das Tabellen-DDF und ein wenig Code. Das muss dann aber jemand anders weiter übernehmen, weil ich jetzt los muss und erst Sonntag wiederkomme 
|
|
HelgeLange 
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Fr 08.06.07 19:37
Naja, wie gesagt, der INSERT-Befehl funktioniert in der Konsole bei der Tabelle. Mit den gleichen Daten (Copy-Paste vom Delphi-Variable-Watch), aber im Programm bringt er den Fehler, dass der primary Key verletzt wird, obwohl es
a) in der Konsole geht mit den Daten
b) die Tabelle eh leer ist

_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 09.06.07 11:35
Hab mit dem SQLServer bisher noch nicht gearbeitet; daher nur ne Vermutung):
Versuch mal eine Aufsplittung in zwei Befehle, indem Du im Insert für den PK NULL übergibst und dann über ein UPDATE den PK auf den gewünschten Wert setzt. Den AutoInc-Wert (sofern verwendet) sollstest Du über INSERT_ID (oder wie das hieß) rausbekommen.
Ferner: Hast Du auf der Tabelle ForeignKeys? Wenn ja: Existieren die dafür benötigten Daten bereits? (ggf. mit Defered Insert arbeiten???)
HTH.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 09.06.07 12:52
Schau dir mal im Profiler vom SQL Server an wie das SQL aussieht das wirklich an den Server gesendet wird.
Vielleicht gibt dir das einen Anhaltspunkt was schiefgeht.
Warum benutzt du eine Third Party Bibliothek für den Zugriff? Warum nicht einfach ADO(ist die nativste Möglichkeit für den SQL Server)?
|
|
HelgeLange 
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Sa 09.06.07 14:14
PK darf nicht NULL sein (sind 3 Felder zusammen, die den PK ergeben), sonst finden wir die ja ned wieder. Wir reden hier auch von einer Tabelle mit mehreren hunderttausend Datensätzen (im live-system).
ADO nutze ich nicht, weil ich mich an die Vorgaben des Arbeitgebers halten muss und am bestehenden System entwickeln. Wenn es garnicht geht, kann ich immernoch wechseln. Aber zur Zeit muss ich es mit den 3rd party probieren. Nur leider haben wir dafür keinen Source 
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
HelgeLange 
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Mo 11.06.07 16:39
Also ich habe jetzt testweise mal auf die Komponenten von CRLab (SDAC) umgestellt und mit denen kommt der Fehler nicht. Also nehme ich mal an, es liegt einfach an den doofen SQL Direct Komponenten.
Ausserdem werden wir die CRLab Komps kaufen, denn zusätzlich zum Fakt, dass sie offensichtlich funktionieren, sind sie ausserdem VIEL schneller. Ein Programm, welches mit den SQLDirect komps ca. 30 min zur Ausführung brauchte, braucht jetzt 2 Minuten. Selber Code, nur Zugriffskomps getauscht...
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
|