Ok -- keeping the long trace here...what I see here is that SQLFetch() (which is supposed to update the field information) doesn't seem to be doing that. The first time through, we see (snipped from trace below)
> fetch col#4 SC_VALUE datalen=0 displ=256 > fetch col#4 SC_VALUE datalen=19 displ=256 The second time through, I see: > fetch col#4 SC_VALUE datalen=19 displ=256 > fetch col#4 SC_VALUE datalen=19 displ=256 I *think* that's a driver problem. You indicated it works in another environment (query analyzer). Is that using the ODBC driver too? How about What driver/version are you using? What database? I'd like to see if I can reproduce here. Regards, Jeff > > Hope this helps > > On Tue, Oct 22, 2002 at 08:54:42AM -0400, Jeff Urlwin wrote: > > > > > > > > Not sure about this one, but it appears that my version > > > ($DBD::ODBC::VERSION = '0.40';) doesn't deal with nulls properly. > > Please upgrade to .45_18, if possible. > > Not possible at the moment. > > > Also, post code, if possible. With select * you usually can't > assume the > > column ordering. Try using fetchrow_hashref and use > Data::Dumper to view > > the contents. > > > $ /usr/bin/perl --version > > This is perl, v5.6.1 built for i386-linux > > > > #!/usr/bin/perl -w > use strict; > > use DBI; > use Data::Dumper; > > my $dbh = &make_dbh(); > > $dbh->trace(9, '/tmp/dbi_trace.log'); > > print "\n\n====FIRST====\n\n"; > > my $sql = q[SELECT convert(varchar(255), str_uniq_id), sc_group_code, > sc_item_code, sc_index, sc_value, sc_last_mod, sc_last_mod_user > FROM strand_content > WHERE sc_group_code = 'MUSIC_CONTENT' > AND str_uniq_id = '94F6C407-D567-11D6-A75A-00508BFCB09E' > AND sc_index = 5 > AND ( (SC_ITEM_CODE = 'DURATION') OR (SC_ITEM_CODE = 'PERFORMER') ) > ]; > > my $sth = $dbh->prepare($sql) or die $dbh->errstr; > $sth->execute() or die $dbh->errstr; > > while(my $data = $sth->fetchrow_hashref()) { > print Dumper $data; > } > > print "\n\n====SWAP ORDER====\n\n"; > > $sql .= ' ORDER BY sc_item_code DESC'; > > $sth = $dbh->prepare($sql) or die $dbh->errstr; > $sth->execute() or die $dbh->errstr; > > while(my $data = $sth->fetchrow_hashref()) { > print Dumper $data; > } > > > > sub make_dbh { > > my $u = 'xxxxxx'; > my $p = 'yyyyyy'; > my $dbh = DBI->connect("dbi:ODBC:DSN=gaffa2;UID=$u;PWD=$p", > { RaiseError => 1, > AutoCommit => 0 }) or die "$DBI::errstr\n"; > > return $dbh; > } > > > __END__ > > > ./sql_file.pl 2> ~/2 > ~/1 > > $ cat ~/1 > > > ====FIRST==== > > $VAR1 = { > '' => '94F6C407-D567-11D6-A75A-00508BFCB09E', > 'SC_ITEM_CODE' => 'DURATION', > 'SC_LAST_MOD' => 'Oct 17 2002 05:02PM', > 'SC_GROUP_CODE' => 'MUSIC_CONTENT', > 'SC_LAST_MOD_USER' => 'RAP Administrator', > 'SC_INDEX' => '5', > 'SC_VALUE' => '' > }; > $VAR1 = { > '' => '94F6C407-D567-11D6-A75A-00508BFCB09E', > 'SC_ITEM_CODE' => 'PERFORMER', > 'SC_LAST_MOD' => 'Oct 17 2002 05:02PM', > 'SC_GROUP_CODE' => 'MUSIC_CONTENT', > 'SC_LAST_MOD_USER' => 'RAP Administrator', > 'SC_INDEX' => '5', > 'SC_VALUE' => 'RICHARD G. MITCHELL' > }; > > > ====SWAP ORDER==== > > $VAR1 = { > '' => '94F6C407-D567-11D6-A75A-00508BFCB09E', > 'SC_ITEM_CODE' => 'PERFORMER', > 'SC_LAST_MOD' => 'Oct 17 2002 05:02PM', > 'SC_GROUP_CODE' => 'MUSIC_CONTENT', > 'SC_LAST_MOD_USER' => 'RAP Administrator', > 'SC_INDEX' => '5', > 'SC_VALUE' => 'RICHARD G. MITCHELL' > }; > $VAR1 = { > '' => '94F6C407-D567-11D6-A75A-00508BFCB09E', > 'SC_ITEM_CODE' => 'DURATION', > 'SC_LAST_MOD' => 'Oct 17 2002 05:02PM', > 'SC_GROUP_CODE' => 'MUSIC_CONTENT', > 'SC_LAST_MOD_USER' => 'RAP Administrator', > 'SC_INDEX' => '5', > 'SC_VALUE' => 'RICHARD G. MITCHELL' > }; > $ cat ~/2 > query = SELECT convert(varchar(255), str_uniq_id), sc_group_code, > sc_item_code, sc_index, sc_value, sc_last_mod, sc_last_mod_user > FROM strand_content > WHERE sc_group_code = 'MUSIC_CONTENT' > AND str_uniq_id = '94F6C407-D567-11D6-A75A-00508BFCB09E' > AND sc_index = 5 > AND ( (SC_ITEM_CODE = 'DURATION') OR (SC_ITEM_CODE = 'PERFORMER') ) > > query = SELECT convert(varchar(255), str_uniq_id), sc_group_code, > sc_item_code, sc_index, sc_value, sc_last_mod, sc_last_mod_user > FROM strand_content > WHERE sc_group_code = 'MUSIC_CONTENT' > AND str_uniq_id = '94F6C407-D567-11D6-A75A-00508BFCB09E' > AND sc_index = 5 > AND ( (SC_ITEM_CODE = 'DURATION') OR (SC_ITEM_CODE = 'PERFORMER') ) > ORDER BY sc_item_code DESC > > > > Finally, post a trace file (set the level = 9) along with the code > > ($dbh->trace(9,'filename.log'). > > > DBI::db=HASH(0x824ad44) trace level set to 9 in DBI 1.21-nothread > -> prepare for DBD::ODBC::db > (DBI::db=HASH(0x824adf8)~0x824ad44 'SELECT convert(varchar(255), > str_uniq_id), sc_group_code, > sc_item_code, sc_index, sc_value, sc_last_mod, sc_last_mod_user > FROM strand_content > WHERE sc_group_code = 'MUSIC_CONTENT' > AND str_uniq_id = '94F6C407-D567-11D6-A75A-00508BFCB09E' > AND sc_index = 5 > AND ( (SC_ITEM_CODE = 'DURATION') OR (SC_ITEM_CODE = 'PERFORMER') ) > ') > > dbih_setup_handle(DBI::st=HASH(0x824ae70)=>DBI::st=HASH(0x824aef4) > , DBD::ODBC::st, 824aec4, Null!) > dbih_make_com(DBI::db=HASH(0x824ad44), DBD::ODBC::st, 200) > dbih_setup_attrib(DBI::st=HASH(0x824aef4), Err, > DBI::db=HASH(0x824ad44)) SCALAR(0x82362b4) (already defined) > dbih_setup_attrib(DBI::st=HASH(0x824aef4), State, > DBI::db=HASH(0x824ad44)) SCALAR(0x82362fc) (already defined) > dbih_setup_attrib(DBI::st=HASH(0x824aef4), Errstr, > DBI::db=HASH(0x824ad44)) SCALAR(0x82362d8) (already defined) > dbih_setup_attrib(DBI::st=HASH(0x824aef4), Handlers, > DBI::db=HASH(0x824ad44)) ARRAY(0x824adbc) (already defined) > dbih_setup_attrib(DBI::st=HASH(0x824aef4), Debug, > DBI::db=HASH(0x824ad44)) 9 (already defined) > dbih_setup_attrib(DBI::st=HASH(0x824aef4), FetchHashKeyName, > DBI::db=HASH(0x824ad44)) 'NAME' (already defined) > dbih_setup_attrib(DBI::st=HASH(0x824aef4), HandleError, > DBI::db=HASH(0x824ad44)) undef (not defined) > ignore named placeholders = 0 > dbd_st_prepare'd sql f136653576 > SELECT convert(varchar(255), str_uniq_id), sc_group_code, > sc_item_code, sc_index, sc_value, sc_last_mod, sc_last_mod_user > FROM strand_content > WHERE sc_group_code = 'MUSIC_CONTENT' > AND str_uniq_id = '94F6C407-D567-11D6-A75A-00508BFCB09E' > AND sc_index = 5 > AND ( (SC_ITEM_CODE = 'DURATION') OR (SC_ITEM_CODE = 'PERFORMER') ) > > <- prepare= DBI::st=HASH(0x824ae70) at ./sql_file.pl line 22 > -> execute for DBD::ODBC::st (DBI::st=HASH(0x824ae70)~0x824aef4) > dbd_st_execute (outparams = 0)... > dbd_st_execute (for hstmt 136653576 before)... > dbd_st_execute (for hstmt 136653576 after)... > dbd_describe sql 136653576: num_fields=7 > col 1: VARCHAR len=255 disp=256, prec=255 scale=0 > col 2: VARCHAR len= 20 disp= 21, prec= 20 scale=0 > col 3: VARCHAR len= 20 disp= 21, prec= 20 scale=0 > col 4: INTEGER len= 4 disp= 9, prec= 4 scale=0 > col 5: VARCHAR len=255 disp=256, prec=255 scale=0 > col 6: DATE len= 8 disp= 20, prec= 8 scale=0 > col 7: VARCHAR len= 20 disp= 21, prec= 20 scale=0 > col 1: '' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=256 > col 2: 'SC_GROUP_CODE' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=21 > col 3: 'SC_ITEM_CODE' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=21 > col 4: 'SC_INDEX' sqltype=INTEGER, ctype=SQL_C_CHAR, maxlen=9 > col 5: 'SC_VALUE' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=256 > col 6: 'SC_LAST_MOD' sqltype=DATE, ctype=SQL_C_CHAR, maxlen=20 > col 7: 'SC_LAST_MOD_USER' sqltype=VARCHAR, > ctype=SQL_C_CHAR, maxlen=21 > <- execute= '0E0' at ./sql_file.pl line 23 > -> fetchrow_hashref in DBD::_::st for DBD::ODBC::st > (DBI::st=HASH(0x824ae70)~0x824aef4) > >> fetch DISPATCH (DBI::st=HASH(0x824aef4) rc1/1 @1 g0 > a0) at ./sql_file.pl line 25 > 2 -> fetch for DBD::ODBC::st (DBI::st=HASH(0x824aef4)~INNER) > SQLFetch rc 0 > dbih_setup_fbav for 7 fields => 0x8252168 > fetch num_fields=7 > fetch col#0 datalen=36 displ=256 > fetch col#1 SC_GROUP_CODE datalen=13 displ=21 > fetch col#2 SC_ITEM_CODE datalen=8 displ=21 > fetch col#3 SC_INDEX datalen=1 displ=9 > fetch col#4 SC_VALUE datalen=0 displ=256 > fetch col#5 SC_LAST_MOD datalen=19 displ=20 > fetch col#6 SC_LAST_MOD_USER datalen=17 displ=21 > 2 <- fetch= [ '94F6C407-D567-11D6-A75A-00508BFCB09E' > 'MUSIC_CONTENT' 'DURATION' '5' '' 'Oct 17 2002 05:02PM' 'RAP > Administrator' ] row1 at ./sql_file.pl line 25 > >> FETCH DISPATCH (DBI::st=HASH(0x824aef4) rc2/1 @2 g0 > a8203928) at ./sql_file.pl line 25 > 2 -> FETCH for DBD::ODBC::st (DBI::st=HASH(0x824aef4)~INNER 'NAME') > 2 <- FETCH= [ '' 'SC_GROUP_CODE' 'SC_ITEM_CODE' 'SC_INDEX' > 'SC_VALUE' 'SC_LAST_MOD' 'SC_LAST_MOD_USER' ] at ./sql_file.pl line 25 > <- fetchrow_hashref= HASH(0x8252270)7keys row1 at > ./sql_file.pl line 25 > -> fetchrow_hashref for DBD::ODBC::st > (DBI::st=HASH(0x824ae70)~0x824aef4) > >> fetch DISPATCH (DBI::st=HASH(0x824aef4) rc1/1 @1 g0 > a0) at ./sql_file.pl line 25 > 2 -> fetch for DBD::ODBC::st (DBI::st=HASH(0x824aef4)~INNER) > SQLFetch rc 0 > fetch num_fields=7 > fetch col#0 datalen=36 displ=256 > fetch col#1 SC_GROUP_CODE datalen=13 displ=21 > fetch col#2 SC_ITEM_CODE datalen=9 displ=21 > fetch col#3 SC_INDEX datalen=1 displ=9 > fetch col#4 SC_VALUE datalen=19 displ=256 > fetch col#5 SC_LAST_MOD datalen=19 displ=20 > fetch col#6 SC_LAST_MOD_USER datalen=17 displ=21 > 2 <- fetch= [ '94F6C407-D567-11D6-A75A-00508BFCB09E' > 'MUSIC_CONTENT' 'PERFORMER' '5' 'RICHARD G. MITCHELL' 'Oct 17 > 2002 05:02PM' 'RAP Administrator' ] row2 at ./sql_file.pl line 25 > >> FETCH DISPATCH (DBI::st=HASH(0x824aef4) rc2/1 @2 g0 > a8203928) at ./sql_file.pl line 25 > 2 -> FETCH for DBD::ODBC::st (DBI::st=HASH(0x824aef4)~INNER 'NAME') > 2 <- FETCH= [ '' 'SC_GROUP_CODE' 'SC_ITEM_CODE' 'SC_INDEX' > 'SC_VALUE' 'SC_LAST_MOD' 'SC_LAST_MOD_USER' ] at ./sql_file.pl line 25 > <- fetchrow_hashref= HASH(0x8252390)7keys row2 at > ./sql_file.pl line 25 > -> fetchrow_hashref for DBD::ODBC::st > (DBI::st=HASH(0x824ae70)~0x824aef4) > >> fetch DISPATCH (DBI::st=HASH(0x824aef4) rc1/1 @1 g0 > a0) at ./sql_file.pl line 25 > 2 -> fetch for DBD::ODBC::st (DBI::st=HASH(0x824aef4)~INNER) > SQLFetch rc 100 > SQLGetFunctions - SQL_MoreResults supported: 0 > 2 <- fetch= undef row2 at ./sql_file.pl line 25 > <- fetchrow_hashref= undef row2 at ./sql_file.pl line 25 > -> prepare for DBD::ODBC::db > (DBI::db=HASH(0x824adf8)~0x824ad44 'SELECT convert(varchar(255), > str_uniq_id), sc_group_code, > sc_item_code, sc_index, sc_value, sc_last_mod, sc_last_mod_user > FROM strand_content > WHERE sc_group_code = 'MUSIC_CONTENT' > AND str_uniq_id = '94F6C407-D567-11D6-A75A-00508BFCB09E' > AND sc_index = 5 > AND ( (SC_ITEM_CODE = 'DURATION') OR (SC_ITEM_CODE = 'PERFORMER') ) > ORDER BY sc_item_code DESC') > > dbih_setup_handle(DBI::st=HASH(0x824af3c)=>DBI::st=HASH(0x8252204) > , DBD::ODBC::st, 824af48, Null!) > dbih_make_com(DBI::db=HASH(0x824ad44), DBD::ODBC::st, 200) > dbih_setup_attrib(DBI::st=HASH(0x8252204), Err, > DBI::db=HASH(0x824ad44)) SCALAR(0x82362b4) (already defined) > dbih_setup_attrib(DBI::st=HASH(0x8252204), State, > DBI::db=HASH(0x824ad44)) SCALAR(0x82362fc) (already defined) > dbih_setup_attrib(DBI::st=HASH(0x8252204), Errstr, > DBI::db=HASH(0x824ad44)) SCALAR(0x82362d8) (already defined) > dbih_setup_attrib(DBI::st=HASH(0x8252204), Handlers, > DBI::db=HASH(0x824ad44)) ARRAY(0x824adbc) (already defined) > dbih_setup_attrib(DBI::st=HASH(0x8252204), Debug, > DBI::db=HASH(0x824ad44)) 9 (already defined) > dbih_setup_attrib(DBI::st=HASH(0x8252204), FetchHashKeyName, > DBI::db=HASH(0x824ad44)) 'NAME' (already defined) > dbih_setup_attrib(DBI::st=HASH(0x8252204), HandleError, > DBI::db=HASH(0x824ad44)) undef (not defined) > ignore named placeholders = 0 > dbd_st_prepare'd sql f136668672 > SELECT convert(varchar(255), str_uniq_id), sc_group_code, > sc_item_code, sc_index, sc_value, sc_last_mod, sc_last_mod_user > FROM strand_content > WHERE sc_group_code = 'MUSIC_CONTENT' > AND str_uniq_id = '94F6C407-D567-11D6-A75A-00508BFCB09E' > AND sc_index = 5 > AND ( (SC_ITEM_CODE = 'DURATION') OR (SC_ITEM_CODE = 'PERFORMER') ) > ORDER BY sc_item_code DESC > <- prepare= DBI::st=HASH(0x824af3c) at ./sql_file.pl line 33 > -> DESTROY for DBD::ODBC::st (DBI::st=HASH(0x824aef4)~INNER) > SQLFreeStmt called, returned 0. > <- DESTROY= undef at ./sql_file.pl line 34 > -> execute for DBD::ODBC::st (DBI::st=HASH(0x824af3c)~0x8252204) > dbd_st_execute (outparams = 0)... > dbd_st_execute (for hstmt 136668672 before)... > dbd_st_execute (for hstmt 136668672 after)... > dbd_describe sql 136668672: num_fields=7 > col 1: VARCHAR len=255 disp=256, prec=255 scale=0 > col 2: VARCHAR len= 20 disp= 21, prec= 20 scale=0 > col 3: VARCHAR len= 20 disp= 21, prec= 20 scale=0 > col 4: INTEGER len= 4 disp= 9, prec= 4 scale=0 > col 5: VARCHAR len=255 disp=256, prec=255 scale=0 > col 6: DATE len= 8 disp= 20, prec= 8 scale=0 > col 7: VARCHAR len= 20 disp= 21, prec= 20 scale=0 > col 1: '' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=256 > col 2: 'SC_GROUP_CODE' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=21 > col 3: 'SC_ITEM_CODE' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=21 > col 4: 'SC_INDEX' sqltype=INTEGER, ctype=SQL_C_CHAR, maxlen=9 > col 5: 'SC_VALUE' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=256 > col 6: 'SC_LAST_MOD' sqltype=DATE, ctype=SQL_C_CHAR, maxlen=20 > col 7: 'SC_LAST_MOD_USER' sqltype=VARCHAR, > ctype=SQL_C_CHAR, maxlen=21 > <- execute= '0E0' at ./sql_file.pl line 34 > -> fetchrow_hashref for DBD::ODBC::st > (DBI::st=HASH(0x824af3c)~0x8252204) > >> fetch DISPATCH (DBI::st=HASH(0x8252204) rc1/1 @1 g0 > a0) at ./sql_file.pl line 36 > 2 -> fetch for DBD::ODBC::st (DBI::st=HASH(0x8252204)~INNER) > SQLFetch rc 0 > dbih_setup_fbav for 7 fields => 0x824ae70 > fetch num_fields=7 > fetch col#0 datalen=36 displ=256 > fetch col#1 SC_GROUP_CODE datalen=13 displ=21 > fetch col#2 SC_ITEM_CODE datalen=9 displ=21 > fetch col#3 SC_INDEX datalen=1 displ=9 > fetch col#4 SC_VALUE datalen=19 displ=256 > fetch col#5 SC_LAST_MOD datalen=19 displ=20 > fetch col#6 SC_LAST_MOD_USER datalen=17 displ=21 > 2 <- fetch= [ '94F6C407-D567-11D6-A75A-00508BFCB09E' > 'MUSIC_CONTENT' 'PERFORMER' '5' 'RICHARD G. MITCHELL' 'Oct 17 > 2002 05:02PM' 'RAP Administrator' ] row1 at ./sql_file.pl line 36 > >> FETCH DISPATCH (DBI::st=HASH(0x8252204) rc2/1 @2 g0 > a8203928) at ./sql_file.pl line 36 > 2 -> FETCH for DBD::ODBC::st (DBI::st=HASH(0x8252204)~INNER 'NAME') > 2 <- FETCH= [ '' 'SC_GROUP_CODE' 'SC_ITEM_CODE' 'SC_INDEX' > 'SC_VALUE' 'SC_LAST_MOD' 'SC_LAST_MOD_USER' ] at ./sql_file.pl line 36 > <- fetchrow_hashref= HASH(0x825218c)7keys row1 at > ./sql_file.pl line 36 > -> fetchrow_hashref for DBD::ODBC::st > (DBI::st=HASH(0x824af3c)~0x8252204) > >> fetch DISPATCH (DBI::st=HASH(0x8252204) rc1/1 @1 g0 > a0) at ./sql_file.pl line 36 > 2 -> fetch for DBD::ODBC::st (DBI::st=HASH(0x8252204)~INNER) > SQLFetch rc 0 > fetch num_fields=7 > fetch col#0 datalen=36 displ=256 > fetch col#1 SC_GROUP_CODE datalen=13 displ=21 > fetch col#2 SC_ITEM_CODE datalen=8 displ=21 > fetch col#3 SC_INDEX datalen=1 displ=9 > fetch col#4 SC_VALUE datalen=19 displ=256 > fetch col#5 SC_LAST_MOD datalen=19 displ=20 > fetch col#6 SC_LAST_MOD_USER datalen=17 displ=21 > 2 <- fetch= [ '94F6C407-D567-11D6-A75A-00508BFCB09E' > 'MUSIC_CONTENT' 'DURATION' '5' 'RICHARD G. MITCHELL' 'Oct 17 2002 > 05:02PM' 'RAP Administrator' ] row2 at ./sql_file.pl line 36 > >> FETCH DISPATCH (DBI::st=HASH(0x8252204) rc2/1 @2 g0 > a8203928) at ./sql_file.pl line 36 > 2 -> FETCH for DBD::ODBC::st (DBI::st=HASH(0x8252204)~INNER 'NAME') > 2 <- FETCH= [ '' 'SC_GROUP_CODE' 'SC_ITEM_CODE' 'SC_INDEX' > 'SC_VALUE' 'SC_LAST_MOD' 'SC_LAST_MOD_USER' ] at ./sql_file.pl line 36 > <- fetchrow_hashref= HASH(0x82521e0)7keys row2 at > ./sql_file.pl line 36 > -> fetchrow_hashref for DBD::ODBC::st > (DBI::st=HASH(0x824af3c)~0x8252204) > >> fetch DISPATCH (DBI::st=HASH(0x8252204) rc1/1 @1 g0 > a0) at ./sql_file.pl line 36 > 2 -> fetch for DBD::ODBC::st (DBI::st=HASH(0x8252204)~INNER) > SQLFetch rc 100 > 2 <- fetch= undef row2 at ./sql_file.pl line 36 > <- fetchrow_hashref= undef row2 at ./sql_file.pl line 36 > -> DESTROY for DBD::ODBC::st (DBI::st=HASH(0x8252204)~INNER) > SQLFreeStmt called, returned 0. > <- DESTROY= undef > -> DESTROY for DBD::ODBC::db (DBI::db=HASH(0x824ad44)~INNER) > ** auto-rollback due to disconnect without commit returned 1 > <- DESTROY= undef > > > Cheers, > > -- > dave thorn | [EMAIL PROTECTED] >