アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんわ。最近、Perlを使い始めたばかりの初心者です。解決方法がわからないので、教えて下さい。

PerlとWin32::ODBCを使ってDBにアクセスするプログラムを組んでいるます。DB接続まではうまくいくのですが、それ以降に以下のようなエラーがでます。モジュールが足りないようなのですが、どのようにして解決すればよいかわかりません。以下にエラーとコードを記入します。
コード:
#!/usr/local/bin/perl
$DSN = "DSN=DB1;UID=kaki388";
use Win32::ODBC;
if (!($0 = new Win32::ODBC($DSN))){
print Win32::ODBC::Error();
print "失敗";
exit();
}
print "成功";
$sql = "SELECT * FROM tbl1";
$0->run("$sql");
$0->sql("$sql");
@fn = $0->FieldNames();
while($0->FetchRow()){
undef %Data;
%Data = $0->DataHash();
print "$Data{$fn[$i]}<BR>\n";
}
$0->Close;

エラーコード:
2004/08/26(11:49:14) W-SV 127.0.0.1 [80] E200042 "Can't locate object method "run" via package "Win32::ODBC=HASH(0x275020)" (perhaps you forgot to load "Win32::ODBC=HASH(0x275020)"?) at odbc.cgi line 11.
"

よろしくお願い致します。

A 回答 (1件)

まず、DB接続を保存している変数名が良くないです。


$0はグローバルな特殊変数(組込み変数)でスクリプトファイル名が格納されています。これに値を代入すると、UNIXなどではプロセスの表示が変わるようです。
$0や$!の様な特殊変数は通常の変数としては使えません。
DSNへのデータ接続のインスタンスを$0では無く、通常の変数に格納して下さい。(例えば、$connection など)

それから、perlでは、大文字と小文字を区別しますので、メソッド名などは大文字と小文字まで正確に記述する必要が有ります。
ですので「run("$sql")」「sql("$sql")」は「Run($sql)」「Sql($sql)」となります。

例 -----------------------------------------------
use Win32::ODBC;

$DSN = "DSN=DB1;UID=kaki388";

if (!($connection = new Win32::ODBC($DSN))){
print Win32::ODBC::Error();
print "失敗";
exit();
}

print "成功";
$sql = "SELECT * FROM tbl1";
$connection->Run($sql);
$connection->Sql($sql);
@fn = $connection->FieldNames();
while($connection->FetchRow()){
my %Data = $connection->DataHash();
print "$Data{$fn[0]}<BR>\n";
}
$connection->Close;
--------------------------------------------------

参考URL:http://member.nifty.ne.jp/hippo2000/perltips/win …
    • good
    • 0
この回答へのお礼

回答ありがとうございました。コードを書き直して実行してみたいと思います。

お礼日時:2004/08/28 22:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!