On 22/06/12 03:51, easwa...@nationwide.com wrote:
Hello,
I would appreciate your help with the following question.
I'm using DBD::ODBC to connect to a pervasive database. There is a column
in the table that is defined as LONGVARCHAR - 31999 bytes.
The fetch statement on the column fails with the following error
[Pervasive][ODBC Client Interface][LNA][Pervasive][ODBC Engine
Interface]Data truncated column 1. (SQL-01004)
[Pervasive][ODBC Client Interface]Data truncated column 1. (SQL-01004)
I set LongReadLen to 31999 and LongTruncOk to False to resolve the issue.
I don't get an error now, but the data is getting truncated to 80
characters.
Is there an issue with the Pervasive ODBC driver not supporting
LongReadLen?
my $sql_col1;
$dbh->{LongReadLen} = 31999;
$dbh->{LongTruncOk} = False;
print $dbh->{LongReadLen};
if ( !$sth->bind_columns( undef, \$sql_col1 ) ) {
print $LOG_FH
"Error encountered when binding columns in SQL statement $sql_to_run -
$DBI::errstr\n";
$rc = 1;
return ( $rc, \@db_records );
}
my $reccount = 0;
while ( $sth->fetch ) {
#Remove trailing spaces
$sql_col1 =~ s/\s+$//;
$db_records[$reccount] = $sql_col1;
$reccount++;
}
Thanks,
Saraswathi
Neither LongReadlen or LongTrunkOk are features of the ODBC driver - they are
DBI/DBD attributes.
The above code is not sufficient to really tell what you are doing and you
cannot expect to set LongReadLen/LongTrunkOk on a connection handle after the
statement was created and have it take affect in the statement.
Cut this down to a small example and run it with DBD_VERBOSE=DBD=x.log and send
the log. For DBD tracing you'll need a recent DBI and DBD::ODBC so if you are
not in that position substitute 15 for DBD.
BTW, DBI has an attribute to ChopBlanks for you for char columns.
Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com