Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DBLookupcombobox bei auswahl Actionlist / Action ausführen (https://www.delphipraxis.net/165968-dblookupcombobox-bei-auswahl-actionlist-action-ausfuehren.html)

klaus9 24. Jan 2012 12:26

Datenbank: mybase • Version: 1 • Zugriff über: delphi

DBLookupcombobox bei auswahl Actionlist / Action ausführen
 
Hallo,

habe ein kleines Problem..

Ich habe eine DBLookupCombobox und würde gerne bei Auswahl aus der DBLookupcombo eine Action aus einer Actionlist ausführen. Bei normalen Comboboxen habe ich es hinbekommen, folgendermaßen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Items.AddObject('>Bitte wählen', TObject(0));
ComboBox1.ItemIndex := 0;
ComboBox1.Items.AddObject('test1', TObject(1111));
ComboBox1.Items.AddObject('test2', TObject(2222));
ComboBox1.Items.AddObject('test3', TObject(3333));
Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);

 begin
if
    Assigned( ComboBox1.Items.Objects[ ComboBox1.ItemIndex ] ) and
    ( ComboBox1.Items.Objects[ ComboBox1.ItemIndex ] is TAction )
  then
    TAction( ComboBox1.Items.Objects[ ComboBox1.ItemIndex ] ).Execute;

end;

Wie funktioniert der Code bei einer DBLookupCombobox hin zu sagen, er soll mir den Wert der Tabelle Spalete
"ID" anzeigen und wenn ID xy ausgewählt wird soll er eine Action ausführen z.B. bei ID 1 = Action1 usw. das würde mir schon sehr viel weiterhelfen.

Für jeden Tipp bin ich sehr dankbar.

mikhal 24. Jan 2012 13:34

AW: DBLookupcombobox bei auswahl Actionlist / Action ausführen
 
Bei einer DBLookupComboBox arbeitest du nicht mit den Properties der Komponente, sondern wertest das zugrundeliegende DataSet aus. Letztlich hast du wahrscheinlich eine ID und einen angezeigten Wert in deinem DataSet. Ob du jetzt auf die ID oder den Wert reagierst, bleibt dir überlassen, ich verwende im Allgemeinen die ID für die weitere Verarbeitung.

Grüße
Mikhal

klaus9 24. Jan 2012 17:04

AW: DBLookupcombobox bei auswahl Actionlist / Action ausführen
 
Ja hab ich mir auch so gedacht.

habe eine DBLookupcombobox und ein dbedit.text feld und diese verbunden und bei auswahl gibt mir
die DBLookup an das DBedit dieses ID feld rüber und im dbedit.feld habe ich als code hinterlegt

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBCtrls, DB, DBClient, StdCtrls, Mask, AppEvnts, ActnList;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    ClientDataSet1: TClientDataSet;
    DBLookupComboBox1: TDBLookupComboBox;
    DBEdit1: TDBEdit;
    ActionList1: TActionList;
    Action1: TAction;
    Edit1: TEdit;
    procedure Action1Execute(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure DBEdit1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Action1Execute(Sender: TObject);
begin

showmessage('test');
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
if (Edit1. Text = '1') then
showmessage('test');

if (Edit1. Text = '2') then
showmessage('test')
end;

procedure TForm1.DBEdit1Change(Sender: TObject);
begin
//if (DBEdit1.Text = '1111') then
//showmessage('test');

if (DBEdit1.Text = '1111') then
Action1.execute else
showmessage('nichts');
end;


procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.
soweit so gut, nur jetzt kommt beim ausführen ein richtiges ergebnis, aber dann im anschluss eine Fehlermeldung. :(

Zugriffsverletzung bei adresse 004849B3


und dann mal eine andere frage, wenn ich in einem edit text feld eine Spalte aus einer Datenbank einlesen möchte wie mache ich das, z.B. spalte 1 zeile 1 anzeigen lassen möchte..wie funktioniert das


das geht
Delphi-Quellcode:
edit1.text := datasource1.dataset.fieldsvalue['name'];

mikhal 24. Jan 2012 18:33

AW: DBLookupcombobox bei auswahl Actionlist / Action ausführen
 
Du frickelst wieder mit den Properties der Komponenten herum. Hinter den DB-Komponenten verbirgt sich immer ein DataSet, sei es eine Query oder ein Table. Bei Zugriff auf Datenbanken arbeitest du immer nur mit dem DataSet, die DB-Komponenten dienen nur der Darstellung.

In deinem Fall wäre das wahrscheinlich eher so:
statt
Delphi-Quellcode:
if (DBEdit1.Text = '1111') then
 Action1.execute else
 showmessage('nichts');
in der Methode DBEdit1.Change sollte es etwa so ausehen...

Delphi-Quellcode:
if ClientDataSet1.FindField('Test').AsString = '1111' then
  Action1.Execute
else
  ShowMessage('nichts');
Warum DBEdit wenn du bereits eine DBLookupComboBox einsetzt?

Grüße
Mikhal

klaus9 25. Jan 2012 14:33

AW: DBLookupcombobox bei auswahl Actionlist / Action ausführen
 
dankeschön klappt so :-)

Gruß
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz