CGIでODBC経由でAccessDBにアクセスするアプリを作っています。
複数クライアント(5-6台以上)から同時にアクセスするとOSがダウンしてしまいます。
この現象が出るのはWin9x系でWinNT系では発生していません。
どうやらDBオープン時にかなりのリソースを消費していて、リクエストがほぼ同時に
発生するとリソースを食いつぶしてOS(Win9x)がダウンしてしまうようです。
何か回避策はないでしょうか?

環境は
OS: Win95,Win98SE
Apache: 1.3.14
Perl: ActivePerl522+JPerl
です。

プログラムの処理は、Win32:ODBCを使用して各CGIソースごとに、
開始時にDBのコネクションをオープン、終了時にクローズしています。
# DBコネクションを持続させて各CGIで使いまわしをすれば解決できる
# かな?と考えていますが、はたしてそれで解決できるか?
# またそれが可能なのかが分かりません。

以上、よろしくお願いします。m(_ _)m

このQ&Aに関連する最新のQ&A

A 回答 (4件)

PerlじゃなくてJSPとかPHPならそういう機能あるんですけど


とりあえず、windows98じゃなくてNT系OSにしてみたら安定度は
あがるんじゃないんですか?
もしくはDBをPostgreSQLとかをつかうとか・・・
まぁ~どうしてもPerlで接続維持やりたいなら
デーモンをひとつ起動してデーモンで接続して
そのデーモンにCGIからつなげはいいんじゃ?
    • good
    • 0
この回答へのお礼

さっそくの回答ありがとうございます。m(__)m
>PerlじゃなくてJSPとかPHPならそういう機能あるんですけど
PHPの経験はあるのでPerlにそういう機能がないかな?と思って質問したんですが
やっぱりないですか...

>とりあえず、windows98じゃなくてNT系OSにしてみたら安定度は
>あがるんじゃないんですか?
これができれば苦労しないんですが、Win9x系PCしかない環境で動かさなければら
ないので"NT系で"というのはダメなんですよ(;_;)

>もしくはDBをPostgreSQLとかをつかうとか・・・
PostgreSQLってWin9xでも動くんですか?

お礼日時:2001/05/09 14:21

>もしくはDBをPostgreSQLとかをつかうとか・・・


PostgreSQLってWin9xでも動くんですか?
Cygwinとかつかえば動くでしょうけど・・・意味がないのでやめましょう(笑)
なんとApachまで・・・・winでうごかしてたんですね・・・
てっきりべつにUNIXマシンがあるのかと・・・・(汗)
    • good
    • 0

Accessの特性から言っても、同時に複数ユーザが使うのには適していないと思われます。



 また、それがODBC経由だとすると、原因がどこにあるのか判断が難しい所でしょう。

 現実的な回避策としては...
 NT系列では発生していないのなら、NT系列で動かすのが良いと思います。
 また、金と時間があるのなら...
 データベースを、同時アクセスを行えるデータベースにして、OSをNT系やUNIX系にすれば問題なくなるのでしょうけどね...。
    • good
    • 0
この回答へのお礼

私が回答者だったら同じような回答するでしょうね(^^ゞ

最初のお礼にも書きましたが、Win9x系OSしかない環境で動かさなければ
ならないので、他に選択肢が無いんですよ。
で、ネックになっているDBアクセス部分を軽くできれば...と考えたので
すが、難しいですかねぇ。(~ヘ~)

お礼日時:2001/05/09 14:31

もともとWin9x/Meはサーバ用途としての使用は


考慮されていない作りになっています。
NT系OSを使うようにしましょう。
    • good
    • 0
この回答へのお礼

これができるなら苦労はないのに(T_T)

お礼日時:2001/05/09 14:26

このQ&Aに関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

Q合併と同時に本店移転

いつもお世話になっております。

現在、西日本の本社と東日本の支社があり、これを合併しようとしています。
合併と同時に、本店を東日本の住所へ移転させることについて、特に税務上の問題やその他実務上、運用上の問題点などあれば(何でもいいので)ご教授ください。

最後まで読んでいただき有難うございます。

Aベストアンサー

 X社を本店移転するには、X社の本店所在地に関する定款の規定を変更をする必要があります。
 合併と同時に本店移転するのでしたら、吸収合併効力発生日以降にその定款変更の効力が生じる旨の内容の株主総会決議をしてください。

Q#exec cgi="**.cgi"をCGIページで表示する

#exec cgi="**.cgi"
を使って、全ページが同じように表示されるようにしたのですが、
掲示板等のCGIページではなぜか表示されず、ソースを見てみると
<!--#exec cgi="**.cgi"-->
がそのまま表示され、ただコメントとして扱われていました。
普通のHTMLファイルと同じように
CGIでも**.cgiファイルを表示したいのですが、どうすればいいのでしょうか

よろしくお願いします。

Aベストアンサー

CGIの中でしたら
include
または
require
で呼び出せばいいかと思います。

Q開発者の一般的な仕事の分量について

VBAが多少できる程度の素人に毛が生えたような技術者です。
開発者の皆様の環境やご意見をお聞かせください。

5ヶ月程度かかる長期の開発案件と、3週間ほどでリリースして
欲しいという要望の急ぎの開発案件を同時に振られました。
※3週間で終わるかどうかはわかりません…。
最初に申した通り、開発者として私の能力は決して高くないため、
同時にこなせる自信が全くありません。

そこで一般的に開発者の方々は案件を複数同時に抱えたり
するものなのかをお聞かせいただけないでしょうか。
同時に開発を行っている場合、どのように頭を切り替えているのか等も
教えていただければ幸いです。よろしくお願いします。

Aベストアンサー

一般論で言えば、普通掛け持ちではやりません。
掛け持ちを多くした場合、1つの遅れが他へも影響してしまうため、悪循環に陥りやすくなります。
(大抵は計画通りにいくことはなく、遅れるものですし)

但し、長期の案件のフェーズが設計期間ならば、ありかも知れませんが。

QPerlとWin32::ODBCを使ってDBにアクセスするときに出るエラー

こんばんわ。最近、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.
"

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

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

PerlとWin32::ODBCを使ってDBにアクセスするプログラムを組んでいるます。DB接続まではうまくいくのですが、それ以降に以下のようなエラーがでます。モジュールが足りないようなのですが、どのようにして解決すればよいかわかりません。以下にエラーとコードを記入します。
コード:
#!/usr/local/bin/perl
$DSN = "DSN=DB1;UID=kaki388";
use Win32::ODBC;
if (!($0 = new Win32::ODBC($DSN))){
prin...続きを読む

Aベストアンサー

まず、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/win32odbc.htm

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

それから、perlでは、大文字と小文字を区別しますので、メソッド名などは大文字と小文字まで正確に記述する必要が有ります。
ですの...続きを読む

Q会社合併時の個別催告について

会社を合併することになり、3月に官報公告し、同時に債権者に個別催告を行いますが、
個別催告を行う債権者は公告時の債権者でよいのでしょうか?公告から合併までに発生した
債権者にはどういう対応をとればよいのでしょうか?
また、債権者はすべてではなくて主要な債権者でよいと聞いたことがあるのですが、金額などの
基準があるのでしょうか?

Aベストアンサー

個別催告は、公告時の知れたる債権者すべてにおこないます。金銭債権に限りませんので、額といった基準などありません。金銭のみならずいかなるタイプであれ、会社にたいする債権者全員です。

公告後、債権関係にはいった人は公告してあるのでそれを承知で債権関係にはいったものとして個別催告の対象ではありません。なお合併事項について法定の会社備え付け書類の閲覧に供するようにしてください。

QDBD-ODBCのインストールができません

助けてください。
DBD-ODBCのインストールがうまくいきません。
インターネットに接続できない環境なのでオフラインで作業をしています。環境は以下の通りです。
●perl・・・Ver.5.8.8です。
D:\Perl\bin>perl -v

This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 18 registered patches, see perl -V for more detail)

Copyright 1987-2007, Larry Wall

Binary build 822 [280952] provided by ActiveState http://www.ActiveState.com
Built Jul 31 2007 19:34:48

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

●DBI・・・Ver.1.58です。
D:\Perl\bin>ppm query dbi
レトトトトトトツトトトトトトトトトツトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトツトトトトトトソ
ウ name ウ version ウ abstract ウ area ウ
テトトトトトトナトトトトトトトトトナトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトナトトトトトトエ
ウ DBI ウ 1.58 ウ Database independent interface for Perl ウ perl ウ
タトトトトトトチトトトトトトトトトチトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトチトトトトトトル
(1 package installed matching 'dbi')

現象は以下の通りです。
1.DBD-ODBCをactivestate社からダウンロードしました。
  DBD-ODBC-1.13.zip
2.回答したファイルを保存しました。
  DBD-ODBC.ppdとMSWin32-x86-multi-thread-5.8をd:\perl\bin配下にコピー
3.インストールを実行しました。
 D:\Perl\bin>ppm install dbd-odbc.ppd
4.以下のエラーが出てできませんでした。
ppm install failed: Can't find any package that provide DBI version 1.21 for DBD-ODBC

どなたか助けてください。
よろしくお願いいたします。

助けてください。
DBD-ODBCのインストールがうまくいきません。
インターネットに接続できない環境なのでオフラインで作業をしています。環境は以下の通りです。
●perl・・・Ver.5.8.8です。
D:\Perl\bin>perl -v

This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 18 registered patches, see perl -V for more detail)

Copyright 1987-2007, Larry Wall

Binary build 822 [280952] provided by ActiveState http://www.ActiveState.com
Built Jul 31 2007 19:34:48

Perl may be...続きを読む

Aベストアンサー

とりあえず、

ppm install dbd-odbc.ppd --nodeps

とすれば、依存している DBIのチェックをしなくなりインストールに成功します。

が、動くかどうかは保証できませんのであしからず。

Qインターネットをしていてふと疑問に思ったのですが、企業は合併や新製品の

インターネットをしていてふと疑問に思ったのですが、企業は合併や新製品の発表や、開発に成功した。などの情報を最初にどこを通じて公開するんでしょうか?

個人的には自社HPかマスコミに直接連絡などの方法だと思うのですが、詳しい方がいらっしゃいましたら教えてください。よろしくお願いします。

Aベストアンサー

内容により違いますね。
たとえば、上場企業なら証券取引所へ真っ先に届け出ないと罰則があります。
新製品の発表なんかは隠しておけるなら、イベント会場を使って大々的にやるか、日本経済新聞に特集記事を書かせるか、全国紙に全面広告を打つか…。

QWindowsXP + Perl + ODBCでDBにアクセスするには?

こんばんわ。早速質問させていただきます。
windowsXP上でActivePerlとODBCを使って、
windows2000サーバに接続するやり方がわかりません。
検索サイトでいろいろと調べてみたのですが、
UnixやLinuxでの接続の仕方は載っているのですが、
Windowsでのやり方は見つけることができませんでした。
サンプルコードなどを乗せていただくとわかりやすい
のですが・・・。
よろしくお願い致します。

Aベストアンサー

Windows環境でも、DBIとDBD::ODBCモジュールを使えば出来ます。
モジュールのインストールは、ActivePerlですと、コマンドプロンプト(DOSプロンプト)からPPMを使って簡単に行うことが出来ます。

例) ------------------------------------------------------------------
C:\>ppm
PPM>install DBI



PPM>install DBD-ODBC



PPM>quit
----------------------------------------------------------------------

http://member.nifty.ne.jp/hippo2000/perltips/ppm.htm


DBへの接続は下記の様な書式になります。

例) データソース名:DS1, ユーザ:usr1, パスワード:passwd1 --------------
use DBI;

$dbh = DBI->connect('dbi:ODBC:DS1', 'usr1', 'passwd1');
----------------------------------------------------------------------

http://perldoc.jp/docs/modules/DBD-ODBC-1.05/ODBC.pod


後はDBIのインターフェースで、DBへの操作が出来ます。

http://member.nifty.ne.jp/hippo2000/perltips/dbimemo.htm
http://member.nifty.ne.jp/hippo2000/perltips/perlora.htm

参考URL:http://perldoc.jp/docs/modules/DBD-ODBC-1.05/ODBC.pod

Windows環境でも、DBIとDBD::ODBCモジュールを使えば出来ます。
モジュールのインストールは、ActivePerlですと、コマンドプロンプト(DOSプロンプト)からPPMを使って簡単に行うことが出来ます。

例) ------------------------------------------------------------------
C:\>ppm
PPM>install DBI



PPM>install DBD-ODBC



PPM>quit
----------------------------------------------------------------------

http://member.nifty.ne.jp/hippo2000/perltips/ppm.htm


DBへの...続きを読む

Q合併と買収

合併会社は被合併会社の資産と負債を引き継ぐとともに、合併会社の株式や金銭(合併交付金)を被合併会社の株主に交付する。というのがよくわかりません。合併前の被合併会社の株はどうなるんですか?

合併と買収の大きな違いはなんですか?

詳しくわかりやすい回答お願いします!!!!!

Aベストアンサー

M&Aをビジネスにしています。
残念ながら#1さんの回答は誤りがあります。
一般的なケースについて以下に記載します。例外もあるのですがあまり細々書いて誤解があるといけませんので。

合併と株式買収はM&Aの一形態ですが、根本的に形態が違います。
買収(吸収)する側をA社、される側をB社として以下説明します。

株式買収
 B社の株主が所有している株式を、A社が現金で買い取ることによりB社の株主総会を支配する方法。
 支配する株式の割合によって影響度が異なり、過半数を取得した時点でほぼ経営権を取得したとみなされる。
 B社は、株主の変更(+経営陣の変更)に留まり、A社の子会社としてそのまま企業体が存続する。

吸収合併
 A社がB社を組織上吸収し一つの企業にする方法。B社の債権債務、権利や義務は包括的にA社に引き継がれ
 B社は組織としては消滅する。
 B社の株主は、その保有するB社株を一定の交換比率でA社の株式に交換してもらう(つまりA社の株主に加わる)。
 A社は自社の株式を新規に発行しB社株主に割り当てればよいため、原則、買収のための現金は不要。
 但し、A社の株主の中にB社の株主が加わるため、自社の株主支配地図が変わる可能性がある。

これら以外にも色々なM&A手法(営業譲渡、株式交換など)があります。いずれも一長一短がありますので
ケースによって使い分けが必要です。

M&Aをビジネスにしています。
残念ながら#1さんの回答は誤りがあります。
一般的なケースについて以下に記載します。例外もあるのですがあまり細々書いて誤解があるといけませんので。

合併と株式買収はM&Aの一形態ですが、根本的に形態が違います。
買収(吸収)する側をA社、される側をB社として以下説明します。

株式買収
 B社の株主が所有している株式を、A社が現金で買い取ることによりB社の株主総会を支配する方法。
 支配する株式の割合によって影響度が異なり、過半数を取得し...続きを読む

QPerl:CGI.pm:入力ボックスのクリア?

お世話になります。
下のサンプルコードは、CGI.pmのperldocに載っていたサンプルを改造したものです。

#! /usr/bin/perl
#
# simple.cgi -- CGIフォームの実験

use CGI qw/:standard/;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
print
header( -expires=>'-1d',
-pragma => 'no-cache',
'Cache-Control' => 'no-cache'),
start_html('Simple Script'),
h1('Simple Script'),
start_form,
"What's your name? ",textfield(-name=>'name', -default=>""),p,
submit,
end_form,
hr,"\n";

if (param) {
print
"Your name is ",em(param('name')),p,
}
print end_html;

改造点はheader関数にexpires、pragma、Cache-Controlを入れてみたこと、
textfieldに-default=>""を入れてみたこと、
UIと表示項目を1つに減らしたことです。

やりたいのは、上のテキストボックスに名前を入れて、submitを押した瞬間に、上のtextboxをクリアすることです。
ぼくの理解では、最初に上記のCGIがあるURLにアクセスしたときにはプログラムは全部走ってしまう、paramがゼロだからそのときは入力表示を出すだけ、
実行を押した後もう一度このプログラムは最初から走る、paramに値があるから出力が表示される、というものです。

となれば、2度目に(入力を得て)実行されるときは、headerのcache関係の項目や、textfieldのdefaultが効いて空白になりそうな気がしますが、現実には最初に入った値がそのまま動き続けます。
これをPerl側で空白になるように制御できるでしょうか。

サーバーはFreeBSD(レンタル)、Perlは5.12、WebサーバーはApacheです。
クライアントはWindows7でIE9、Firefox22、Chrome28を使っています。
よろしくお願いします。

お世話になります。
下のサンプルコードは、CGI.pmのperldocに載っていたサンプルを改造したものです。

#! /usr/bin/perl
#
# simple.cgi -- CGIフォームの実験

use CGI qw/:standard/;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
print
header( -expires=>'-1d',
-pragma => 'no-cache',
'Cache-Control' => 'no-cache'),
start_html('Simple Script'),
h1('Simple Script'),
start_form,
"What's your name? ",textfield(-name=>'name', -defaul...続きを読む

Aベストアンサー

CGI.pm の v2.15 以降であれば、-override に真を設定すれば常に -default の値が表示されるようになると思います。

textfield(-name=>'name', -default=>"" -override => 1),


人気Q&Aランキング

おすすめ情報