AGB  ·  Datenschutz  ·  Impressum  







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

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 1 von 3  1 23      
LuckyStrike4life

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

Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 5. Jan 2004, 07:45
Morgen,
neues Jahr neues (Un)Glück.

Die Überschrift ist vielleicht etwas nichts sagend, daher hier mal eine genaue Erklärung.

Den Inhalt einer Datenbank wird in nem DBGrid ausgegeben. Der Inhalt wird sortiert nach Datum angezeigt, dies ist relevant - haben wir ja schon ne Weile drüber diskutiert.

Nun funktioniert das löschen eines ausgewählten Datensatzes nicht mehr wie früher, d.h. als die Daten im Grid noch nicht sortiert ausgegeben wurden hat es gereicht einen Datensatz anzuklicken, und dann auf den Button zu drücken mit dieser Funktion:
Delphi-Quellcode:
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
maindbtabelle.Delete;
end;
Das geht nun nicht mehr, denn wenn man nun auf den Button klickt ist es egal welcher Datensatz ausgewählt wurde, es wird einfach der (vermutlich) 1. der unsortierten Datenbank gelöscht.

Nun schrieb mir schon ein kluges Köpfchen seine Idee dazu, der auf meine Komponenten angepasste Code sieht so aus:
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;
Das Problem dabei war, ich nutze eine DBase Datenbank. Diese hat zwar ein Feld welches eine laufende Nummer enthält, dieses ist aber nicht ansprechbar. Zumindest nicht mit den Mitteln die ich versucht habe.

Das Feld mit dieser (eigentlichen) Indexnummer steht in der Datenbank an der ersten Stelle, die Überschrift der Spalte ist der Name der Datenbank. Zum Beispiel die Datenbank heißt 'Name.dbf' dann heißt die Spalte 'Name'.
Oben im Code heißt die DB 'MainDB', aber leider funktioniert es so nicht .
Das Programm läßt sich compilieren aber sobald der Button gedrückt wird gibts diese Fehlermeldung
Zitat:
Im Projekt soundso.exe ist ein Exception Fehler der Klasse EDatabaseError aufgetreten. Meldung: 'Querysort: Das Feld 'MainDB' wurde nicht gefunden'. Prozeß wurde angehalten. ...
Kennt jemand einen Weg wie ich dieses 'Indexfeld' ansprechen kann, oder eine ganz andere Lösung für das Problem?
Die Funktion ist wichtig, ich kann diese also nicht weglassen - und das Problem hindert mich extrem an der Fertigstellung *seufz*.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 5. Jan 2004, 07:50
Hat Deine Datenbank keinen eindeutigen Primärschlüssel? Den solltest Du für Deine Löschabfrage verwenden können. Ansonsten spendiere Deiner DB doch ein AutoInc Feld. Gibt es so was bei DBase?
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

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

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 5. Jan 2004, 07:58
Hallo LuckyStrike4life,

ich denke das Feld MainDB gibt's in Deiner Datenbank nicht. Schau Dir doch mal die genaue Tabellenstruktur an. Wie schaust Du dir die Tabelle eigentlich an? Mit dem Database Desktop? Dann ist die erste Spalte nicht wirklich in der Tabelle enthalten sondern wird zur Anzeige generiert!
  Mit Zitat antworten Zitat
LuckyStrike4life

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

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 5. Jan 2004, 09:23
Zitat von Mario:
Hat Deine Datenbank keinen eindeutigen Primärschlüssel? Den solltest Du für Deine Löschabfrage verwenden können. Ansonsten spendiere Deiner DB doch ein AutoInc Feld. Gibt es so was bei DBase?
So richtig anscheinend nicht,
wie gesagt - diese eine Spalte beinhaltet für jede Zeile eine Nummer, läßt sich aber nicht ansprechen.
Wie kann ich der DB ein AutoInc Feld spendieren, es läßt sich leider kein Feld (Spalte) so deklarieren.

Zitat von r_kerber:
ich denke das Feld MainDB gibt's in Deiner Datenbank nicht. Schau Dir doch mal die genaue Tabellenstruktur an. Wie schaust Du dir die Tabelle eigentlich an? Mit dem Database Desktop? Dann ist die erste Spalte nicht wirklich in der Tabelle enthalten sondern wird zur Anzeige generiert!
Richtig, normal gehe ich über die Datenbankoberfläche, um mir die Tabellen anzeigen zu lassen.
Aber wenn diese Spalte erst generiert wird beim öffnen, ... dann müssen die Nummern ja doch schon irgendwo vorhanden sein, die in die Spalte für die jeweilige Zeile eingetragen werden.
Hmm...
- 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
 
#5

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 5. Jan 2004, 09:37
Zitat von LuckyStrike4life:
Aber wenn diese Spalte erst generiert wird beim öffnen, ... dann müssen die Nummern ja doch schon irgendwo vorhanden sein, die in die Spalte für die jeweilige Zeile eingetragen werden.
Hmm...
Nein sind sie nicht. Diese Spalte eist nicht in der Datenbank-Tabelle.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#6

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 5. Jan 2004, 09:37
Hi!

Vielleicht irre ich mich und es ist richtig so (ich habe nämlich prinzipiell keine Ahnung davon), aber folgende Zeile sieht mir komisch aus:

Delphi-Quellcode:
q_Delete.SQL.Add('DELETE FROM mainDB WHERE MainDB=:Id');
                                                 ^^
Wie gesagt, fiel mir nur mal so auf.

Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
LuckyStrike4life

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

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 5. Jan 2004, 09:48
Zitat von r_kerber:
Zitat von LuckyStrike4life:
Aber wenn diese Spalte erst generiert wird beim öffnen, ... dann müssen die Nummern ja doch schon irgendwo vorhanden sein, die in die Spalte für die jeweilige Zeile eingetragen werden.
Hmm...
Nein sind sie nicht. Diese Spalte eist nicht in der Datenbank-Tabelle.
Hm.. na gut, aber was für eine Lösung gibt es dann noch?

Zitat von r_kerber:
Vielleicht irre ich mich und es ist richtig so (ich habe nämlich prinzipiell keine Ahnung davon), aber folgende Zeile sieht mir komisch aus:

Source:

q_Delete.SQL.Add('DELETE FROM mainDB WHERE MainDB=:Id');
^^



Wie gesagt, fiel mir nur mal so auf.

Ciao fkerber
Was soll da falsch sein?
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#8

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 5. Jan 2004, 09:57
Hi!

irgendwie hast du die Namen da durcheinander gewürfelt, ich bin fkerber, aber macht ja nix, eigentlioch sind die ^^ bei mir an einer anderen Stelle, bei dem =:, müsste das nicht := heißen?

Ciao fkerber
Frederic Kerber
  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: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 5. Jan 2004, 10:16
Zitat von fkerber:
eigentlioch sind die ^^ bei mir an einer anderen Stelle, bei dem =:, müsste das nicht := heißen?
Nö, das ist SQL. :ID ist hier ein Platzhalter für einen Parameter.
Zitat von LuckyStrike4life:
Hm.. na gut, aber was für eine Lösung gibt es dann noch?
mach es doch so, wie Du es schon geschriben hast, nur nicht mit der Spalte MainDB sondern mit anderen Spalten Deiner Tabelle (notfalls mit allen).
  Mit Zitat antworten Zitat
LuckyStrike4life

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

Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand

  Alt 6. Jan 2004, 07:56
Zitat von r_kerber:
mach es doch so, wie Du es schon geschriben hast, nur nicht mit der Spalte MainDB sondern mit anderen Spalten Deiner Tabelle (notfalls mit allen).
Deine Idee mit mehreren Spalten könnte funktionieren.
Wie müsste ich denn dann den Code verändern?

Könnte es auch sein das die Fehlermeldung:
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?
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 04:23 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