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

PerlCGIでクエリの検索結果が途中で途切れる。

環境: Windows 7 Home Premium 32bit
Mem: 3.24GB
Apache for win 2.2
Perl: v5.10.1 built for MSWin32-x86-multi-thread

access の mdb を ODBC 接続し perl cgi をフロントエンドとして
クエリを表示させようとしています。

クエリの表示自体はエラーなくできましたが、検索結果が全て表示されません。
# 本来は 200件以上あるはずなのに、半分以下しか表示されない。

感触として、バッファかなにかのバイト制限のような気もするのですが、
全ての検索結果を表示するためにはどうすればよいのかご教示いただけないでしょうか?

コードは以下のとおりです。
--------------------------------------------------------
#!c:/perl/bin/perl.exe

use Win32::ODBC;
print "Content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">\n";

$db= new Win32::ODBC("DSN=kaigai");

$str_sql = "SELECT q_prestounyu.hiduke, q_factory_master.koujyoryakumei, q_prestounyu.keiyaku, " ;
$str_sql .= "q_prestounyu.hinban, q_pres_master.ryakumei, q_prestounyu.nyukousu ";
$str_sql .= "FROM (q_prestounyu INNER JOIN q_pres_master ON q_prestounyu.presno = q_pres_master.presno) ";
$str_sql .= "INNER JOIN q_factory_master ON q_prestounyu.koujyo = q_factory_master.koujyono ";
$str_sql .= "WHERE (((q_prestounyu.hiduke)>=#2010/1/10# And (q_prestounyu.hiduke)<=#2010/1/31#)) ";
$str_sql .= "ORDER BY q_prestounyu.hiduke;";
print "$str_sql<BR>\n";

$i=0;
$db->Sql($str_sql);

# 取得したレコードセットの数だけループして表示
while ( $db->FetchRow() ){

$i ++;
undef %FIELDS;
# 各フィールドのデータをハッシュに格納
%FIELDS= $db->DataHash();
print "$i ";
print "$FIELDS{'hiduke'} $FIELDS{'koujyoryakumei'}\n";
print "$FIELDS{'keiyaku'} $FIELDS{'hinban'}\n";
print "$FIELDS{'ryakumei'} $FIELDS{'nyukousu'}<BR>";

}
# データベースを閉じる
$db->Close( );
print "</body></html>";
exit;

A 回答 (3件)

> ブラウザからのcgi出力ではなく、コンソール上で、


> perl hoge.cgi と実行しても結果が変わりませんでしたので、
> HTML構文のエラーの可能性は低いと思っています。

説明不足でした。HTML の構文エラーを疑ったわけではなく、
最後に改行がないと、出力したテキストがすべて出力されないと
いう経験があったので、それを疑いました。

コンソールで実行された場合も同じとのことですが、</body></html>
は表示されるのでしょうか。それともレコードを何件か出力したところで
終了するのでしょうか。

</body></html>が出ているのでしたら、データベースからのデータの取り出し
に問題がありそうです。

一度 プログラムの先頭に

use strict;
use warnings;

をつけて実行してみてはいかがでしょうか。
    • good
    • 0

関係ないのですがメモリ4GBではないですか?

この回答への補足

物理的には4GBですが、OSが認識している容量を書いているだけです。
perl の gc では、この辺はあんまり関係ないと思いますが・・・

補足日時:2010/02/06 01:01
    • good
    • 0

最後の print を


print "</body></html>\n";
としても、だめでしょうか。

この回答への補足

ご回答ありがとうございます。

ブラウザからのcgi出力ではなく、コンソール上で、
perl hoge.cgi と実行しても結果が変わりませんでしたので、
HTML構文のエラーの可能性は低いと思っています。

補足日時:2010/02/06 00:59
    • good
    • 0

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