Emmanuel,

There are two ways to fix that.  It was a bug in DBD::ODBC.  I'm VERY
surprised I didn't catch it earlier.

        1) Upgrade to the Latest DBD::ODBC (0.33_3)
        or
        2) use bindings/placeholders for the dates.

> $res = $dbh->do("INSERT INTO SIT_PREVISIONNEL_HISTO (......., DATEMAJ,
> .....) values (......,$rec->{majdate},.....)

to
use DBI qw(:sql_types);         # important to change your use DBI at the top!

        my $sth = $dbh->prepare("INSERT INTO SIT_PREVISIONNEL_HISTO (.......,
DATEMAJ,
 .....) values (......,?,.....)
      $sth->bind_param(1, $rec->{majdate}, { TYPE => SQL_TIMESTAMP });
        $sth->execute;

Jeff

> Hi,
>
> I have some problems using date/time field with DBI and a MS
> Access Database
> over ODBC.
>
> I try to insert a record containig a date :
> $res = $dbh->do("INSERT INTO SIT_PREVISIONNEL_HISTO (......., DATEMAJ,
> .....) values (......,$rec->{majdate},.....)
>
> $rec->{majdate} come from another table and i got it without a
> problem with
> a SELECT query.
>
> DBI trace shows that :
>
> dbd_preparse scanned 2 distinct placeholders
> dbd_st_prepare'd sql f61546664
>  INSERT INTO SIT_PREVISIONNEL_HISTO
>                                 (...,...,...,DATEMAJ,...)
>                                 values (...,...,...2002-02-05 15??,...);
> 2   <- prepare= DBI::st=HASH(0x38b54d0) at DBI.pm line 930.
>     -> execute for DBD::ODBC::st (DBI::st=HASH(0x38b54d0)~0x38b54f4)
>     dbd_st_execute (for sql f61546664 after)...
> st_execute/SQLExecute error -1 recorded: [Microsoft][Pilote ODBC Microsoft
> Access]Champ COUNT incorrect  (SQL-07001)(DBD:
> st_execute/SQLExecute err=-1)
>     !! ERROR: -1 '[Microsoft][Pilote ODBC Microsoft Access]Champ COUNT
> incorrect  (SQL-07001)(DBD: st_execute/SQLExecute err=-1)'
>
> i don't know why perl found 2 placeholders where none existed...
> I'm relatively new to perl and i have certainly missed something in the
> syntax.
>
> TIA
> Emmanuel

Reply via email to