Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TADODataSet -> Datensatz über Symbol löschen (https://www.delphipraxis.net/78330-tadodataset-datensatz-ueber-symbol-loeschen.html)

hirnstroem 3. Okt 2006 13:24

Datenbank: MS Access • Version: kA • Zugriff über: ADO

TADODataSet -> Datensatz über Symbol löschen
 
'loha Folks,

folgende Situation:

In einem IWDBGrid werden zusätzlich zu den angezeigten Spalten, Spalten mit Symbolen (auf allen Zeilen ausser der Titelzeile) eingefügt. Diesen Symbolen sollen Funktionen hinterlegt werden, welche den jeweiligen Datensatz betreffen (Delete, Edit, Insert, etc.).

Und hier beginnen meine Schwierigkeiten. Mit der folgenden Prozedur wird ein Symbol hinzugefügt, in diesem Fall zum Löschen:

Delphi-Quellcode:
procedure TfrmRightManagementSelect.grdLoginUserRenderCell(ACell: TIWGridCell;
  const ARow, AColumn: Integer);
begin
  if ARow <> 0 then
  begin
    if AColumn = 4 then
    begin
      with ACell do
      begin
        Control := TIWImageFile.Create(Self);
        with TIWImageFile(Control) do
        begin
          ImageFile.Filename := './delete.gif';
//          OnClick := ;
        end;
      end;
    end;
  end;
end;
Dem bisher auskommentierten OnClick Ereignis möchte ich folgende Prozedur zuweisen:

Delphi-Quellcode:
procedure TfrmRightManagementSelect.grdLoginUserColumns4Click(ASender: TObject;
  const AValue: string);
begin
  DataSet.Delete;
end;
Delphi-Quellcode:
OnClick := grdLoginUserColumns4Click;
^^ dies Funktioniert nicht. Die Fehlermeldung beim Kompilieren lautet:
[Pascal Fehler] URightManagementSelect.pas(201): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'

Nun leuchtet dies an und für sich auch noch ein, da das OnClick Ereignis nur den Parameter "Sender: TObject" kennt.

Wie kann ich nun über dieses Symbol die Prozedur aufrufen? Den Wert AValue müsste man irgendwie ja noch übergeben...aber irgendwie schnall ich da ab.

Grüsse
hirnstroem

marabu 3. Okt 2006 14:26

Re: TADODataSet -> Datensatz über Symbol löschen
 
Hallo,

an der Signatur des event handlers kannst du nichts ändern. Speichere den Primärschlüssel des entsprechenden Datensatzes im tag property von TIWImageFile und werte diese property im OnClick() aus.

Grüße vom marabu

hirnstroem 4. Okt 2006 07:41

Re: TADODataSet -> Datensatz über Symbol löschen
 
Okay, vielen Dank marabu, gelöscht wird jetzt etwas, leider aber nicht die gewünschte Zeile. Dies kommt daher, dass ich wohl den falschen Index zuweise, nur hat die Borland-Hilfe bisher noch keinen aufschluss bringen können.

Ich versuche den Tag momentan folgendermassen mit dem entsprechenden Index zu versehen:

Delphi-Quellcode:
Tag := DataSet.FieldByName('UserID').AsInteger;
Delphi-Quellcode:
Tag := DataSet.RecNo; // hab ich auch schon durch
^^ Nun ja, gelöscht wird damit immer nur der erste Datensatz.

marabu 4. Okt 2006 07:57

Re: TADODataSet -> Datensatz über Symbol löschen
 
Guten Morgen.

Da ich keinen ausreichenden Überblick über deinen Quellcode besitze, solltest du mal mit Haltepunkten arbeiten um festzustellen, ob denn auch die richtigen Werte in die tag property geschrieben bzw. aus ihr gelesen werden.

Grüße, marabu

hirnstroem 4. Okt 2006 08:30

Re: TADODataSet -> Datensatz über Symbol löschen
 
Jetzt, behaupte ich einmal, funktioniert es.

OnRenderCell wird dies mit der entsprechenden Zeile / Spalte gemacht:

Delphi-Quellcode:
  with ACell do
  begin
    Control := TIWImageFile.Create(Self);
    with TIWImageFile(Control) do
    begin
      ImageFile.Filename := './delete.gif';
      Hint := 'Datensatz löschen';
      Tag := DataSet.RecNo;
      OnClick := GridDelete;
    end;
  end;
Und die GridDeleteProzedur sieht so aus:

Delphi-Quellcode:
procedure TfrmRightManagementSelect.GridDelete(Sender: TObject);
begin
  DataSet.First;
  while DataSet.RecNo <> (Sender as TIWImageFile).Tag do
  begin
    DataSet.Next;
  end;
  DataSet.Delete;
end;
An und für sich keine Hexerei -.-

Danke nochmals!
hirnstroem

marabu 4. Okt 2006 08:39

Re: TADODataSet -> Datensatz über Symbol löschen
 
RecNo ist gut, solange der DataSet nicht zwischendurch geschlossen und neu geöffnet wird. Die Schleife muss übrigens nicht sein:

Delphi-Quellcode:
procedure TfrmRightManagementSelect.GridDelete(Sender: TObject);
begin
  DataSet.RecNo := (Sender as TIWImageFile).Tag;
  DataSet.Delete;
end;
Grüße, marabu

hirnstroem 5. Okt 2006 08:28

Re: TADODataSet -> Datensatz über Symbol löschen
 
Grml, gleiche Baustelle, anderes Problem.

OnCreate (Form) wird die folgende Prozedur aufgerufen, mit dem eigentlichen Ziel, Symbole zum sortieren einzelner Spalten auf die Titelzeile zu legen:

Delphi-Quellcode:
procedure TfrmDeviceManagementSelect.SetSortSymbols(Sender: TObject);
begin
  with (grdDevice.Columns.Items[0] as TIWGridCell) do
  begin
    Control := TIWImageFile.Create(Self);
    with TIWImageFile(Control) do
    begin
      ImageFile.Filename := './sort_no.gif';
      OnClick := SortAddress;
    end;
  end;
end;
Leider macht die Prozedur etwas anderes. Es wird zum einen anstatt in die jeweilige Titelzelle, in die darunterliegende erste Datenzelle geschrieben und zum anderen wird keine Eigenschaft "Title" angeboten, mit welcher dann in die Titelzeile geschrieben werden kann.

Es handelt sich immer noch um IntraWeb Komponenten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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 by Thomas Breitkreuz