Solved

TwwDBCombobox in delphi 6

Posted on 2011-03-03
16
1,449 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
Comment Utility
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
Comment Utility
Or you can read the value from the DataSource/DataSet.
0
 

Author Comment

by:kevincox29
Comment Utility
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
 
LVL 24

Expert Comment

by:jimyX
Comment Utility
Use it OnChange not onClick.
0
 
LVL 24

Expert Comment

by:jimyX
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 24

Expert Comment

by:jimyX
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
DESCRIPTION VARCHAR2(60)
0
 
LVL 24

Expert Comment

by:jimyX
Comment Utility
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
Comment Utility
Also have you considered using DBLookupComboBox?
0
 
LVL 32

Expert Comment

by:ewangoya
Comment Utility

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

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…

763 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

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now