Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Einen bestimmten Datenfeld in einer Datenbank auswählen? (https://www.delphipraxis.net/85740-einen-bestimmten-datenfeld-einer-datenbank-auswaehlen.html)

rainman51 4. Feb 2007 10:11


Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Hallo,

wie kann man mit Hilfe eines editfeldes und einer if-bedingung ein bestimmtest datenfeld in einer datenbank finden und dann wenn man die Zeile gefunden hat den gesamten datenstatz löschen---

TOmega 4. Feb 2007 10:38

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Hallo rainman51 !

Benutze die TQuery Komponente und baue deine Bedingung in einen SQL-Befehl ein, also etwa so:
Delphi-Quellcode:
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM "DeineDatenbank.DB" WHERE '+Edit.Text);
Query1.Open;
Im Edit steht nur deine Bedingung 'Feldname=Wert".
Du musst jetzt natürlich noch überprüfen, ob Query überhaupt Datensätze enthält oder vielleicht mehrere Datensätze Deine Bedingung erfüllen, dann musst Du deine Auswahl noch genauer machen.
Mit
Delphi-Quellcode:
Query1.Delete;
löschst Du dann den aktuell ausgewählten Datensatz. Ich hoffe, dass ist das was Du suchst.
Gruss TOmega

Jelly 4. Feb 2007 10:51

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Ist das Feld, in dem du suchst UNIQUE ? Wenn nicht, werden unter Umständen mit TOmega's Lösung der falsche Datensatz gelöscht.

Um alle Datensätze zu löschen, die dem Suchkriterium entsprechen, brauchts kein Select und anschliessendes Löschen aus Delphi heraus, sondern ich würde direkt die SQL Syntax anpassen:

Delphi-Quellcode:
Query1.SQL.Clear;
Query1.SQL.Add('Delete FROM "DeineDatenbank.DB" WHERE Feldname = '+ QuotedStr(Edit.Text));
Query1.ExecSQL;
Merke auch, dass ich den Suchtext über die Funktion QuotedStr übergebe. Täte ich das nicht, gibts ne Fehlermeldung, wenn der Suchtext selbst Hochkommata ' enthalten

rainman51 4. Feb 2007 11:01

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
was bedeutetb das?

--->DeineDatenbank.DB
Ich denk mal ... meien db(Inventarverwaltung). --< was steht hinter dem punkt?

rainman51 4. Feb 2007 11:03

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Also wenn z.b meine Suchabfrage nach der der Datensatz gelöscht werden soll imm er in der ersten Spalte steht....geht das damit auch>?

Jelly 4. Feb 2007 11:06

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Zitat:

Zitat von rainman51
was bedeutetb das?

--->DeineDatenbank.DB

Datenbank ist in dem Kontext falsch. Gemeint ist der Tabellenname.

rainman51 4. Feb 2007 11:15

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Zitat:

Zitat von Jelly
Zitat:

Zitat von rainman51
was bedeutetb das?

--->DeineDatenbank.DB

Datenbank ist in dem Kontext falsch. Gemeint ist der Tabellenname.

HEißt das also ....
Tabelle.Spalte?

Jelly 4. Feb 2007 11:18

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Zitat:

Zitat von rainman51
HEißt das also ....
Tabelle.Spalte?

Nein, nur der Tabellenname. Eine Datenbanktabelle besitzt Spalten, über die Du im where-Teil des SQL Befehls zugreifen kannst.

Ich denk mal, ein bischen SQL Litteratur würde nichts schaden.

DP-Maintenance 4. Feb 2007 11:43

DP-Maintenance
 
Dieses Thema wurde von "Jelly" von "Programmieren allgemein" nach "Datenbanken" verschoben.

rainman51 4. Feb 2007 11:48

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Adoqueryauswahl.SQL.Clear;
Adoqueryauswahl.SQL.Add('Delete FROM "Anlagegut" WHERE Anlagegut.Inventarnummer = '+
{1QuotedStr}(Editeingabe.text));

Adoqueryauswahl.Open;

so lautet jetzt mein Text.....es kommt aber unvollständige anweisung

Jelly 4. Feb 2007 11:50

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Zitat:

Zitat von rainman51
Adoqueryauswahl.SQL.Add('Delete FROM "Anlagegut" WHERE Anlagegut.Inventarnummer = '+
{1QuotedStr}(Editeingabe.text));

Das kriegst Du noch nicht einmal compiliert. Was sollen denn die geschweiften Klammern?

mkinzler 4. Feb 2007 11:53

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Vielleicht solltest du doch mal Jelly's Tip mit dem Erlernen der Grundlagen mal ernstnehmen
http://www.dsdt.info/tutorials/?cat=6

TOmega 4. Feb 2007 11:56

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Text in geschweiften Klammern ist ein Kommentar, QuotedStr ist eine Funktion.
So ist's richtig:

Delphi-Quellcode:
Adoqueryauswahl.SQL.Clear;
Adoqueryauswahl.SQL.Add('Delete * FROM "Anlagegut.db" WHERE Anlagegut.Inventarnummer = '+ 
QuotedStr(Editeingabe.text));
Adoqueryauswahl.Open;
Ausserdem hast Du den Stern hinter dem Delete vergessen, der bedeutet, dass Du alle Datenfelder sehen willst. Ansonsten stehen dort die selektierten Datenfeldbezeichnungen. Deine Datenbankdatei hat sicher auch eine Endung *.db für Paradox oder *.dbf für dBase.

mkinzler 4. Feb 2007 11:58

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Zitat:

Deine Datenbankdatei hat sicher auch eine Endung *.db für Paradox oder *.dbf für dBase.
Diese kann (und sollte man imho) auch weglassen.

Jelly 4. Feb 2007 12:02

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Zitat:

Zitat von TOmega
Ausserdem hast Du den Stern hinter dem Delete vergessen, der bedeutet, dass Du alle Datenfelder sehen willst. Ansonsten stehen dort die selektierten Datenfeldbezeichnungen. Deine Datenbankdatei hat sicher auch eine Endung *.db für Paradox oder *.dbf für dBase.

Vielleicht täte Dir das DB Tutorial das mkinzler vorgeschlagen hat, auch nicht schlecht :zwinker:
  • Delete braucht kein *.Du kannst nicht Spalten löschen, sondern nur Zeilen aus der Tabelle.
  • Die TQuery ist über Databasename mit der Datenbank verknüpft. Die Endung kannst du also weglassen. In der Datenbank (auch unter Paradox) werden, wie in jedem DBMS System auch, Tabellen erzeugt. Dass diese zufällig auf der Platte als getrennte Datei mit Endung .db abgelegt werden, ist Paradox spezifisch. Der interne Name der Datenbank ist aber der, der unter dem Create Table angegeben wurde
  • Ein Delete Befehl wird nicht mit Query1.Open ausgeführt, da er keine Ergenismenge zurückliefert. Stattdessen ist ein Query1.ExecSQL nötig.

rainman51 4. Feb 2007 12:21

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Adoqueryauswahl.SQL.Clear;
Adoqueryauswahl.SQL.Add('Delete FROM "Inventarverwaltung" WHERE
--->datenbank

Anlagegut.Inventarnummer = '+
--->Tabelle -->spalte


QuotedStr(Editeingabe.text)); <---- Hier steht die Zahl drinn die in der spalte stehen soll(jede Zahl
kommt dabei nur einmal vor)
Adoqueryauswahl.ExecSQL;

es kommt aber immer unvollständuge anweisung ich weiß nicht was fehlt...

Jelly 4. Feb 2007 12:24

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Zitat:

Zitat von rainman51
es kommt aber immer unvollständuge anweisung ich weiß nicht was fehlt...

Kannst Du nicht einfach mal genau den Code posten, den du nutzt anstatt immer nur irgendwelche Schnippsel mit Zeichen drin, die kein Compiler dieser Welt versteht.

mkinzler 4. Feb 2007 12:25

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Zeig mal deinen orginalen Code, so kann man ja nicht erkennen, was du wirklich geschrieben hast.

rainman51 4. Feb 2007 12:26

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure TFormloch.ButtondeletClick(Sender: TObject);
begin
 if (editeingabe.Text <> '') then begin
if MessageBox(0, 'Soll der Datensatz gelöscht werden?', 'Datensatzlöschen',MB_YESNO) = 6   then  begin

Adoqueryauswahl.SQL.Clear;
Adoqueryauswahl.SQL.Add('Delete FROM "Inventarverwaltung" WHERE Anlagegut.Inventarnummer = '+
QuotedStr(Editeingabe.text));
Adoqueryauswahl.ExecSQL;

showmessage('Ok');
               end
               else MessageBox(0, 'Datensatz ist noch vorhanden', 'Vorgang abgebrochen',MB_Ok)
   end
   else showmessage ('Bitte Inventarnummer eingeben!');

end;

end.
Unten ein Bild von dem Programm

[edit=Jelly]Delphi Tags bitt einpflegen. Mfg, Jelly[/edit]

mkinzler 4. Feb 2007 12:33

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
1. Statt .Clear + .Add besser gleich .Text nehmen.
SQL-Code:
Delete FROM "Inventarverwaltung" WHERE Anlagegut.Inventarnummer
??
wie heißt die Tabelle nun? Ich vermute mal Anlagegut, dann muß es:
SQL-Code:
Delete FROM Anlagegut WHERE Inventarnummer= ...
heißen.

rainman51 4. Feb 2007 12:49

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Delphi-Quellcode:


Adoqueryauswahl.SQL.Text('Delete FROM Anlagegut WHERE Inventarnummer = '+
QuotedStr(Editeingabe.text));
Adoqueryauswahl.ExecSQL;
irgentwie geht es einfach nicht ...schaut mal auf das Bild ob alle Einstellungen stimmen

mkinzler 4. Feb 2007 12:52

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Lese dir mal das Tut durch. Die OH würde aber auch schon reichen, daß man erkennt das .Text keine Methode sondern eine Eigenschaft ist!
Delphi-Quellcode:
Adoqueryauswahl.SQL.Text := 'Delete FROM Anlagegut WHERE Inventarnummer = '+
QuotedStr(Editeingabe.text);

Jelly 4. Feb 2007 12:52

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Zitat:

Zitat von rainman51
schaut mal auf das Bild ob alle Einstellungen stimmen

Der Formatierung nach im DBGrid zu urteilen, scheint es mit bei der Inventarnummer nicht um ein Varchar Feld sondern um ein int oder decimal Feld zu handeln. Deshalb lass mal die QuotedStr Funktion weg. Kann sein, dass dein Datenbanksystem int-Felder nur ohne Quotes akzeptiert.

rainman51 4. Feb 2007 13:01

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Es geht....Danke Leute

rainman51 4. Feb 2007 13:02

Re: Einen bestimmten Datenfeld in einer Datenbank auswählen?
 
Es geht....Danke Leute


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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-2025 by Thomas Breitkreuz