AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi KeyViolation mit Access bei DELETE
Thema durchsuchen
Ansicht
Themen-Optionen

KeyViolation mit Access bei DELETE

Ein Thema von st2000 · begonnen am 30. Okt 2003 · letzter Beitrag vom 30. Okt 2003
Antwort Antwort
st2000

Registriert seit: 23. Apr 2003
Ort: Hamburg
52 Beiträge
 
Delphi 5 Enterprise
 
#1

KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 14:33
Hallo, weiss jemand, was man tun muss, damit eine Access2000-DB einen Delete akzeptiert, die mit einer TTable-Komponente angesprochen wird ?

Erhalte immer die Fehlermeldung "Key Violation. Löschen aus angegebenen Tabellen nicht möglich"; mit dem Zusatz ODBC ACCESS DRIVER.

Die unterlegte Tabelle ist eigentlich eine Access-Query. Wenn ich aber direkt in die DB gehe und dort lösche, dann gehts. Warum nicht via Delphi ?

Liegts an der BDE? Geht das nur, wenn ich ADO-Komponenten nehme ??

Gruss,
Stefan
Stefan
Keine Softwarepatente ! Die Polen = wahre Freiheitskämpfer !!! Gerade noch rechtzeitig Mitglied geworden, um die Notbremse zu ziehen. Year !!!
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 15:58
Zitat von st2000:
Die unterlegte Tabelle ist eigentlich eine Access-Query.
Du kannst mit einem TTable Objekt keine Query öffnen. Also was meinst du, wenn du sagst die Tabelle sei eigentlich eine Query und du benutzt ein TTable Objekt?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
st2000

Registriert seit: 23. Apr 2003
Ort: Hamburg
52 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 16:16
Damit meine ich, daß ich in Delphi zwar ein TTABLE-Komponente benutze, die aber als Database auf eine MS-Access2000-DB zeigt, und dort auf eine Query (also Abfrage, als TTable.Tablename).
Diese Query joint 4 Tabellen.

Damit möchte ich ein Formular befüllen, welche 1 dieser Tabellen bearbeiten soll (also new,delete,edit), und dazu Felder aus den anderen 3 Tabellen anzeigen soll (welche die Bezeichnungen von FK-Feldern sind, also z.B. statt FK_Artikel 4711 -> Artikel 'Wasserhahn 1" ').

Also eine ganz normale relationale Datenbank mit einem Delphi5-Frontend.

Hab aber auch schon das Delete mit dem BDE-Admin versucht, ist das gleiche.

Kanns sein, daß man Access-Abfragen nur mit einer TADOQuery schreibend bearbeiten kann ?

Gruss,
Stefan
Stefan
Keine Softwarepatente ! Die Polen = wahre Freiheitskämpfer !!! Gerade noch rechtzeitig Mitglied geworden, um die Notbremse zu ziehen. Year !!!
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#4

Re: KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 16:37
Hi,

ich würde zwar die Ado-komponenten, um genau zu sein TBetterAdoDataset vorziehen, aber Dein Problem liegt wohl woanders:

Queries aus mehreren Tabellen sind laut SQL Standard (ich meine auch in den neuesten sei das noch so) nicht editierbar. Wahrscheinlich passiert dann folgendes: Nach außen verhält sich Access hier dem Standard gemäß, weist Versuche zu ändern zurück, intern implmentiert es aber einen Mechanismus, diese rigorose Einschränkung wenn möglich zu umgehen.

Von der Delphiseite muß sich der Entwickler dann selbst darum kümmern, die Ursache hierfür liegt aber auf der Access-Seite, nicht bei Delphi.

Grüsse
Woki
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#5

Re: KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 16:57
ach so:

Du könntest zuerst auf eine TQuery umsteigen und Requestlive auf true stellen, und wenn das nicht reicht, dann schau Dir auch mal die Komponente UpdateSQL an.
  Mit Zitat antworten Zitat
st2000

Registriert seit: 23. Apr 2003
Ort: Hamburg
52 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 17:26
Hallo,

vielen Dank für Eure Tips, beruhigt mich bekloppterweise sogar, das es echt nicht geht....

Diese TUpdateSQL-Komponente ist also auch für Access anwendbar ? Nicht nur für richtige SQL-Server ?

Mit TQuery hab ichs schon versucht, ist der gleiche Ärger....

Das erstaunliche ist, das es in Access direkt ja geht. Wenn ich dort in dieselbe Query reingehe und lösche, dann ist der Datensatz (also der Tupel) definitiv weg.

Gibts evtl. irgendeinen Borland-Access-ODBC-Treiber, der diese Funktion durchschleift ? Mich wundert eh, das der Orig. MS-Treiber es nicht macht...

Was ist denn eigentlich diese TBETTERADOQuery ? Better? Ist das ein Zukauf-Produkt ? Oder heisst es so in Delphi-Versionen >5 ?

Gruss,
Stefan
Stefan
Keine Softwarepatente ! Die Polen = wahre Freiheitskämpfer !!! Gerade noch rechtzeitig Mitglied geworden, um die Notbremse zu ziehen. Year !!!
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#7

Re: KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 17:44
Zitat von st2000:
Gibts evtl. irgendeinen Borland-Access-ODBC-Treiber, der diese Funktion durchschleift ? Mich wundert eh, das der Orig. MS-Treiber es nicht macht...
Von Borland gibt es garantiert keinen. Und das der M$-Treiber es nicht macht, ist eigentlich verständlich. Es gibt nun einmal Standards und die sind hier eben eingehalten. Wenn dann ACCESS als das Prgramm dies macht, dann ist es eben ein zusätzliches Feature.
Und TBetterADODataset ist 'ne Freeware-Komponente. Die gibt es hier: http://web.orbitel.bg/vassil/
  Mit Zitat antworten Zitat
st2000

Registriert seit: 23. Apr 2003
Ort: Hamburg
52 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 18:10
Dann muss ich damit ja irgendwie leben ...

Aber, wenn es Standard ist, das man eine Query nicht zum löschen nehmen kann, wie macht man es dann normalerweise ?

Jede normale DB-Anwendung hat doch immer irgendwo Formulare, in denen Master-Client-Daten zusammengefasst sind.
Und da kann man doch auch einerseits die Bezeichnungen anstelle von ForeignKeys sehen (also nicht bloss die eine Tabelle dahinter, die die Daten der 1-Seite enthält), und andererseits kann man auch löschen (typisches Bsp: Literatur-DB-Anwendungen wie LiteRat oder Liman; da kann man Textausschnitte verwalten, mit Angaben zum Buch, zur Bibliothek, wo das Buch steht, etc.; alles erkennbar M-C-Daten).

Als ich zuerst versuchte, mein Form mit einer Mastertbl und einer Clienttbl aufzubauen, ging zwar das Löschen, dafür aber nicht das Insert (Key Violation, obwohl mit denselben Keys die Anzeige ja auch funktionierte). Das kanns ja dann auch nicht sein...

Bleibt dann also nur der Weg über TUpdateSQL ? Oder in anderen Sprachen durch manuelles programmieren der in TUpdateSQL enthaltenen Funktionalität ?

Irgendwie fehlt mir jetzt der Ansatz, wie ich es künfig professionell machen kann...
Auch in Ebners Buch Datenbankprogrammierung hatte ich den Eindruck gewonnen, das es wie von mir versucht gemacht wird.
Hat jemand einen wirklich guten Buchtip, wo solche Detailprobleme mal gelöst werden ? Diese ganzen Grundlagenbücher helfen im Detail bald nicht mehr weiter...

Gruss,
Stefan
Stefan
Keine Softwarepatente ! Die Polen = wahre Freiheitskämpfer !!! Gerade noch rechtzeitig Mitglied geworden, um die Notbremse zu ziehen. Year !!!
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#9

Re: KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 18:29
Hallo Stefan,

da gibt es durchaus mehrere Möglichkeiten.
Eine wäre, Dein Programm realisert das Löschen selbst, das heiß zunächst die Detail-Datensätze und zum Schluß den Masterdatensatz. Das setzt natürlich vorraus, dass Du die DB-Struktur und Abhängigkeiten der Tabellen kennst.
Bei "großen" SQL-Datenbanken kann man das z.B. über referientelle Integritätsbeziehungen mit einem cascading Delete erreichen. Entweder diese ist über Trigger und Stored Procedure, oder die RI der Datenbank ist dazu schon selbst in der Lage.
Bei Access ist vermutlich die erste Methode anzuwenden.
  Mit Zitat antworten Zitat
st2000

Registriert seit: 23. Apr 2003
Ort: Hamburg
52 Beiträge
 
Delphi 5 Enterprise
 
#10

Re: KeyViolation mit Access bei DELETE

  Alt 30. Okt 2003, 19:11
Hallo Rainer.

Vielen Dank für die Tips.

Dann werde ich mich mal an die Arbeit machen.

Gruss aus Hamburg,
Stefan
Stefan
Keine Softwarepatente ! Die Polen = wahre Freiheitskämpfer !!! Gerade noch rechtzeitig Mitglied geworden, um die Notbremse zu ziehen. Year !!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz