Chris Charley wrote: > Hi > > The error messages I'm getting from the attempted insert are: > > > C:\perlp>perl t.pl > DBD::SQLite::db do failed: no such column: cash at t.pl line 17, > <DATA> line 1. > DBD::SQLite::db do failed: no such column: cash at t.pl line 17, > <DATA> line 2. > DBD::SQLite::db do failed: no such column: credit at t.pl line 17, > <DATA> line 3 > DBD::SQLite::db do failed: no such column: cash at t.pl line 17, > <DATA> line 4. > DBD::SQLite::db do failed: no such column: credit at t.pl line 17, > <DATA> line 5 > DBD::SQLite::db do failed: no such column: credit at t.pl line 17, > <DATA> line 6 > > > The code and the input data are: > > #!/usr/bin/perl > use strict; > use warnings; > use DBI; > > my $dbh = DBI->connect("dbi:SQLite:dbname=mydb.txt","",""); > die $! unless $dbh; > > # customer vendor transType productCode appNumber resultCode > $dbh->do(qq{ CREATE TABLE sales > (customer int, vendor int, type char(10), > product int, app int, result int) > }); > > my $sql_fmt = "INSERT INTO sales VALUES(%d, %d, %s, %d, %d, %d)";
You need to put single quotes aroung the %s, like this: my $sql_fmt = "INSERT INTO sales VALUES(%d, %d, '%s', %d, %d, %d)"; > while(<DATA>) { > my $sql = sprintf $sql_fmt, split; > $dbh->do($sql); > } > > __DATA__ > 10112 6768 cash 01020 00780 1 > 10112 6768 cash 01020 00780 0 > 10112 6768 credit 00040 01010 1 > 10112 3650 cash 01840 01200 0 > 14100 2410 credit 02840 00910 0 > 14100 5220 credit 01020 00780 1 > > > I don't know why I can't insert for the type field. Without the quotes the sql statement looks like: INSERT INTO sales VALUES(10112, 6768, cash, 01020, 00780, 1) which looks like you want to use the value of the column named cash as the 3rd value, instead of the literal string 'cash'. Does the DBD::SQLite driver support placeholders? That's really the preferred way to do this kind of thing... -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>