Entwickler-Ecke

Datenbanken - Doppelter Eintrag


gd0123456 - So 08.04.12 13:57
Titel: Doppelter Eintrag
Hi, hab folgendes Problem.

Hab ein Listview mit checkboxen. Im Ereignis ListView1MouseUp frage ich ab ob die checkbox angeklickt wurde.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm3.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Item: TListItem;
  HitTest: THitTests;
begin
  Item := ListView1.GetItemAt(x, y);
  HitTest := ListView1.GetHitTestInfoAt(x, y);
  if (Item <> niland (HitTest = [htOnStateIcon]) then
  begin
    if (item.Checked = true) then
    begin
       adocommand1.CommandText := 'insert into rechnung (kundenid,bezeichnung,netto,datum,recid) values ('+edit1.Text+',"'+item.SubItems[0]+'","'+item.SubItems[1]+'","2009-20-22",'+edit2.Text+')';
       adocommand1.Execute;
    end;
   end;
end;


Funktioniert auch soweit, jedoch habe ich das Problem dass es mir zweimal den Datensatz in die Datenbank schreibt. Setze ich nachdem execute ein showmessage dann schreibt er nur einmal. also genau so wie ich es brauche.

Hat jemand eine Idee bzw. kann mir helfen warum das passiert?

Danke

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Delete - So 08.04.12 16:37

=> OnItemChecked


gd0123456 - Mo 09.04.12 13:50

Danke für die Antwort, hab ich auch schon ausprobiert, jedoch hat die funktion den Nachteil, dass ich die Spalten nicht auslesen kann. Also kann zwar überprüfen ob die Checkbox aktiviert wurde jedoch muss die ganze Spalte markiert sein, dass ich die Werte bekomme.


Xion - Di 10.04.12 18:08

Gucke mal, wer denn der "Sender" beim OnMouseUp ist. Wenn das zweimal aufgerufen wird, dann vielleicht mit verschiedenen Sendern. Dann würde ja if Sender=??? then zu Beginn ausreichen, um die Funktion nur einmal auszuführen


gd0123456 - Mi 11.04.12 03:52

Ok so hab die Lösung gefunden, naja man muss halt ein wenig das Hirn einschalten wenn man programmiert. Man sollte es auch in der richtigen Funktion schreiben OnListviewMouseDown und nicht onListviewMouseUp. OnListviewMouseUp wird zweimal aufgerufen einmal beim Draufklicken und einmal beim Loslassen. Die Lösung kann so nah und doch so fern sein.

Trotzdem danke für die Unterstützung.