Hello,

I am trying to execute an update to an Access database. The statement
has two placeholders, and I put two variables between the parentheses in
the execute statement, and yet Access tells me it expects 3 parameters.

This is the prepare:

my $sth_del = $dbh->prepare(
 "UPDATE [DBI_TEST]
 SET retired_date = ?
 WHERE person_id = ?") or die "Cant prepare retired date: " .
$dbh->errstr;


This is the execute:

foreach my $del_rec (@del_recs) {
 $sth_del->execute( $ret_date, $del_rec ) or die "Cant insert retired
date: " . $dbh->errstr;
}


I really don't understand why it wants three parameters. What exactly
does this mean?

Thanks,
Alan



The result I get from a level two trace is:

    DBI::db=HASH(0x2278c2c) trace level set to 2 in DBI 1.14-nothread
    -> prepare for DBD::ODBC::db (DBI::db=HASH(0x2278c68)~0x2278c2c
'UPDATE [DBI
_TEST]
        SET retired_date = ?
        WHERE person_id = ?')
    dbd_preparse scanned 2 distinct placeholders
    dbd_st_prepare'd sql f37040784
        UPDATE [DBI_TEST]
        SET retired_date = ?
        WHERE person_id = ?
    <- prepare= DBI::st=HASH(0x2278ff8) at jcdb_update.pl line 254.
    -> execute for DBD::ODBC::st (DBI::st=HASH(0x2278ff8)~0x2278f74
'#11/1/2001#
' 22218)
bind 1 <== '#11/1/2001#' (attribs: )
bind 1 <== '#11/1/2001#' (size 11/12/0, ptype 4, otype 1)
    bind 1: CTy=1, STy=VARCHAR, CD=80, Sc=0, VM=11.
bind 2 <== '22218' (attribs: )
bind 2 <== 22218 (size 5/6/0, ptype 6, otype 1)
    bind 2: CTy=1, STy=VARCHAR, CD=80, Sc=0, VM=5.
    dbd_st_execute (for sql f37040784 after)...
st_execute/SQLExecute error -1 recorded: [Microsoft][ODBC Microsoft
Access Drive
r] Too few parameters. Expected 3. (SQL-07001)(DBD:
st_execute/SQLExecute err=-1
)

Reply via email to