Autor Beitrag
Hätti
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 11.10.06 11:45 
Hallo zusammen

Ich habe da ein kleines Problem. Ich habe ein Programm, in dem ich mehrere Datensätze in einer ADOQuery (ADOQueryTests) lade. Nun möchte ich daraus einen bestimmten Eintrag löschen. Ich hab schon mehrere Sachen probiert:

ausblenden Delphi-Quelltext
1:
ADOQueryTests.Delete;					

-> löscht einfach den letzten Datensatz und nicht den gewünschten

ausblenden Delphi-Quelltext
1:
2:
ADOQueryTests.SQL.Clear;
ADOQueryTests.SQL.Add('DELETE ... WHERE MessNr =' + TestIndex[SelectedRow-1]);

TestIndex[SelectedRow-1] ist übrigens die gewünschte MessNr

Und noch vieles mehr... Aber ich denke, ich war jeweils schon von Anfang an auf dem falschen Weg. Könnt ihr mir sagen, wie ich den gewünschten Eintrag löschen kann?

Danke
Hätti
NTM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120

Win XP
2005 Prof
BeitragVerfasst: Mi 11.10.06 12:54 
Hallo,
fallst Du die Datensätze in einer Tabelle anzeigen läst dann brauchst Du nur denn Datensatz editieren und auf eine Button z.b. Löschen denn Befehle delete geben und somit wir der Datensatz gelöscht. Im grund komme es darauf an das du Ihne einfach sagst welchen Datensatz du löschen willst also da wo der Focus ist wird die datei auch gelöscht.

Ich hoffe das Dir das ein wenig Hilft.
Hätti Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 11.10.06 13:30 
die Daten werden in einem TStringGrid angezeigt. Geht es auch damit irgendwie? Ich hab das ganze eigentlich nicht erstellt, ich bin nur der, der es nun ändern darf. Allerdings hab ich noch keine Ahnung von Delphi... :oops:
pepsen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mi 11.10.06 13:58 
na wunderbar...das selbe oder ein sehr ähnliches Problem hab ich auch gg
ich wollt es halt so machen, dass ich in dem Stringgrid einen Datensatz anklicke und dann über einen Button genau diesen dann auch löschen!
Ich hatte es erst so gemacht, dass ich über SelectCell mir den Wert der Zeile ausgeben lasse und diese dann dem Query übergebe...mir wurde aber gesagt, dass dies nicht wirklich funktioniert!

also beim Table hat es noch hingehaun
NTM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120

Win XP
2005 Prof
BeitragVerfasst: Mi 11.10.06 15:44 
Nehme anstatt Stringgrid einfach ein DBGrid und dein Problem sollte behoben sein.
pepsen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mi 11.10.06 16:04 
wenn ich das könnte/dürfte wäre schön ^^
is in der Aufgabe vorgegeben ;)
NTM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120

Win XP
2005 Prof
BeitragVerfasst: Mi 11.10.06 16:07 
aber wo liegt das Problem die sehen doch gleich aus.
pepsen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mi 11.10.06 16:32 
ok...also:
ich klicke eine Zeile an und ermittle damit "ARow" (procedure TForm1.StringGrid1SelectCell) . Diesen Wert übergebe ich schließlich an die Variable "rownr".
"rownr" greife ich dann in der Procedure ButtonClick wieder auf und übergebe sie an "query11.RecNo".
Darauf hin soll dann halt ein
ausblenden Delphi-Quelltext
1:
2:
query1.sql.add('DELETE FROM addyDB');
query1.ExecSQL;

folgen!
NTM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120

Win XP
2005 Prof
BeitragVerfasst: Mi 11.10.06 16:39 
Also wenn das Richtig versteht kannst du auf irgend einen Datensatz denn Focus setzen. So wenn das richtig frage ich mich warum du nicht direkt über Buttoon Onklick Befehl sagst Query.Delete.
pepsen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Do 12.10.06 10:10 
Dies geht so leider nicht, da es beim Query mit dem RecNo nicht funktioniert :/
ich bin auch mittlerweile echt am verzweifeln! Beim Table war es so einfach! Geht es beim Query überhaupt, dass ich eine im StringGrid ausgewählte Zeile dann auf Knopfdruck aus der DB lösche?
NTM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120

Win XP
2005 Prof
BeitragVerfasst: Do 12.10.06 10:35 
Kann ich dir gar nicht sagen weil ich es bis dato nur mit DBGrid gearbeitet habe und da geht es.
pepsen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Do 12.10.06 10:47 
ich hab es jetzt nochmal anders versucht aber das geht natürlch auch nich...ich glaub ich geb es ganz auf ^^

ausblenden Delphi-Quelltext
1:
2:
3:
4:
query1.SQL.Clear;
  query1.SQL.Delete(rownr);
  query1.Open;
  query1.RequestLive := true;


FEHLERMELDUNG: listenindex überschreibt das maximum
Hätti Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 12.10.06 15:02 
eben wie gesagt... mit dem ADOQuery.Delete; hab ich's auch schon probiert. Aber dann wird jeweils der letzte Eintrag, der in der Query vorhanden ist gelöscht und nicht der, den ich löschen möchte... ich möchte eigentlich so etwas wie pepsen versucht hat ADOQuery.Delete(da, wo MessNr = meine Messnummer);
pepsen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Fr 13.10.06 12:28 
ich habs!!!

und zwar greife ich mit der aktion SelectCell im Stringgrid auf die Zelle mit der Indexnr zu und übergebe sie dem String RowNr

ausblenden Delphi-Quelltext
1:
rownr := stringgrid1.Cells[0,Arow];					


und bei ButtonClick filter ich dann das Query nach diesem String und lösche ihn!

ausblenden Delphi-Quelltext
1:
2:
3:
query1.SQL.Clear;
query1.SQL.text:= 'DELETE FROM addyDB WHERE lfnr=' + rownr;
query1.ExecSQL;


endlich! Hat aber mal gedauert ^^
Hätti Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 13.10.06 15:53 
ich glaube nicht ganz, dass dies ganz so funktioniert wie ich es gerne hätte. So wird der Datensatz gelöscht WHERE MessNr = n. Zeile, in der sich der Datensatz befindet. Wenn nun aber Eintrag mit MessNr 73 in Zeile 2 ist funktioniert es nicht.

Hab's jedoch noch nicht getestet, ist einfach mein erster Eindruck.
pepsen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: So 15.10.06 14:35 
also ich hab einfach jedem Datensatz eine FESTE lnr zugewiesen...da funktioniert es dann
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 15.10.06 14:47 
funktioniert so

ausblenden Delphi-Quelltext
1:
q.sql.add('delete from myTable where pKey = ' + PrimaryKey);					


alternativ auch anders eindeutig qualifiziert, da ansonsten alle gelöscht werden welche der spezifikation entsprechen. <HTH>