Solved

TwwDBCombobox in delphi 6

Posted on 2011-03-03
16
1,478 Views
Last Modified: 2012-05-11
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
Comment
Question by:kevincox29
  • 9
  • 6
16 Comments
 
LVL 24

Accepted Solution

by:
jimyX earned 500 total points
ID: 35027770
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
 
LVL 24

Expert Comment

by:jimyX
ID: 35027831
Or you can read the value from the DataSource/DataSet.
0
 

Author Comment

by:kevincox29
ID: 35027944
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
Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 
LVL 24

Expert Comment

by:jimyX
ID: 35028039
Use it OnChange not onClick.
0
 
LVL 24

Expert Comment

by:jimyX
ID: 35028056
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
 

Author Comment

by:kevincox29
ID: 35028087
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
 

Author Comment

by:kevincox29
ID: 35028152
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
 
LVL 24

Expert Comment

by:jimyX
ID: 35028293
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
 
LVL 24

Expert Comment

by:jimyX
ID: 35028466
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
 

Author Comment

by:kevincox29
ID: 35028510
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
 
LVL 24

Expert Comment

by:jimyX
ID: 35028615
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
 

Author Comment

by:kevincox29
ID: 35028769
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
 

Author Comment

by:kevincox29
ID: 35028779
DESCRIPTION VARCHAR2(60)
0
 
LVL 24

Expert Comment

by:jimyX
ID: 35029274
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
 
LVL 24

Expert Comment

by:jimyX
ID: 35029592
Also have you considered using DBLookupComboBox?
0
 
LVL 32

Expert Comment

by:ewangoya
ID: 35173879

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

Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to convert wav to mp3 in delphi 9 202
Communication Between RC4 Delphi <-> PHP 3 115
Working with hours 3 58
Create a path if not exists 7 78
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

803 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question