Solved

TwwDBCombobox in delphi 6

Posted on 2011-03-03
16
1,514 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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:Ephraim Wangoya
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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

737 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