On 11.05.2012 02:07, Greg Aiken wrote: > dear jeff and jens, > > i found your wonderful dbd-anydata module and installed it to my windows > activeperl 5.8.8 build 820 environment (on Windows XP 32 bit)
Probably you should install a more recent version of DBD::AnyData. As I can see in CPAN (http://search.cpan.org/dist/DBD-AnyData/), DBD-AnyData-0.110 is the current version. Without further information about the used DBI version, used SQL::Statement version etc. pp., I can not even guess where your problems comes from. > i am able to use it to READ data from a 'Tab' delimited file. > i have followed, almost verbatim, your sample code to INSERT new records > into such a file - but i can not get this to work. > > there are 3 different code fragment attempts ive made. when each of > these three code blocks run (one at a time obviously), in all cases the > return code for the execute (or do) statement is 1 (true). yet none of > these actually results in a new record being added to the file > 'oldfile.txt'. ive attached oldfile.txt as a zip file so you can see > its contents. its a simple 2 line ascii file - record 1 is the field > names, record 2 is a dummy data line. > > if you can possibly figure out what i am doing wrong, i'd be greatly > indebted as i can see using your module frequently if i can get it to > output data. Even if I don't like to loose happy users, for the recorded simple use it's probably reasonable to use DBD::CSV. Don't bite on "comma" - the separator is freely configurable. Further: I'm sure, DBD::AnyData has a test which proves whether inserting new rows will succeed or not. If not (I didn't prove), it would be nice if you add such a test case (steal it from DBD::CSV, DBD::DBM or simply SQL::Statement). If you can send the test output (including the test, if it needs to be added), it'll be more easy for us to help you. Thanks for helping to improve DBD::AnyData. Please CC dbi-users@ to allow the community to help you. Best regards, Jens > sincerely yours, > > greg aiken > > > > use DBI; > use DBD::AnyData; > > my $dbh = DBI->connect('dbi:AnyData(RaiseError=>1):'); > > > #i am trying to insert new record to an existing tab delimited file > #'oldfile.txt' is an ascii encoded two line file: > #FIELD1\tFIELD2\n > #abc\tdef\n > > $dbh->func('insertnewrecstooldfile', 'Tab', 'oldfile.txt', 'ad_import'); > > > > #test 1 - attempt using DO with hard-coded 'values' > > #$return1 = $dbh->do("INSERT INTO insertnewrecstooldfile (FIELD1,FIELD2) > VALUES ('ghi', 'jkl')"); > #print "return1 = $return1\n"; > #$dbh->disconnect; > #exit; > > #result: returns 1, but the file does NOT contain the new record! > > > > #test 2 - next level of indirection, using scalar values in the sql > command > > #$value1 = 'mno'; > #$value2 = 'pqr'; > #$sql2 = qq{ INSERT INTO insertnewrecstooldfile (FIELD1,FIELD2) > VALUES ('$value1', '$value2') }; > #$return2 = $dbh->do($sql2); > #print "return2 = $return2\n"; > #$dbh->disconnect; > #exit; > > #result: returns 1, but the file does NOT contain the new record! > > > > #test 3 - to pass in vars > #by way of preparing placeholders for values, then execute > > #$value1 = 'stu'; > #$value2 = 'vwx'; > #$sql3 = qq{ INSERT INTO insertnewrecstooldfile (FIELD1,FIELD2) > VALUES (?,?) }; > #$sth3 = $dbh->prepare($sql3); > #$return3 = $sth3->execute($value1, $value2); > #print "return3 = $return3\n"; > #$dbh->disconnect; > #exit; > > #result: returns 1, but the file does NOT contain the new record! >