Entwickler-Ecke

Datenbanken - Daten aus Datenbank löschen


Zaubär - So 15.12.02 21:28
Titel: Daten aus Datenbank löschen
Hi Leute,

hab wieder mal ein kleines Datenbankproblem.

In meinem Programm hab ich eine Paradox-Tabelle. Im Programm hab ich dann ein Query, eine Table und ein dbGrid. Das dbgrid ist mit dem Query verknüpft. Nun möchte ich auf Knopfdruck die im dbgrid markierte Zeile löschen. Doch leider funktioniert wird der falsche Eintrag gelöscht wenn ich table.delete benutze. Wie kann ich die markierte Zeile vom dbgrid mit der Table-Komponente synchronisieren??


bis11 - So 15.12.02 21:38

Hi,

erstmal ein Tip zum anfang, nimm entweder die Query-Kompo oder die Table-Kompo für abfragen in der Datenbank. Bei der Query-Kompo hast Du viel mehr Möglichkeiten und kommst einfacher zu Ziel, wenn Du SQL kannst, als bei der Table-Kompo. So ist zumindest meine Erfahrung.


Zaubär - So 15.12.02 22:34

Das Problem, das ich habe ist, dass ich nur mit der Table Komponente an der Datenbank Änderungen machen kann. Ansonsten hätte ich die Table-Kompo schon lange verbannt.


bis11 - So 15.12.02 22:42

Wieso, ich kann doch an jeder Datenbank Veränderungen mit SQL-Befehlen durchführen. Das Verstehe ich jetzt nicht ganz, erläutere mal näher.


Zaubär - So 15.12.02 22:48

bis11 hat folgendes geschrieben:
Veränderungen mit SQL-Befehlen

Ehm...da ist bei mir offenbar ein Wissenslücke vorhanden und auch in meinen 2x1000 seitigen Delphi-Büchern.

Wie funktioniert denn z.B. eine Dateneintragung oder Löschung mittels SQL-Befehlen in eine Datenbank??

Ich kann nur sotieren und rechnen :(


bis11 - So 15.12.02 22:54

Schau mal auf diese Web-Seite, da sind alle SQL-Befehle erklärt :

http://home.t-online.de/home/aam_int/de/sqlhelp/index.html


LCS - Mo 16.12.02 12:42

Hi Zaubär
unabhängig davon, wie du nun deine Änderungen in der Datenbank machst, musst du beim Löschen zuerst den Primärschlüssel des aktuellen Satzes der Query auslesen, dann die Tabelle auf diesen Satz positionieren (mit FindKey) und dann erst diesen Satz löschen.

Gruss Lothar


Zaubär - Sa 21.12.02 16:07

Tut mir leid aber ich komme nicht weiter :(

Könnt ihr mir für folgende Fälle ein Beispiel nennen:

1. Bisher habe ich Daten immer folgendermassen gelöscht.

Quelltext
1:
table.delete                    

Da ich meistens ein dbgrid verwende, wurde auch immer das richtige gelöscht.

2. Und so habe ich Daten eingetragen:

Quelltext
1:
table.fieldbyname('Beispiel').AsString := 'TEST';                    


Doch wie soll ich diese zwei Sachen nur mit einem Query machen. Hab's bisher nicht geschafft :(


bis11 - Sa 21.12.02 16:19

Hi,

hast Du Dir die Seite angeschaut die ich gepostet habe ?

Um einen Datensatz einfügen zu können brauchst Du folgenden SQL-Befehl :


Quelltext
1:
INSERT INTO Tabelle1 (Feld1,Feld2,Feld3,Feld4)  VALUES ('Testfeld1','TestFeld2','Testfeld3','Testfeld4');                    


Um einen Datensatz zu löschen brauchst Du folgenden SQL-Befehl :


Quelltext
1:
DELETE FROM Tabelle1 WHERE Feld1='Testfeld1';                    


Zaubär - Sa 21.12.02 17:18

Der Lösch-Befehl ist aber sehr sehr umständlich, vor allem wenn man bedenkt, dass in mehreren Zeilen in einer Spalte das gleiche steht und ich will ja genau die richtige Zeile löschen....mal schauen ob ich's schaffe.


bis11 - Sa 21.12.02 17:41

Der Löschbefehl löscht nur den Datensatz, wo im Feld1 der String Testfeld1 drin steht.


Zaubär - Sa 21.12.02 19:21

Ja das hab ich mir auch gedacht, doch was passiert wenn TestFeld1 im Feld1 etwa 10mal vorkommt, aber nur einmal gelöscht werden darf??

Hab die Funktionen jetzt getestet, funktioniert bis jetzt prima. Allerdings hab ich noch eine kleine Frage, benutzt du eine Query-Kompo oder mehrere ?? Für jede Funktion eine?


bis11 - So 22.12.02 12:47

Eine Query-Kompo für eine Tabelle und über diese lasse ich dann alle SQL-Befehle laufen. Du kannst ja mit dem Befehl:

Quelltext
1:
Query1.SQL.Clear;                    

Diesen Befehl setzt Du immer vorher ab. Dann kannst Du mehrere Befehle über eine Query laufen lassen.