doktorZee wrote:
Salutations all, I'm working on a Perl script to migrate data through
ODBC from a series of tables on one DBMS to a single table on a
separate DBMS, with access connections defined in the ODBC Sources
Win32 control panel applet.

It works fine on my computer and a co-worker's computer, which both
run Windows XP. However, on the client's computer which runs Windows
2000, it gives an ODBC error. All three setups use MS SQL 2000 and
ActiveState Perl 5.8.8.  The operating system is the only difference,
and why it could be the source of the problem I don't know.

On Windows 2000 I get:
DBD:ODBC::st fetchrow_arrayref failed: [Microsoft][ODBC SQL Server
Driver] String data, right truncation (SQL-01004)(DBD: st_fetch/
SQLFetch (long truncated DBI attribute LongTruncOK not set and/or
LongReadLen too small) err=-1)

I searched online for the error and all I could find was that this
should work:
$dbh->{LongReadLen} = 16384;
$dbh->{LongTruncOk} = 1;

I tried this, and it does not impair the functionality on the XP
systems but it does not resolve the problem. I also did some analysis
on the data, and found that the source DB has data that is 100 or 200
characters (nvarchar) and the target DB takes 255 characters of
nvarchar. The largest piece of data is 80 characters, so there really
shouldn't be any truncation problem to begin with.  Any help would be
greatly appreciated, as its been weeks of no leads or success and I'm
going insane.  Thanks again.


Can you send me DBI_TRACE=15 output from running your script on the broken machine. The only way to get data truncated error on a fetch is if the buffer DBD::ODBC supplies is too small. If you really have set LongTruncOk then the error should be ignored by DBD::ODBC.

It would also be useful to know:

DBI version
DBD::ODBC version
ODBC Driver Manager version (see your DataSources in control panel)
version of the ODBC driver you are using (as above)

Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com

Reply via email to