Autor |
Beitrag |
Hätti
Hält's aus hier
Beiträge: 8
|
Verfasst: 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:
Delphi-Quelltext
-> löscht einfach den letzten Datensatz und nicht den gewünschten
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
      
Beiträge: 120
Win XP
2005 Prof
|
Verfasst: 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 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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... 
|
|
pepsen
      
Beiträge: 51
|
Verfasst: 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
      
Beiträge: 120
Win XP
2005 Prof
|
Verfasst: Mi 11.10.06 15:44
Nehme anstatt Stringgrid einfach ein DBGrid und dein Problem sollte behoben sein.
|
|
pepsen
      
Beiträge: 51
|
Verfasst: Mi 11.10.06 16:04
wenn ich das könnte/dürfte wäre schön ^^
is in der Aufgabe vorgegeben 
|
|
NTM
      
Beiträge: 120
Win XP
2005 Prof
|
Verfasst: Mi 11.10.06 16:07
aber wo liegt das Problem die sehen doch gleich aus.
|
|
pepsen
      
Beiträge: 51
|
Verfasst: 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
Delphi-Quelltext 1: 2:
| query1.sql.add('DELETE FROM addyDB'); query1.ExecSQL; |
folgen!
|
|
NTM
      
Beiträge: 120
Win XP
2005 Prof
|
Verfasst: 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
      
Beiträge: 51
|
Verfasst: 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
      
Beiträge: 120
Win XP
2005 Prof
|
Verfasst: 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
      
Beiträge: 51
|
Verfasst: 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 ^^
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 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      
Beiträge: 51
|
Verfasst: 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
Delphi-Quelltext 1:
| rownr := stringgrid1.Cells[0,Arow]; |
und bei ButtonClick filter ich dann das Query nach diesem String und lösche ihn!
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 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      
Beiträge: 51
|
Verfasst: 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
|
Verfasst: So 15.10.06 14:47
funktioniert so
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>
|
|