Aboveyou has asked for the wisdom of the Perl Monks concerning the following question:

Hello All, im writing a phone book program (TK) and im using MS access database for user deatils (fullname,phone,ext,mobile,e-mail) here is my "trouble" code:
sub copy_entry { $copy_text = $dude->get(); chomp($copy_text); $queryHandle = $dbshop->prepare(" SELECT * FROM Department WHERE ( Ext + = '$copy_text' OR Mobile = '$copy_text' OR [E-Mail] = '$copy_text' +OR [Full Name] = '$copy_text' OR [Direct Number] = '$copy_text' ) "); $queryHandle->execute() or die $DBI::errstr; while (my @row = $queryHandle->fetchrow) { $dude2->insert("end", $row[0]); $dude3->insert("end", $row[1]); $dude4->insert("end", $row[2]); $dude5->insert("end", $row[3]); $dude6->insert("end", $row[4]); } $queryHandle->finish();
my probelm is when there are more then 2 table name a like (ex, full name = johnm, johnd) it will display it in the same table (row[0]) as follow : in Coulmn (Fullname) in the 1'st table row[0] will looke like : " johnm johnd". row1 will also display the ext number the same (Ext) "113 114" and so on... my question is how can i seperate them into 2 (or more in case of 3,4,5 names a like) seperate lines each user with his own details.

Replies are listed 'Best First'.
Re: Perl TK
by zentara (Cardinal) on Feb 01, 2009 at 18:22 UTC
    It's hard for me to deduce the ref type of $row[0] ( I'm not an Access expert), but I'm guessing it returns an array or list, and it prints it out. You could do a few tests, like the following untested code. At least it will show you how to debug the output. Also see fetchall_arrayref with slice and row count for a way to force array context.
    while (my @row = $queryHandle->fetchrow) { my $reftype = ref $row[0]; # now see if it's an array, if so see it's scalar count if ($reftype eq 'ARRAY'){ my $count = scalar $reftype; } # now loop thru all the array by $count foreach my $cnt( 0.. $count){ $dude2->insert("end", $row[0][$count] ); ... .... } ..... ..... }

    I'm not really a human, but I play one on earth Remember How Lucky You Are