AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Einen Datensatz löschen aus SQL sortiertem Datenbestand

Einen Datensatz löschen aus SQL sortiertem Datenbestand

Ein Thema von LuckyStrike4life · begonnen am 5. Jan 2004 · letzter Beitrag vom 9. Jan 2004
Antwort Antwort
Seite 2 von 3     12 3   
Robert_G
(Gast)

n/a Beiträge
 
#11

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 6. Jan 2004, 10:33
Moin LuckyStrike.

Ich bezweifle, dass du eine Spalte namens mainDB in deiner Tabelle hast. Deshalb kann deine Abfrage nicht funktionieren.
Hast du keinen Primärschlüssel vergeben oder gibt es wenigstens eine Kombination mehrerer Felder, die eindeutig auf einen Datensatz zeigen?
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

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

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 6. Jan 2004, 11:20
Zitat von LuckyStrike4life:
Zitat:
Im Projekt soundso.exe ist ein Exception Fehler der Klasse EDatabaseError aufgetreten. Meldung: 'Querysort: Das Feld 'MainDB' wurde nicht gefunden'. Prozeß wurde angehalten. ...
darauf hinweisen soll, dass der verwendete Query nicht auf die Datenbank schaut - auf die er schauen sollte um das Feld zu finden?
Wohl eher nicht. Laß Dich nicht von der ersten Spalte im Datenbank-Desktop verwirren. Die gibt es in Deiner Datenbank nicht. Verwend zum Anzeigen der DB-Tabellen doch besser den Datenbank-Explorer. Hat IMHO den "Vorteil", dass Du dabei angewöhnen mußt, auch für dBase und Paradox-Dateien einen Alias-namen einzurichten, auf den Du dann in Deinem Delphi-Programm mit TDatabase zurückgreifen kannst. Es entfallen somit die festen Pfadeingaben im Programm!
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#13

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 6. Jan 2004, 12:10
Zitat von GeorgeWNewbie:
Moin LuckyStrike.

Ich bezweifle, dass du eine Spalte namens mainDB in deiner Tabelle hast. Deshalb kann deine Abfrage nicht funktionieren.
Hast du keinen Primärschlüssel vergeben oder gibt es wenigstens eine Kombination mehrerer Felder, die eindeutig auf einen Datensatz zeigen?
Ja, eine Kombination wäre möglich.
Aber wie muss ich dann den Code verändern? Das geht mir nicht ganz auf.

Zitat von r_kerber:
Wohl eher nicht. Laß Dich nicht von der ersten Spalte im Datenbank-Desktop verwirren. Die gibt es in Deiner Datenbank nicht. Verwend zum Anzeigen der DB-Tabellen doch besser den Datenbank-Explorer. Hat IMHO den "Vorteil", dass Du dabei angewöhnen mußt, auch für dBase und Paradox-Dateien einen Alias-namen einzurichten, auf den Du dann in Deinem Delphi-Programm mit TDatabase zurückgreifen kannst. Es entfallen somit die festen Pfadeingaben im Programm!
Ja gut, aber das bringt mich jetzt nicht weiter ... .
Wichtig ist - dass ich es schaffe einen bestimmten Datensatz aus dem Programm herraus zu löschen, am Ende werde ich um diese Alias Namen für die DBs vermutlich so oder so nicht herum kommen - da das Programm später nicht von mir gepflegt wird.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

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

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 6. Jan 2004, 12:30
Zitat von LuckyStrike4life:
Delphi-Quellcode:
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
  q_Delete.SQL.Clear;
  q_Delete.SQL.Add('DELETE FROM mainDB WHERE MainDB=:Id');
  q_Delete.ParamByName('Id').AsInteger := querysort.FieldByName('MainDB').AsInteger;
  q_Delete.ExecSQL; // Wichtig, hier kein Open
  querySort.Refresh; // Anzeige aktualisieren.
end;
Du hast doch schon ganz gut angefangen. Jetzt mußt eben nur Spaltennamen verwenden, die es tatsächlich gibt!
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#15

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 6. Jan 2004, 12:52
Zitat von r_kerber:
Zitat von LuckyStrike4life:
Delphi-Quellcode:
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
  q_Delete.SQL.Clear;
  q_Delete.SQL.Add('DELETE FROM mainDB WHERE MainDB=:Id');
  q_Delete.ParamByName('Id').AsInteger := querysort.FieldByName('MainDB').AsInteger;
  q_Delete.ExecSQL; // Wichtig, hier kein Open
  querySort.Refresh; // Anzeige aktualisieren.
end;
Du hast doch schon ganz gut angefangen. Jetzt mußt eben nur Spaltennamen verwenden, die es tatsächlich gibt!
Okay,
hab ich versucht, hab mal das Feld 'Datum' probiert - aber da kommt die gleiche Fehlermeldung, nur eben das nicht das Feld "MainDB" nicht gefunden wurde, sondern "Datum"
Delphi-Quellcode:
 q_Delete.SQL.Clear;
  q_Delete.SQL.Add('DELETE FROM MainDB WHERE Datum=:Id');
  q_Delete.ParamByName('Id').AsInteger := querysort.FieldByName('Datum').AsInteger;
  q_Delete.ExecSQL; // Wichtig, hier kein Open
  querySort.Refresh; // Anzeige aktualisieren.
Ich verzweifel noch.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#16

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 7. Jan 2004, 10:41
Hier mal die Datenbank, vielleicht schaut ihr euch die mal an, z.B. mit Excel. Das Erste Feld zeigt die Spalte an, die ich meinte. Schauts euch mal an, thx.

PS: Da die Endung ".dbf" verboten ist, hab ich noch ".txt" dazu geschrieben. Einfach wegnehmen.
Angehängte Dateien
Dateityp: txt maindbsave07.01.04excel.dbf.txt (4,0 KB, 12x aufgerufen)
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

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

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 7. Jan 2004, 10:54
Zitat von LuckyStrike4life:
Okay,
hab ich versucht, hab mal das Feld 'Datum' probiert - aber da kommt die gleiche Fehlermeldung, nur eben das nicht das Feld "MainDB" nicht gefunden wurde, sondern "Datum"
Delphi-Quellcode:
 q_Delete.SQL.Clear;
  q_Delete.SQL.Add('DELETE FROM MainDB WHERE Datum=:Id');
  q_Delete.ParamByName('Id').AsInteger := querysort.FieldByName('Datum').AsInteger;
  q_Delete.ExecSQL; // Wichtig, hier kein Open
  querySort.Refresh; // Anzeige aktualisieren.
Ich verzweifel noch.
Ein Datum ist aber nicht Integer. Versuche doch mal AsDate.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#18

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 7. Jan 2004, 20:54
Hi LuckyStrike.
Wenn du das nächste Mal Beispieldaten schickst, achte bitte auf Datenschutzbestimmungen.
Ich dürfte nicht wissen warum sich ***piep*** einen ***piep*** ausgeliehen hat.

Die einzige eindeutige Kombination dieser Daten wäre Name, Datum, Zweck.
Da man aber nicht sicher sein kann, dass diese Daten niemals doppelt vorkommen würde ich der Tabelle eine fortlaufende Zahl als Primärschlüssel geben.
  • 1 Hugo Ford ...
    2 Egon VW ...
    3 ...

DAnn kannst du das hier nehmen:
Delphi-Quellcode:
  q_Delete.SQL.Text := 'DELETE FROM MainDB WHERE ID = :ID';
  q_Delete.ParamByName('ID').AsInteger := QuerySort.FieldByName('ID').AsInteger;
Du wirst in Zukunft immer wieder auf Probleme stoßen wenn du keine eindeutigen Schlüssel verwendest.
Also lieber jetzt als später...
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#19

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 8. Jan 2004, 07:59
Zitat von GeorgeWNewbie:
Hi LuckyStrike.
Wenn du das nächste Mal Beispieldaten schickst, achte bitte auf Datenschutzbestimmungen.
Ich dürfte nicht wissen warum sich ***piep*** einen ***piep*** ausgeliehen hat.

Die einzige eindeutige Kombination dieser Daten wäre Name, Datum, Zweck.
Da man aber nicht sicher sein kann, dass diese Daten niemals doppelt vorkommen würde ich der Tabelle eine fortlaufende Zahl als Primärschlüssel geben.
  • 1 Hugo Ford ...
    2 Egon VW ...
    3 ...

DAnn kannst du das hier nehmen:
Delphi-Quellcode:
  q_Delete.SQL.Text := 'DELETE FROM MainDB WHERE ID = :ID';
  q_Delete.ParamByName('ID').AsInteger := QuerySort.FieldByName('ID').AsInteger;
Du wirst in Zukunft immer wieder auf Probleme stoßen wenn du keine eindeutigen Schlüssel verwendest.
Also lieber jetzt als später...
Richtig, sowas wie ein Primärschlüssel wäre sehr gut. Dieser müsste aber automatisch erzeugt werden. Und da liegt schon das Problem, es funktioniert nicht so wie es soll.
Es läßt sich keine Spalte als Indexfeld oder Primärfeld deklarieren. Oder mir fehlt zumindest das Wissen wie.

Danke das du dir die Datenbank angeschaut hast und deine Meinung gepostet hast.
Wenn du Ideen hättest, bezüglich eines Primärschlüssels ... sags nur.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#20

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 9. Jan 2004, 11:05
Hab jetzt mal den Code verändert, und der Datenbank als Test ein Integer Feld spendiert.

Hat den Namen Integ, hab dann Zahlen in die Felder eingetragen 1,2,3,4,5,6,7,8,9,10.

Der Code schaut nun so aus:
Delphi-Quellcode:
q_Delete.SQL.Clear;
  q_Delete.SQL.Add('DELETE FROM "t:eDienstreisebuch\mainDB.dbf" WHERE Integ=:Id');
  q_Delete.ParamByName('Id').AsInteger := querysort.FieldByName('Integ').AsInteger;
  q_Delete.ExecSQL; // Wichtig, hier kein Open
  querySort.Refresh; // Anzeige aktualisieren.
Nun bricht das Programm nicht ab, wenn man auf den Button klickt, der Code läuft auch durch - denn am Ende wird der Query kurz refreshed, aber leider wird gar nichts gelöscht... hm.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:39 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