Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Löschen von Datenbankeinträgen (https://www.delphipraxis.net/166048-loeschen-von-datenbankeintraegen.html)

jobo 27. Jan 2012 11:15

AW: Löschen von Datenbankeinträgen
 
Ja, das mag ja sein. Sobald Du aber auf andere Tabellen joinst, kann der Server aus Deinem Select Statement nicht mehr ermitteln, was die Basistabelle ist und was nur angereicherte Daten darstellen.

Ich hab nicht so ne Ahnung von MSSQL, was aber technisch notwendig wäre, um aus Serversicht trotz join die Pk Spalten des SQL Statements bestimmen zu können, wäre ein Select, dass in jedem fall alle PK Felder der Haupttabelle (hier scheinbar: Rechnereingabe, die Zwischentabelle) zurückliefert. Sowie keine weiteren Schlüsselfelder anderer Tabellen.

Eigentlich sieht Dein Statement unten so aus, als ob es dem entspricht.
Wenn der Server das nicht schluckt, musst Du wie beschrieben etwas mehr Aufwand treiben und ein separates Löschstatement einbauen.

Je nach Kompos, kann man das gleich als Delete oder Update Clause mitangeben, da hab ich aber aktuell keinen Überblick.

Flash68 27. Jan 2012 11:48

AW: Löschen von Datenbankeinträgen
 
Wenn es an den joins liegt, wäre halt die Frage wie ich die Berechnung mache ohne die joins.

jobo 27. Jan 2012 11:59

AW: Löschen von Datenbankeinträgen
 
Nein, die Frage ist, wie Du auf Basis der Berechnung (also Deinem Dataset mit dem Berechnungsergebnis) eine Löschung durchführst.
Man kann natürlich sagen, das sind 2 vollkommen unterschiedliche Aufgaben.
1. Die Visualisierung einer Berechnung (eine Maske/ Form, ein Dataset)
2. Das Löschen einer Rechnerzuordnung, die nicht mehr berechnet werden soll (eine andere Maske, nur für Auf- und Abbau einer Rechnerzuordnung.

Flash68 27. Jan 2012 12:13

AW: Löschen von Datenbankeinträgen
 
Liste der Anhänge anzeigen (Anzahl: 1)
in dieser speziellen Zuordnung ist ja in der Tabelle noch die Anzahl der Module drin mit der Gesamtspeicher berechnet wird, es soll einfach der komplette tabellen eintrag gelöscht werden.

jobo 27. Jan 2012 12:29

AW: Löschen von Datenbankeinträgen
 
Das passt aber nicht zu dem, was Du von Deinem Dataset erzählst:
Zitat:

Zitat von Flash68 (Beitrag 1147905)
Das Dataset wird über folgende Select-Anweisung angebunden:

select RS.Rechner_ID, RS.Speicher_ID, S.Bezeichnung, RS.Anzahl, S.Größe, S.Größe*Rs.Anzahl As Gesamt from Rechnerspeicher RS, Speicher S where RS.Rechner_ID =:ID and RS. Speicher_ID = S.ID

Die Haupttabelle ist Rechner, Verknüpfungstabelle ist Rechnerspeicher und die Listtabelle ist Speicher.


und es passt nicht dazu, dass Du schreibst, die Zwischentabelle hätte nur 2 Spalten. (aber das ist hier auch egal)


a) Wenn du auf diesem Dataset (aus Zitat oben) ein Delete machen willst, musst Du eben etwas filigraner vorgehen.

b) Wenn Du auf der Tabelle aus dem Screenshot ein Delete machen willst, dann reicht ein simples Delete. (Hast Du ja selber schon bemerkt)

Wir sind also bei a) oder?

Flash68 27. Jan 2012 12:43

AW: Löschen von Datenbankeinträgen
 
die meisten Verknüpungstabellen die ich benutze habe 2 Spalten und ich dachte das ich das Problem allgemein habe, was sich dann später als Falsch herrausstellte.

sieht so aus also ob ich ein spezielles delete für diese Tabelle/dataset benötige.

jobo 27. Jan 2012 13:14

AW: Löschen von Datenbankeinträgen
 
Ja, vermutlich gibt es ja auch irgendwo analog das spezielle Insert.

Flash68 27. Jan 2012 13:17

AW: Löschen von Datenbankeinträgen
 
Das Insert mache ich über den DBGrid.

jobo 27. Jan 2012 13:26

AW: Löschen von Datenbankeinträgen
 
Egal, die (Grid)Aussage ist nutzlos. Das ist nur der Visualisierungsteil.
Es geht immer um die Datenmenge, die unter dem Grid liegt:
DBGRID< Dataset < Query Statement

Wie gesagt, ich hab keine Ahnung, wie genial MSSQL Server bei der Auflösung solcher Statements bzw. der Bestimmung der Schlüsselinformationen arbeitet, aber egal ob insert, delete oder update, er hat immer das gleiche Problem. (Also könnte er sich auch in jedem Fall gleich Verhalten)

Wenn also ein Insert auf einem Dataset funktioniert, das Delete auf dem gleichen Dataset aber fehlschlägt, ist entweder die Servermechanik etwas schusselig oder Du machst einen Unterschied im Code, der aus Deinen bisherigen Äußerungen nicht hervorgeht (und Dir vielleicht auch nicht mal bewusst ist)

hoika 27. Jan 2012 19:00

AW: Löschen von Datenbankeinträgen
 
Hallo,

nimm eine 2. ADOQuery, lösche dort den Eintrag,
denn eine

DBGrid.DataSet.Close;
DBGrid.DataSet.Open;


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 Uhr.
Seite 2 von 3     12 3      

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-2025 by Thomas Breitkreuz