2010-11-23 14 views
1

問題としてODBCに失敗:Perlスクリプトは、コマンドプロンプトで正常に動作しますが、CGIスクリプトとしてODBCにPerlスクリプトは、コマンドプロンプトでOK動作しますが、CGIスクリプト

セッティング失敗: ウィンXP Proの64ビット版を2003 SP2は はApache 2.2.17のWin32 のActive Perlの5.12.2(ないPerl64) ODBC DSNは、SQL Server用に作成され

詳細は:コマンド・プロンプトから、Phone.plはOK走る - 予想通り、それはクエリ結果を取得します - これは、DBIは、CGIスクリプト、pHなど

正常に動作します意味しますone.plは、ODBCの初期化コードの前にHTMLを期待通りに表示します。 (Apacheの設定は、非ODBCスクリプトのOK働く。)

ここではApache

のerror.logファイルでMSG [火11月23日午後01時27分57秒2010] [エラー] [クライアント127.0.0.1] DBIですconnect( 'SQLSVR206'、 'administrator'、...)が失敗しました:[Microsoft] [ODBC Driver Manager] C:/CGI/Phone.pl 32行目にデータソース名が見つかりません。デフォルトドライバが指定されていません(SQL-IM002)

それは異なった動作を、なぜ任意のアイデア?

#!c:/perl/bin/perl.exe 
use CGI qw(:standard); 
use strict; 
use warnings; 
use DBI; 

my ($sqlstr, $sql_UNITED, $dbh206); 

# 206 
# select * from getProvFINON('270762789')#TIN 
my @colUNITED = qw/ADR_LN_1_TXT PROV_SYS_ID ZIP_CD FULL_NM SOURCE PROV_TIN BILL_TEL/; 

sub Init(){ 
    $dbh206 = DBI->connect ("dbi:ODBC:SQLSVR206",'USER','PASSWORD',{RaiseError=>1}) 
     or die $DBI::errstr; 
    $sqlstr = qq/ select * from getProvFINON(?) /; #parameters TIN 
    $sql_UNITED = $dbh206->prepare($sqlstr) 
     or die "prepare failed: " . $dbh206->errstr(); 
} 

sub test1{ 
    my $tin = shift(); 
    $sql_UNITED->execute($tin) or die $sql_UNITED->errstr; 
    my $row = $sql_UNITED->fetchrow_hashref; 
    while(defined ($row)){ 
    foreach(@colUNITED){ 
     print $row->{$_}."~~~"; 
    } 
    print "<p>"; 
    $row = $sql_UNITED->fetchrow_hashref; 
    } 
} 

print header; 
print "test text<p>"; 
Init(); 
test1('270762789'); 
print "999999999999<p>"; 

=========================================== =============== UPDATE:問題の一部は、私はODBCを設定した後、64ビットODBCの問題 VS 32ビットは、しかしhttp://support.microsoft.com/kb/942976

を見ている、私はまだODBCは[[マイクロソフト]:失敗した [水曜日11月24日午前一時38分48秒2010] [エラー] [クライアント127.0.0.1] DBI接続( ' 'SQLSVR206-32を''、...)ログのApacheで、次のエラーを得ましたSQL Server Driver] [SQL Server]ユーザー 'MYDOMAIN \ GARY $'のログインに失敗しました。 (SQL-28000)Cで:/CGI/test.plライン15

私はMYDOMAIN \管理者としてログインし、Apacheを開始しました。 ODBCは「ネットワークログインIDを使用してWindows NT認証で」使用するように設定されました。この「MYDOMAIN \ GARY $」はどこから来たのですか?ありがとう!

============================================== ============ 最終更新:Apacheサービスは「ローカルシステムアカウント」を使用して実行され、それは「MYDOMAIN \ GARY $」の由来です。事はGARYが会社ではなく、問題が 1)32/64ビットODBCの畳み込みだった彼のIDは、SQL Serverからの削除されているが、CGIでのODBCコードがだから、エラー28000 結果としては、ApacheからGARYを継承していますDSNと 2)Apacheで使用される既定のアカウント

+0

それはあなたの質問にスクリプトを投稿することができれば、非常に便利であるか、または少なくとも関連する部分になりますような何かを探しているODBCファイルと

use DBI; use SQL::Abstract; my $CONNECT = "FILEDSN=thefile.dsn"; my $dbh = DBI->connect("dbi:ODBC:$CONNECT", "myidsid", "passwordThatsNotUsed"); 

。 –

+0

コメントありがとうございます。私はちょうどソースコードを追加しました。 –

答えて

1

ODBCデータソースは「システムDSN」ではなく「ユーザーDSN」にリストされていることがあります。あなたのWebサーバーが実行するIDはSystem DSNにしかアクセスできないと私は思っています。

私のポストは意味がない場合、私はシステムDSNの対ユーザーとの違いについての情報へのリンクを追加するためにそれを編集しています:http://www.truthsolutions.com/sql/odbc/creating_a_new_odbc_dsn.htm

+0

正規表現ありがとう、ここでは何が起こるのですか?1.私は "Perl test.pl"と表示されているようですが、PerlはUSER DSNのみで、システムDSNでは見えないようです。 2.システムDSNを追加しましたが、CGIは前と同じエラーメッセージで失敗します。 –

+0

コマンドラインから32ビットバージョンのPerlを使用している可能性はありますが、Webサーバーは64ビットバージョンを使用していますか?私が読んだ他のフォーラムによれば、別々のODBCドライバが必要です。 – regex

+0

コマンドラインとCGIで同じPerlを実行していました。問題は解決され、私は元の投稿を更新しました。ご協力いただきありがとうございます! –

0

何かがWindows 7のODBC接続でアップしていますどちらも分かりません。私はODBCをセットアップし、それはうまくテストされますが、表示するのと同じようなエラーが発生します。 MS SQL Server Mgmt StudioをいくつかのSQLサーバーに接続する場合でも、明示的に余分な接続設定を行う必要があります。私は一部のSQLサーバ(これは私が所有していない)で問題が発生しているので、それはサーバ側の問題だと思います。 PERLで私は最後にあきらめて、上記の余分な接続設定でDSNファイルを作成し、それを直接指し示しました。サーバー名が2回存在することに注意してください。

[ODBC] 
DRIVER=SQL Server Native Client 10.0 
UID=myidsid 
Address=servername,3180 
Network=DBMSSOCN 
APP=Microsoft® Windows® Operating System 
Trusted_Connection=Yes 
SERVER=servername 
PWD=someTextInPlaceOfPasswordAsItsNotUsed 
+0

"これはうまくテストされます"と言うと、両方のODBCコマンドでテストしましたか? 64ビットウィンドウには2つのOdbcad32.exeがあり、1つは\ Windows \ SysWoW64に、もう1つは\ Windows \ System32にあります。これらの2つのexeはいくつかの共有構成を表示します。マイクロソフトのリンクを参照してください。 –

関連する問題