As you pointed to me, i used placeholders and did :
        $sth = $dbh->prepare($sql) or die $dbh->errstr;
        $sth->bind_param(1, $rec->{majdate}, { TYPE => SQL_TIMESTAMP });
        $sth -> execute() or die $dbh->errstr;

this problem occurs now :
Can't bind non-scalar value (currently) at D:\Program Files\Apache
Group\Apache\cgi-bin\valid.pl line 24.
when executing bind_param.

the format of $rec->{majdate} is "yyyy-mm-dd hh:mm:ss", perhaps should i
convert it into a form that the driver can understand, but i don't know how.

TIA
Emmanuel

"Jeff Urlwin" <[EMAIL PROTECTED]> a �crit dans le message news:
[EMAIL PROTECTED]
> I'd suggest, given that ActiveState is behind and I'm patching like mad
> lately, that you use bind parameters to work around it.  It's not a bad
> thing and, at least for Oracle, the server can cache the parsing and
> execution plan for the query, the more you use place holders and have the
> same "exact" query every time (the bind values can change, but if the
query
> is character-for-character the same, Oracle (and probably others) are
> smarter about executing them (or at least execute them a little faster
> avoiding the overhead of repreparing them).
>
> Jeff
>
> > -----Original Message-----
> > From: Emmanuel Jaeckert [mailto:[EMAIL PROTECTED]]
> > Sent: Tuesday, February 05, 2002 12:39 PM
> > To: [EMAIL PROTECTED]
> > Subject: Re: prb using Date/time field with DBI , odbc connected with
> > Access 2000
> >
> >
> > Thank you for your answers, i can't test it now but for now i tried to
> > update DBD-ODBC from 0.28 to 0.33 from ppm but it didn't work (i use
perl
> > from Active State).
> > I think i can test it tomorrow.
> >
> > Bye
> > Emmanuel
> >
> > "Jeff Urlwin" <[EMAIL PROTECTED]> a �crit dans le message news:
> > [EMAIL PROTECTED]
> > > 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