• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1614
  • Last Modified:

TwwDBCombobox in delphi 6

I have a TwwDBCombobox  with a list of values. How do I get the selected through a procedure,
say, the TwwDBCombobox   name is FINGER_L. When it'z onclick event fires, I call this procedure

procedure TFPquality.FINGER_LClick(Sender: TObject);
  var  description : String;
     begin
       description :=   FPquality.FINGER_L.Field.AsString;
     end;

However this does not bring the value. I need to use the value of the description in another procedure. Anybody can help?
0
kevincox29
Asked:
kevincox29
  • 9
  • 6
1 Solution
 
jimyXCommented:
Since the ComboBox already hold the value read it directly from there:

procedure TFPquality.FINGER_LClick(Sender: TObject);
var  description : String;
begin
  description :=   FPquality.FINGER_L.Text;
end;

Open in new window

0
 
jimyXCommented:
Or you can read the value from the DataSource/DataSet.
0
 
kevincox29Author Commented:
hi Jimymx,

stilll. onclick event of my FINGER_L TwwDBCombobox does not work . Here is the whole pascal code,


unit FPquality1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,sndkey32,
  Dialogs, Grids, Wwdbigrd, Wwdbgrid, DB, Wwdatsrc, OracleData, Oracle,
  OraclewwData, wwDataInspector, ExtCtrls, StdCtrls, wwcheckbox, CheckLst,
  fcdbtreeview, Buttons, wwdbdatetimepicker, Mask, wwdbedit, Wwdotdot,
  Wwdbcomb, ComCtrls, DBCtrls, wwclearbuttongroup, wwradiogroup,
  BiDiDBNavigator;

type

    TFPquality = class(TForm)
    FPQUALITY_T: TOraclewwDataSet;
    LIST_T: TOraclewwDataSet;
    FPQUALITY_S: TwwDataSource;
    FPQUALITY_TFPQUALITY_RN: TFloatField;
    FPQUALITY_TCUSTODY_RN: TFloatField;
    FPQUALITY_TQUALITY_TYPE: TStringField;
    FPQUALITY_TCODE: TStringField;
    FPQUALITY_TDESCRIPTION: TStringField;
    Panel2: TPanel;
    Panel3: TPanel;
    FINGER_L: TwwDBComboBox;
    ADMIN_L: TwwDBComboBox;
    FingerGrid: TwwDBGrid;
    AdminGrid: TwwDBGrid;
    Panel1: TPanel;
    DBNavigator1: TBiDiDBNavigator;
    CODE_T: TOraclewwDataSet;

    procedure DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn);
    procedure ADMIN_LDropDown(Sender: TObject);
    procedure FINGER_LDropDown(Sender: TObject);
    procedure fpquality_TAfterInsert(DataSet: TDataSet);
    procedure FINGER_LClick(Sender: TObject);




  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FPquality: TFPquality;
  Captype:      String;
  Finger_rn:   LongInt;
  description: String;

    {$IFDEF WIN32}
      Function FPFAILED_START(db,un,pw,cap: String; rn: LongInt): LongInt; StdCall;
     {$ELSE}
     Function FPFAILED_START(db,un,pw,cap: String; rn: LongInt): LongInt;
      {$ENDIF}

implementation
Uses HintForm1;
{$R *.dfm}
{--------------------------------------------------------------}
Function FPFAILED_START(db,un,pw,cap: String; rn: LongInt) : LongInt;

begin
 Screen.Cursor := crSQLWait;
 Captype:= cap;
 Finger_rn:= rn ;


  try
    HINTFORM_START(db,un,pw);
    FPquality := TFPquality.Create(Application);

    with FPquality do begin
     AdminGrid.Color := TColor(cini.ReadInteger('SETS', 'GRIDCOLOR', clWhite));
     AdminGrid.TitleColor := TColor(cini.ReadInteger('SETS', 'CAPTIONCOLOR', 10314565));
     AdminGrid.TitleFont.Color := TColor(cini.ReadInteger('SETS', 'CAPTIONFONTCOLOR', clWhite));

     FingerGrid.Color := TColor(cini.ReadInteger('SETS', 'GRIDCOLOR', clWhite));
     FingerGrid.TitleColor := TColor(cini.ReadInteger('SETS', 'CAPTIONCOLOR', 10314565));
     FingerGrid.TitleFont.Color := TColor(cini.ReadInteger('SETS', 'CAPTIONFONTCOLOR', clWhite));

     FINGER_L.Color :=  FingerGrid.Color ;
     ADMIN_L.Color := AdminGrid.Color ;

     if Captype = 'A'then begin


       Panel3.Visible := True;
       Panel3.Align := alClient;

     end else begin

       Panel2.Visible := True;
       Panel2.Align := alClient;
     end;
     Caption := caption + '['+ cap + ']';

      With FPQUALITY_T do begin
       close;
       sql.Clear;
       DeleteVariables;
       DeclareVariable('rn', otInteger);
       DeclareVariable('type', otString);
       sql.Add('SELECT FPQUALITY.*, FPQUALITY.ROWID FROM MAISY.FPQUALITY');
       sql.Add('WHERE FPQUALITY_RN = :rn ');
       sql.Add('AND (QUALITY_TYPE = :type)');
       SetVariable('rn', Finger_rn);
       SetVariable('type', Captype);
       Open;
     end;
  ShowModal;
 
   end;
  finally
     Screen.Cursor := crDefault;
   With FPquality do begin
   if (FPQUALITY_S.State = dsEdit) OR (FPQUALITY_S.State = dsInsert) then
       FPQUALITY_T.Post;
     Result := FPQUALITY_T.RecordCount;
              Free;
   end;
   HINTFORM.Close;
      end;
end;


 {-------------------------------------------------------------------------}
 
procedure TFPquality.ADMIN_LDropDown(Sender: TObject);
begin
 if ADMIN_L.Items.Count = 0 then begin
   With LIST_T do begin
     close;
     sql.Clear;
     sql.add('SELECT FPQUALITYADMIN.* FROM MLIST.FPQUALITYADMIN  ORDER BY DESCRIPTION');
     Open;
     while not eof do begin
       ADMIN_L.Items.Add(FieldByName('DESCRIPTION').AsString);
       next;
     end;
     close;
   end;
 end;
end;




{-------------------------------------------------------------------------}

procedure TFPquality.FINGER_LDropDown(Sender: TObject);
begin
 if FINGER_L.Items.Count = 0 then begin
   With LIST_T do begin
     close;
     sql.Clear;
     sql.add('SELECT FPQUALITYLAB.* FROM MLIST.FPQUALITYLAB  ORDER BY DESCRIPTION ');
     Open;
     while not eof do begin
       FINGER_L.Items.Add(FieldByName('DESCRIPTION').AsString);
       next;
     end;
     close;
   end;
 end;
end;


{-------------------------------------------------------------------------}

procedure TFPquality.fpquality_TAfterInsert(DataSet: TDataSet);


var code :String;

begin


 With CODE_T do begin
       close;
       sql.Clear;
       DeleteVariables;
       DeclareVariable('desclist', otString);
       sql.Add('SELECT FPQUALITYLAB.* FROM MLIST.FPQUALITYLAB ');
       sql.Add('WHERE DESCRIPTION = :desclist');
       SetVariable('desclist', description);
       Open;

       code := FieldByName('CODE').AsString;

       close;
       end;


 FPQUALITY_TCUSTODY_RN.AsInteger := Finger_rn;
 FPQUALITY_TQUALITY_TYPE.Value := captype;
 FPQUALITY_TCODE.Value :=code ;
end;


procedure TFPquality.DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn);
begin
 case Button of
   nbInsert :  Begin
                 if captype = 'A' then begin
                   panel1.Visible := True;
                   DBNavigator1.Visible := True;
                   AdminGrid.SetFocus;
                   Sendkeys('{HOME}',False);
                   AdminGrid.DataSource.DataSet.Append;
                 end else begin
                   FingerGrid.SetFocus;
                   FingerGrid.DataSource.DataSet.Append;
                 end;
                 Abort;
               end;
     nbEdit :  Begin
                 if captype = 'A' then
                   AdminGrid.SetFocus
                 else
                   FingerGrid.SetFocus;
               end;
     nbDelete: Begin
                 if Askdlg_New('Please Confirm','Delete record?','CONFIRM','Yes','No') = False then
                   Abort;
               end;
 end;
 end;


 procedure TFPquality.FINGER_LClick(Sender: TObject);
      var  index   : Integer;
          begin

           description :=   FPquality.FINGER_L.Text;


           end;

end.





I am trying to get the selected value of ADMIN_L through TFPquality.FINGER_LClick and try to use in theprocedure TFPquality.fpquality_TAfterInsert(DataSet: TDataSet).

All work fine, but I ma unable to get the description value from the ADMIN_L  twwdbcombobox . where is the problem??
 
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
jimyXCommented:
Use it OnChange not onClick.
0
 
jimyXCommented:
So it becomes:
procedure TFPquality.FINGER_LChange(Sender: TObject);
var
  index   : Integer;// why it's declared
begin
  description :=   FPquality.FINGER_L.Text;
end;

Open in new window

0
 
kevincox29Author Commented:
Onchange also does not work.. onExit works but, it takes the previous value selection. may i need to change any property of the ADMIN_L
0
 
kevincox29Author Commented:
procedure TFPquality.FINGER_LClick(Sender: TObject);
      begin
             description :=   FPquality.FINGER_L.Text;
    end;

This is the procedure. I remove the
 var
  index   : Integer; where is the problem??
0
 
jimyXCommented:
Sorry, I was thinking you are targeting the FINGER_L items. If you want the item from ADMIN_L then:
procedure TFPquality.FINGER_LChange(Sender: TObject);
var
  index   : Integer;// why it's declared
begin
  description :=   FPquality.ADMIN_L.Text;
end;

Open in new window

0
 
jimyXCommented:
You can use it directly in that procedure ".fpquality_TAfterInsert" as follows:
procedure TFPquality.fpquality_TAfterInsert(DataSet: TDataSet);
var code :String;
begin
 With CODE_T do begin
       close;
       sql.Clear;
       DeleteVariables;
       DeclareVariable('desclist', otString);
       sql.Add('SELECT FPQUALITYLAB.* FROM MLIST.FPQUALITYLAB ');
       sql.Add('WHERE DESCRIPTION = :desclist');
       SetVariable('desclist', FPquality.ADMIN_L.Text);
       Open;

       code := FieldByName('CODE').AsString;

       close;
       end;

 FPQUALITY_TCUSTODY_RN.AsInteger := Finger_rn;
 FPQUALITY_TQUALITY_TYPE.Value := captype;
 FPQUALITY_TCODE.Value :=code ;
end;

Open in new window

0
 
kevincox29Author Commented:
sorry, I do want the FINGER_L selected items only, not ADMIN_L. I have written this procedure for the onchange event of the FINGER_L

procedure TFPquality.FINGER_LClick(Sender: TObject);
 begin
 description :=   FPquality.FINGER_L.Text;
 end;

Again I use the description string value in the procedure

TFPquality.fpquality_TAfterInsert(DataSet: TDataSet);


var code :String;

begin


 With CODE_T do begin
       close;
       sql.Clear;
       DeleteVariables;
       DeclareVariable('desclist', otString);
       sql.Add('SELECT FPQUALITYLAB.* FROM MLIST.FPQUALITYLAB ');
       sql.Add('WHERE DESCRIPTION = :desclist');
       SetVariable('desclist', description);
       Open;
   code := FieldByName('CODE').AsString;
close;
 end;
FPQUALITY_TCUSTODY_RN.AsInteger := Finger_rn;
FPQUALITY_TQUALITY_TYPE.Value := captype;
FPQUALITY_TCODE.Value :=code ;
end;,


I am unable to get the description value, where is the problem?
0
 
jimyXCommented:
What is the DataType of the field DESCRIPTION in the table MLIST.FPQUALITYLAB? if it is a String then you need to add quotes to your parameter, so the SQL in the procedure fpquality_TAfterInsert becomes:

       sql.Add('SELECT FPQUALITYLAB.* FROM MLIST.FPQUALITYLAB ');
       sql.Add('WHERE DESCRIPTION = ('':desclist'')');
0
 
kevincox29Author Commented:
still no working. Can U give a sample code to get the selected value of a Twwdbcombobox?
which event is getting getting every selection as best?
0
 
kevincox29Author Commented:
DESCRIPTION VARCHAR2(60)
0
 
jimyXCommented:
Then you should set the datatype of the parameter to String or you can add quotes to "description" and use it in the SQL as follows:
TFPquality.fpquality_TAfterInsert(DataSet: TDataSet);
var code :String;
begin
 With CODE_T do begin
       close;
       sql.Clear;
       DeleteVariables;
       DeclareVariable('desclist', otString);
       sql.Add('SELECT FPQUALITYLAB.* FROM MLIST.FPQUALITYLAB ');
       sql.Add('WHERE DESCRIPTION = '+ QuotedStr(description));
       //SetVariable('desclist', description);
       Open;
   code := FieldByName('CODE').AsString;
close;
 end;
FPQUALITY_TCUSTODY_RN.AsInteger := Finger_rn;
FPQUALITY_TQUALITY_TYPE.Value := captype;
FPQUALITY_TCODE.Value :=code ;
end;

Open in new window

0
 
jimyXCommented:
Also have you considered using DBLookupComboBox?
0
 
Ephraim WangoyaCommented:

Most likely your value is not yet saved in the Field at OnClick or OnChange event. Have you tried OnCloseUp, that should pick up the selected item

 procedure TFPquality.FINGER_LOnCloseUp(Sender: TObject);
 begin
     description :=  (Sender as TwwDBComboBox).Text;
 end;


0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 9
  • 6
Tackle projects and never again get stuck behind a technical roadblock.
Join Now