Neil, not that I'm an Access expert, but I believe (almost sure) that Access
supports transactions with Visual Basic ODBC and as macros, but are you
saying that Access does not support transactions through DBI?
Ilya Sterin
-----Original Message-----
From: Neil Lunn [mailto:[EMAIL PROTECTED]]
Sent: Thursday, May 10, 2001 12:11 AM
To: 'Trevor Webster'; [EMAIL PROTECTED]
Subject: RE: Problem with DBI and Access newbie
Missed this before. My eyes hurt! Answer Below.
> -----Original Message-----
> From: Trevor Webster [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, May 09, 2001 5:03 PM
> To: [EMAIL PROTECTED]
> Subject: Problem with DBI and Access newbie
>
>
> Hello
>
> I am running a Perl script that is supposed to added a record
> to an MS Access database using the DBI module.
>
> I am testing the script using MS PWS on a Windows 2000 os
> with Activestate Perl 626. Input into the script comes from
> parsed form informtion, which is working successfully.
>
> When I run the script it appears to complete successfully.
> That is it doesn't return any script syntax or DBI error
> messages. But when I check the database the record has not
> been added.
>
> The database contains a single table with 4 columns:
> Respondent
> RespId Autonumber
> england Text
> relativity Text
> lotr Text
>
> Below is a copy of the script:
>
> sub UpdateDatabase(){
>
> use DBI;
>
> $DSN = Survey Results
>
> $myDb = DBI->connect('dbi:ODBC:Survey Results');
>
> #Error trapping for invalid connection
> if (! $myDb){
> print "Failed to Connect $DSN\n";
> #end program as processing aborted
> die;
> }
>
> #Setup Variables for loading table data
> $england = $PostInputs{ 'england'};
> $relativity = $PostInputs{ 'relativity'};
> $lotr = $PostInputs{ 'lotr'};
>
> $SQL = qq|INSERT INTO Respondent (england, relativity,
> lotr) VALUES =
> ( '$england', '$relativity', '$lotr')|;
And theres your problem. '$england' does not interpolate. You want
"$england" and so forth.
Or even better:
###
$SQL = qq|INSERT INTO Respondent (england, relativity, lotr)
VALUES = (?,?,?)|;
$sth = $dbh->prepare($SQLQ);
eval {
while (...) { # loop through each whatever
$sth->execute($PostInputs{'england'},
$PostInputs('relativity'},
$PostInPuts{'lotr'}
};
};
$dbh->commit;
};
if ($@) {
warn "Transaction aborted because $@";
$dbh->rollback;
}
####
Not that Acess supports transactions, but it's good practice that you may as
well start learning. Besides I couldn't resist. --grin!
Neil
__________________________________________________________________________
Please Note :
Only the intended recipient is authorised to access or use this e-mail. If
you are not the intended recipient,
please delete this e-mail and notify the sender immediately. The contents
of this e-mail are the writer's
opinion and are not necessarily endorsed by the Gunz Companies unless
expressly stated.
We use virus scanning software but exclude all liability for viruses or
similar in any attachment.