in reply to Win32::ODBC Multiple Queries

Heys,

I'm reading between the lines here, but if you're simply trying to retrieve more than one field from the row (hence the second query) you might be interested in Win32::ODBC's DataHash method, which returns a hash keyed on column names of either all or specific columns from the query.

For example, for the two columns you use above, you could use the following:

while ($db->FetchRow()) { my %data = $db->DataHash("discipline_id", "discipline"); print LOGFILE join " ", $data{discipline_id}, $data{discipline}; }

I'm not sure if that helps you in any way, though. I agree with Nitrox regarding taking a look at SQL - there's a couple good references out there - I usually use the Sybase docs, but if you can find some specifically for MS Access, then so much the better :)

Hope that's some help..
-- Foxcub

Replies are listed 'Best First'.
Re: Re: Win32::ODBC Multiple Queries
by JamesNC (Chaplain) on Dec 18, 2002 at 19:08 UTC
    I wrote an SQL query tool using Win32::ODBC and it worked great for DSN using mySQL and Sybase. But, when I tried to connect to a DSN using MSAccess, I got a Runtime Error too. I tried different versions of Win32::ODBC, and even created the same database, with exact same tablenames, column names and data types and it still failed. I ended up trying DBI, and DBI worked. If you look at DBI, you will notice that it handles placeholders and bind variables diffently than ODBC. Which may be part of the problem you are experiencing. Notice the difference in these two calls in DBI...
    if($query eq '*'){ $sth = $db->prepare("SELECT * FROM data ORDER BY[$orderkey]"); $sth->execute(); ... if($query eq $name ){ $sth = $db->prepare("SELECT ? FROM data order by [$orderkey]"); $sth->execute($name);
    The runtime error you are getting may have to do with how Access checks/binds the correct data types prior to executing the SQL. If the data type/size don't match up, the SQL won't execute. In short, if they other gent's suggestions didn't solve your problem... give DBI a try. And, I just started adding use strict; to ALL my scripts after getting hollered at enough... and it really helps :)