![]() |
Einen Datensatz löschen aus SQL sortiertem Datenbestand
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:
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.
procedure TForm1.BitBtn4Click(Sender: TObject);
begin maindbtabelle.Delete; end; Nun schrieb mir schon ein kluges Köpfchen seine Idee dazu, der auf meine Komponenten angepasste Code sieht so aus:
Delphi-Quellcode:
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.
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 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 :cry: . Das Programm läßt sich compilieren aber sobald der Button gedrückt wird gibts diese Fehlermeldung Zitat:
Die Funktion ist wichtig, ich kann diese also nicht weglassen - und das Problem hindert mich extrem an der Fertigstellung *seufz*. |
Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand
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?
|
Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand
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! |
Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand
Zitat:
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:
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... |
Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand
Zitat:
|
Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand
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:
Wie gesagt, fiel mir nur mal so auf.
q_Delete.SQL.Add('DELETE FROM mainDB WHERE MainDB=:Id');
^^ Ciao fkerber |
Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand
Zitat:
Zitat:
|
Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand
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 |
Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand
Zitat:
Zitat:
|
Re: Einen Datensatz löschen aus SQL sortiertem Datenbestand
Zitat:
Wie müsste ich denn dann den Code verändern? Könnte es auch sein das die Fehlermeldung: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 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