Here is how I populate my textfields on my maintenance screen when a user clicks a ListView item.

The index to the record in the database is stored as the last column in each ListView row so I can

Use it to quickly/easily lookup the database row to fetch the memo fields in their entirety.


sub ListView_ItemClick {


        my $ls_text="";           #-- ls for local scalar

        my $ls_ret="";

        my $ls_error="";

        my $ls_index="";

        my $ls_sqltxt="";

        my %lh_data=();          #-- lh for local hash


       $gs_item = shift;           #-- gs for global scalar


       $ls_ret = Open_Database();  if ($ls_ret) {return 1;}


       %lh_data  = $LV->ItemInfo($gs_item,36);  #-- record index


       $ls_index = $lh_data{-text}; 


       $ls_sqltxt="SELECT Comments, [In House Comments], [Analysis Proposed Fix], Issue FROM Tracker WHERE Index = $ls_index";


       $ls_ret = $gs_db->Sql($ls_sqltxt);


       If ($ls_ret) {

             $ls_error=$gs_db->Error();      #-- get database error msg


             Win32::GUI::MessageBox($W,$ls_error, "CPS Issue Tracker - Maintenance Screen - SQL Error($ls_ret)",16,);

             Win32::GUI::MessageBox($W,$ls_sqltxt,"CPS Issue Tracker - Maintenance Screen - SQL Cmd",16,);

             Win32::GUI::MessageBox($W,"Can't Get Memo Fields From Database", "CPS Issue Tracker - Maintenance Screen",64,);

            return 1;





      $ls_text = $gs_db->Data("Comments");                           $TF_Comments->Text($ls_text);

      $ls_text = $gs_db->Data("Analysis Proposed Fix");          $TF_ProposedFix->Text($ls_text);

      $ls_text = $gs_db->Data("In House Comments");             $TF_InHouse->Text($ls_text);

      $ls_text = $gs_db->Data("Issue");                                   $TF_Issue->Text($ls_text);




      #-- additional code for the event follows but not shown here



sub Open_Database() {


       my $ls_FILEDSN="FILEDSN=$gs_cwd\\Tracker.dsn;PWD=Win32Gui102";


       #-- we don't want to show password if an error occurs so use this string as error msg

       my $ls_FILEDSN2="FILEDSN=$gs_cwd\\Tracker.dsn";


      $gs_db = new Win32::ODBC($ls_FILEDSN);


      if (! $gs_db) {

            my $ls_error=Win32::ODBC::Error();


                    "Can't Establish Database Connection using:\n$ls_FILEDSN2\n$ls_error",

                    "CPS Issue Tracker - Error",16,);

            return 1;   


     return 0;



sub Close_Database() {


       undef $gs_db;