Perl::DBI
■ このスレッドは過去ログ倉庫に格納されています
>>194 どういう意味でしょうか?? DBI::connect には option 属性がなかったので。 少なくとも手元の環境ではconnect失敗でundefが戻ってきて処理は続くので、 環境やバージョンに依存した何かかね? PrintErrorを0にしないと、warningは でるけど。あるいは書いてないけどどこかでRaiseErrorを有効にしてるとか? % perl -e 'use DBI; $dbh = DBI->connect("dbi:Pg:host=aaa", "user", "pass",); print "死んでない\n"; print "dbh ", defined $dbh? "= $dbh": "is undef", "\n";' DBI connect('host=aaa','user',...) failed: could not translate host name "aaa" to address: Name or service not known at -e line 1 死んでない dbh is undef % perl -e 'use DBI; $dbh = DBI->connect("dbi:Pg:host=aaa", "user", "pass", {PrintError=>0}); print "死んでない\n"; print "dbh ", defined $dbh? "= $dbh": "is undef", "\n";' 死んでない dbh is undef >>197 ご指摘ありがとうございます! RaiseErrorが有効になっていたので、 無効にしてみたらちゃんとキャッチできました… なにかものすごい勘違いをしていたようです。 RaiseErrorを無効にしないとdieされるから キャッチできないってオチですね。 大変失礼しました。 Class::DBIをつかってOracle9iにつないでいます。 ORA-01000が出るんですが、原因がわかりません。 常に出るわけではなく、なにをきっかけにしているのか ずーっと悩んでいます。 Class::DBIを使った場合、カーソルが開く(もしくは閉じる)タイミングというのは いつになるんでしょうか? なにかヒントのようなものでもよいので お願いします。 windowsでperlからdbi使ってpostgreSQLに接続しようとすると perl command line iteratorが落ちてしまいます。 そしてMicrosoftへ連絡させられる・・・。 どのあたりに原因がありそうですか? postgreにアクセスしないperlプログラムはちゃんと動くし、 pgAdminからならちゃんとpostgreSQLは機能します。 CPAN使ってDBIとDBD-Pgをインストールしました。 windowsでこの環境構築できた人居ますか? >>201 普通に WindowsXP Pro + ActivePerl 5.6.1 + DBI 1.49 + DBD::Pg 1.21 + PostgreSQL 8.1.3 で動いてますが何か? ちなみにDBD::Pgはppmで貰ってきたやつ。 俺は Windows2000 + perl 5.8.7 built for cygwin + DBI 1.50 + DBD::Pg 1.43 + PostgreSQL 8.0.7 だな。 DBI 1.50にしようと思ったら Perl versions below 5.6.1 are no longer supported by the DBI. Perl versions 5.6.x may fail during installation with a complaint about the use of =head3 in the pod documentation. と言われてしまった。 そろそろ5.6は捨て時かな。 (他のモジュールでも「5.8以降じゃないからダメ」とインストールさせてもらえないのも結構増えてきた) DBIx::Classの話はここでいい? ある行をselect ... for updateで行ロックかけつつ更新したいんだけどDBICで for updateしつつデータを取得する方法がわからなくて困ってます。 どうすりゃいいの? 自己解決しました。 $rs->search_literal('id = ?) FOR UPDATE; --', $id); search_literalは与えた文字列のまわりを括弧でくるんでくれるので、 FOR UPDATEの部分を外に出すために途中で括弧を閉じ、そのままだと お尻の括弧が余るのでコメントにして無視させるというかなり強引な トリックです。 DBIの話題でいいのかなぁ? データベースはSQLite。 よくある検索画面。1000件中の11〜20件目が2ページに表示されている。 というようなとき、limitやoffsetで取得行数を減らしてパフォーマンスを あげることはよく行われていると思う。 だが検索にマッチした行が全部で何件かを知る必要がある。 limitをつけると、制限した行数しか返ってこないから こういうときSQLを2回発行するしかないんかな? order by してlimitしたりするとき、内部では何行あるか知っていると思うから、 SQL文にlimitつけてても制限されてない行数をしる方法がないかなぁと期待しているんだけど。 >>208 DBIだからこうというよりはSQL一般の話なのでデータベース板の それっぽい質問スレでで聞いたほうが知ってる人に当たる確率が 高いと思われる。 >order by してlimitしたりするとき、内部では何行あるか知っていると思うから、 DBの実装によると思う。 逆に言えば、DBごとに行数を返したり返さなかったりすると思うから、その共通I/FであるDBIでは取得できないと思う。 素直にselect count(*)しなされ。 実装によっては場合によっても違いそうだしな。 ちょうど都合のいいインデックスがあれば 頭からlimit数分順に拾うだけでいいかもしれない わけだし。 時代はDBIx::Class!って事で DBIxでLimit 4,10みたいなのできないんかねー >>214 pagerのことかな。直接limitしたいんだよというときにはかえってめんどくさいが。 あるいはsearch_literalで >>207 とおなじやりかたでlimitもつけられそう。 (試してはいない) DBIx::Class 系で、set_sql する方法きぼん。 compat とかわけわからなす。 スレ違いだったらすみません。DB板から移動してきました。 Perl + Postgresqlのアプリをmysqlに移植しようとしています。 Postgresqlでは複数ステートメントを連結したSQLをDBIで渡して実行できてたのですが、 mysqlでそのまま渡すとSyntax Errorとなってしまいます。 cseというクライアントソフト経由でも同様の症状がありましたが「一括実行」という Pstgresqlでは使ったことのない操作で複数ステートメントを順に実行できました。 Perlで実行するためには何か特殊な設定などが必要でしょうか。 宜しくお願いします。 DBに登録した画像バイナリを読み出して、Content-typeとContent-length指定で ブラウザに表示させることはできたんですが… これ、普通のhtmlと一緒に出す場合はどうするのでしょうか? >>219 httpがわかっていれば出来ない質問だな >220 mhtファイルを自前で生成するとか?(笑) 辿る道のりは人それぞれなのね。俺なんてバイナリ型なんて扱ったことないし。 バイナリ出力するスクリプトの横に別のHTMLを作って、<img src="./hoge.cgi"> なんて書いてみよう。 DBI+MySQLでLIMITにプレースホルダが使えねぇぇぇ。 $dbh = DBI->connect( $dsn, $user, $password ); $sth = $dbh->prepare( 'SELECT * FROM companion LIMIT 0, 3' ); $sth->execute() ; はOKだけど、 $i = 0; $sth = $dbh->prepare( 'SELECT * FROM companion LIMIT ?, 3' ); $sth->execute( $i ) ; とか、 $i = 0; $sth = $dbh->prepare( 'SELECT * FROM companion LIMIT $i, 3' ); $sth->execute() ; だと×。なして? - Class::DBI - Class::DBI::Sweet - DBIx::Class::Schema お好きなのをどうぞ。 >>223 > $sth = $dbh->prepare( 'SELECT * FROM companion LIMIT $i, 3' ); $sth = $dbh->prepare( "SELECT * FROM companion LIMIT $i, 3" ); じゃないか?「'」 だと$iが展開されないぞ。 > $sth = $dbh->prepare( "SELECT * FROM companion LIMIT $i, 3" ); そんな書き方してると、注入されますよ? いつからか忘れたけどDBD::mysqlがlimitの引数にplaceholder使えなくなったとおもう。 プレースホルダで渡すときにクォートされるからこんなSQLになってる LIMIT '0',3 ってかエラー吐いてるの見ればわかるでしょ? >>226 ギャグで言ってる?$iの汚染チェックするのは当然だろ。 オレは223の解釈が違ってるからレスしただけだ。 そもそも223の最後の例はプレースホルダ使ってないし。 sjisをsjisのまんまMySQLに渡したいんですが、2バイト目が0x5cのマルチバイト文字 ([\x81\x83\x84\x89-\x9F\xE0-\xEA][\x5C])で不具合がおこります。 十十十十 → 十十\十十\ 十と一を足すと十一 → 十と一を足すと十\一 と2文字毎に\マーク(0X5C)が入ってしまいます。 これはDBI内部でのエスケープ時のバグでしょうか? 携帯電話用なのでなるべくSjisを使いたいという前提で、解決法がありましたら教えてください。 >>232 内部処理はUTF-8かEUCでやって出入り口のみでSJISと変換する。 これが一番楽だと思う。内部処理をSJISでやるのはお勧めしない。 どうしてもやりたければ同じような変な現象があとからあとから出て 来るので、それととことん付き合う覚悟でどぞー。 >>233 お返事ありがとうございます。 携帯電話ユーザーなので、当たり前に機種依存文字を使ってきます。 丸囲み数字や、絵文字など。 他文字コードに変換すると極めて都合が悪いのです。。 文字コード変換前にそれぞれ絵文字や機種依存文字をマッピングしてやればいいのかもしれませんが、 その労力も大変なものなので、どうしたものかと >>233 こういうの使うのも面倒なの? http://search.cpan.org/ ~hio/Unicode-Japanese-0.34/Japanese.pm ありゃアンカ間違えた >>235 は>>234 へのレスね >>236 auに対応してないですね。 絵文字のマッピングは途中までやってるので続きやってみようかな。 それと、機種依存文字か。 他にsjisからutf8に変換するときに注意するような文字ってありますかね? Sjisに戻すという事を前提に。 \マークが全角バックスラッシュになるのは確認してるんですが。 Encode-JP-Mobile ってーのは何だか使えそうだが、どうだろう? Encode::from_to( $string, "CP932","UTF8",Encode::FB_XMLCREF); でIBM外字全部処理してくれるんですね。 こりゃ便利だ。。Encode使ってなかったよ(-o-; すでにスレ違いだけどEncode-2.13以降なら「FB_」はいらないらしいよ > Encode 2.13以降ではfrom_toのfromの段階、すなわちdecodeの際にはcheckせずとにかくutf8化し、 > toの段階にあたるencodeの際にcheckを適用するという風にしたのですが、 > その結果、FB_(PERLQQ|HTMLCREF|XMLCREF)のFBが不要になったのです。 http://blog.livedoor.jp/dankogai/archives/50502791.html http://kawa.at.webry.info/200605/article_11.html Perlを触り始めたばかりなので、何がなんだかわかっていません。 DIBを使用したいのですが、以下のエラーが出てしまいます。 【ソース】 1 #!/usr/perl5/bin/perl 2 ## 3 ## 4 require "/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/Bundle/DBI.pm"; 5 6 @ary = DBI->available_drivers; 7 foreach (@ary){ 8 print $_,"\n"; 9 } 【エラー】 $ /usr/bin/perl test01.cgi Can't locate object method "available_drivers" via package "DBI" (perhaps you forgot to load "DBI"?) at test01.cgi line 6. 【環境】 Solaris9 + Oracle10g(10.1.0.3.0) ご存知の方、ご指導よろしくお願いします。 >>241 つーかなんでuseじゃなくてrequireで読んでるのよ。 (ちゃんとPerlのモジュール用のディレクトリにDBIインストールしろって) #!/usr/perl5/bin/perl use DBI; foreach (DBI->available_drivers('TRUE')){ print "$_\n"; } >>242 レスありがとうございます。 >つーかなんでuseじゃなくてrequireで読んでるのよ。 Oracle10gのインストール時にインストールされた DBI.pm を使いたかったからです。 (以下の3箇所に DBI.pm が存在していました。) A. /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/Apache/DBI.pm B. /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/Bundle/DBI.pm C. /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/DBI.pm >ちゃんとPerlのモジュール用のディレクトリにDBIインストールしろって インストールというのは、どういうものなんでしょうか? ★インストール方法1 @INCに定義されているディレクトリの1つに、上記 B のディレクトリの内容を 全部コピーして実行。結果は、 Can't locate object method "available_drivers" via package "DBI" (perhaps you forgot to load "DBI"?) at test01.cgi line 5. でした。 ※@INCにパスを追加する方法は、わかっておりません。 続き ★インストール方法2 CPAN http://search.cpan.org/ ~timb/DBI-1.51/DBI.pm から DBI-1.51.tar.gz をダウンロード。 gnuの make と gcc をダウンロード&インストール。 http://www.sunfreeware.com/ から libiconv-1.8 をダウンロード&インストール。 makeで失敗。 make: *** [blib/arch/auto/DBI/DBI.so] Error 1 行き詰まりです。 「DBIインストール」は、こんなに複雑なものなのでしょうか? やはり、Solaris9(Intel-32bit) + Oracle10g(10.1.0.3.0)の環境が災いしているとか・・・ >>244 仕事でそんなレベルのことで悩んでるのなら、とっとと辞めればいいのに。 >>244 DBI の問題ではなく、読み込んだモジュールを import していない せいです。use は自動で import しますが、require はしません。 @INC を直接いじるのは最後の手段なので、lib pragma を使い、次の行を を use DBI の前のどこかに入れてください。 use lib '/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/'; perl は、付属ドキュメントが充実しています。2ch などで質問する前に perldoc を使うようにしてください。 >>246 有難う御座います。 実行してみました。 上手くいっていません。 まだ、設定がいるのでしょうか? 【ソース】 #!/usr/perl5/bin/perl use lib '/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/'; use DBI; #foreach (DBI->available_drivers('TRUE')){ #print "$_\n"; #} 【結果】 $ perl test01.cgi ld.so.1: perl: 重大なエラー: 再配置エラー: ファイル /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris//auto/DBI/DBI.so: シンボル perl_get_sv: 参照シンボルが見つかりません。 強制終了 >perl は、付属ドキュメントが充実しています。2ch などで質問する前に >perldoc を使うようにしてください。 了解しました。手引き有難う御座います。 >>246 > 重大なエラー: 再配置エラー: ファイル そのDBIじゃなくて素直に http://search.cpan.org/ ~timb/DBI-1.51/ のDBI使おうよ。 恐らく /u01/app/oracle/OraHome_1/以下略 にある方はインストールまたはコンパイルに失敗しているんじゃない? それと同名のモジュールで http://search.cpan.org/ ~timb/ とは別物という可能性もあるでしょ。 インストール方法はREADME読め。 つーか読まなくとも perl Makefile.PL make make test make install とする手順はほぼ全てのモジュールで変わらないっての。 ちなみにPerl 5.6.xだと警告(「5.6系列なんてもうサポートしてねーよ」)と出るからできればPerl 5.8.xにすることが望まれる。 5.6のまま使い続けたいのなら、警告無視してそのままインストールを強行するか、古いバージョンのDBIを落としてインストールすればいい。 > 了解しました。手引き有難う御座います。 了解したのに質問してるしw ごめん。 間違えた。 誤 >>246 正 >>247 >>248 README読みました。 【http://search.cpan.org/ ~timb/DBI-1.39/の結果】 ※perlのバージョンは v5.6.1 built for i86pc-solaris-64int $ make /bin/sh -c true /bin/sh -c true /bin/sh -c true cc -c -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xO3 -xdepend -DVERSION=\"1.39\" -DXS_VERSION=\" 1.39\" -KPIC -I/usr/perl5/5.6.1/lib/i86pc-solaris-64int/CORE -DDBI_NO_THREADS Perl.c cc: unrecognized option `-KPIC' cc: language depend not recognized cc: Perl.c: linker input file unused because linking not done /usr/bin/perl -I/usr/perl5/5.6.1/lib/i86pc-solaris-64int -I/usr/perl5/5.6.1/lib /usr/perl5/5.6.1/lib /ExtUtils/xsubpp -typemap /usr/perl5/5.6.1/lib/ExtUtils/typemap -typemap typemap DBI.xs > DBI.xsc & & mv DBI.xsc DBI.c cc -c -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xO3 -xdepend -DVERSION=\"1.39\" -DXS_VERSION=\" 1.39\" -KPIC -I/usr/perl5/5.6.1/lib/i86pc-solaris-64int/CORE -DDBI_NO_THREADS DBI.c cc: unrecognized option `-KPIC' cc: language depend not recognized cc: DBI.c: linker input file unused because linking not done rm -f blib/arch/auto/DBI/DBI.so LD_RUN_PATH="" cc -G DBI.o -o blib/arch/auto/DBI/DBI.so cc: DBI.o: No such file or directory cc: no input files make: *** [blib/arch/auto/DBI/DBI.so] Error 1 $ $ gcc -v Reading specs from /usr/local/lib/gcc/i386-pc-solaris2.9/3.4.2/specs Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls Thread model: posix gcc version 3.4.2 DBI-1.39 27 Nov 2003 perl敷居高い。 (゚∀゚)アヒャ! その程度もなんとかできない程度のスキルならインテル版Solaris使うのは ちと荷が重いんじゃないかな... 仕事ならご愁傷様。 Solaris10のフルインストールでインストールされるgccとmakeを使っても結果は同じでした。 Solaris + Intel + 32bitの場合のOracleの選択肢は、Solaris9 + Oracle10gの 組み合わせしかないし、Solaris10のZFSを使いたいと思っているので、 素直にphp + MySQLを使う方がストレートのような気がしてきました。 ちゃんとした技術のあるところへ再委託したほうがいいよ。 で、出来た時間でじっくりお勉強。 まあまあ、よくハマル話なんで、愚颶ると結構出てくることだから。 ただ、エラーメッセージちゃんと読まずに問題を切り分けられないからって、 DBI に文句言うのはメ。 ヒント: gcc の -fPIC に当るのが SUN謹製 cc の -KPIC。Perl は寂しがり屋 だから自分とおそろいのコンパイラが好き。 皆様ありがとうございました。 申し訳ないのですが php + MySQL で問題無く構築できました。 ッッッッッッッッッッッッッッッッッッッッ〜〜〜!!! ば・・・ばかな! DBD-Pgをインスコできねぇ・・・ググっても該当するものがでてこねぇ マジやべぇか(ry DBD-Pg-1.49のmakeで下記の警告が出ます。 ご教授おねがいします。 ----------------------------- dbdimp.c: In function 'dbd_bind_ph': dbdimp.c:1656: 警告: value computed is not used quote.c: In function 'quote_string': quote.c:44: 警告: value computed is not used quote.c: In function 'quote_geom': quote.c:79: 警告: value computed is not used quote.c: In function 'quote_path': quote.c:108: 警告: value computed is not used quote.c: In function 'quote_circle': quote.c:137: 警告: value computed is not used quote.c: In function 'quote_bytea': quote.c:174: 警告: value computed is not used quote.c: In function 'dequote_bytea': quote.c:329: 警告: value computed is not used ---------------------------------------- PostgoreSQL 8.1.4をインスコして起動済みです。 DBI-1.51をインスコ ↓工程 su - postgres export POSTGRES_INCLUDE=/usr/local/pgsql/include export POSTGRES_LIB=/usr/local/pgsql/lib perl Makefile.PL make >>262 レスアザース 一通りmake installをして下記トレース(****はふせたいヶ所)を実行してみました。 ---------------------------------------------- #!/usr/bin/perl use DBI; use constant DBNAME => 'DBI:Pg:dbname=****'; use constant DBUSER => 'postgres'; use constant DBPASS => '****'; DBI->trace( 2, '/home/postgres/public_html/dbi_trace.log'); DBI->connect( DBNAME, DBUSER, DBPASS, { AutoCommit => 0 }); print "Content-Type: text/plain\n\n"; print $DBI::errstr? $_: 'Done'; ---------------------------------------------- 結果(dbi_trace.log) -------------------------------------------------- DBI 1.51-ithread default trace level set to 0x0/2 (pid 5346) -> DBI->connect(DBI:Pg:dbname=tottoDB, postgres, ****, HASH(0x8eabc28)) -> DBI->install_driver(Pg) for linux perl=5.008008 pid=5346 ruid=0 euid=0 -- DBI::END -------------------------------------------------- DBD::PgのVersionなど詳細をはきだす前にENDされています。 ふせたいヶ所が結果でバッチリ見えてるとか オレっておちゃめw ぐっすり睡眠をとってからmake uninstallで指定されているファイルをrm -fして 再インスコしたらDBD::Pgが動作しました。 /usr/local/pgsql/lib/libpq.so.4 のシンボリックリンクを /usr/lib/libpq.so.4 に作った事が吉とでたようです。 ちなみに>262の言う通り警告は問題なかったようです。 環境は、mod-perl+MySQL+qmail+vpopmailで、vpopmailのユーザー管理はMySQLにしています。 perlでメールアカウントを作成するにはどうしたらよいでしょうか? やりたい事は、セカンドメールサービスのようなもので、 登録したユーザー同士でセカンドメールを与えるという物です。 user_a@hotmail.comにid_a@mydomain.com user_b@hogehoge.comにid_b@mydomain.comを与え、 user_a@hotmail.comからid_b@mydomain.comに送られたメールを id_a@mydomain.comからuser_b@hogehoge.comに転送するような感じです。 現在はSubjectに送りたい方のidを入力してもらって、recept@mydomain.comを窓口にして転送してます。 もっと簡易なシステムを作りたくご相談します。 こういう場合、メールアカウントを作る必要もないのでしょうか? スマソ。DBICについての質問をココでさせて貰っても良いだろうか CatalystでWebアプリを作っていて、思いっきりモデルで躓いている CREATE TABLE TblDiary( parano int4 order_no int4 belong_dno int4 have_illustno int4 PRIMARY KEY(parano)); CREATE TABLE TblIllust( illustno int4 illust_name text, PRIMARY KEY(illustno)); 上記の「TblDiary」と「TblIllust」という2つのテーブルがあって、 TblDiary.have_illustnoとTblIllust.illustnoをJOINTさせたい このとき my $table = $c->model('DBIC::TblDiary'); $table->has_one('illust_bind' => 'Test::Model::DBIC::TblIllust', 'illustno'); my $records = $table->search( {belong_dno => $dno}, {order_by => 'order_no'}, {prefetch => ['illust_bind']} ); と書いているんだが、これだとTblDiary.paranoとTblIllust.illustnoがJOINTしてしまうんだ・・・ (一応、それ以外のところは思っているとおりにデータが取れている) これを、本来望んでいるTblDiary.have_illustnoとTblIllust.illustnoの JOINTにするにはどうすれば良いのか、誰か教授して貰えないだろうか あ〜、うまくインデントできなかった・・・ 見辛い文体で申し訳ないorz 周り見ていると、質問者はみんな丁寧語だ・・・ こちらもスマンかった とりあえず、DBICについてはスレ違いかもしれないので 初心者板でも行ってきます 【初心者】 λ...... >>271 レスありがとうございます。 えっと、申し訳ないですが、そこはすでに拝見させて貰いました・・・ (かなり詳しく書かれており、非常に重宝させて頂いています) リレーションですが、モデルのファイルに設定を書き込まずに Catalystのコントローラーにて書きたい点と、 TblDiaryが主キーのカラムじゃない点で頭を悩ませています 説明不足で申し訳ありませんでした。 かなりググったのですが、探し方が足りないのか 未だにネットでは見つからずにいますorz 実際にCatalystを使っておられて、CDBIを使用されている方は おられるでしょうか? う〜ん、すみません 説明がヘタで申し訳ないです・・・ 主キーではないTblDiary.have_illustnoと連結させたいので、 このhave_illustnoというカラムを何らかの方法で illustnoというカラムとリレーション指定を行いたいです (このままでは、主キーのカラムであるTblDiary.paranoと連結してしまいますので) 希望するhave_illustnoへと連結できるよう、どのようにコントローラーに 指示を送れば良いのかが分からないです。 >>272 CDBIを使用されて(×) DBICを使用されて(○) ・・・間違えました リレーションの設定はモデルでやれってば。 コントローラでやる理由は? >>275 レスありがとうございます。 コントローラに記述する理由ですが、今後テーブルの個数が大きく増減する可能性があり、 モデルを全削除して、再度CatalystのヘルパースクリプトでDBの構造から モデルファイルを自動作成するかもしれないからです。 ヘルパースクリプトを使わず、変更の度に対応するCatalystのモデルファイルを 手動で追加・削除したりしても良いのですが、どうしてもミスがありますので・・・ こちらは希望ですので、モデルに書くしか実現できないようでしたら諦めたいと思います。 ただ、モデルに書いた場合でも片方のテーブルが主キー以外のカラムと連結できず、 ハマり状態から抜けられずにいます。 モデルにリレーションを書く方法も平行して試行錯誤してみます。 あっちにも書いたし、もしかしたら引用ミスかもしれないけど こうじゃなくて my $records = $table->search( {belong_dno => $dno}, {order_by => 'order_no'}, {prefetch => ['illust_bind']} ); こうじゃないのかな my $records = $table->search( { belong_dno => $dno }, { order_by => 'order_no', prefetch => [ 'illust_bind' ] } ); 2chは半角スペースが詰められちゃうから 書き込むときは全角でインデントするといいよ >>276 それなら DBIC::Schema 使えばいいんじゃないかな。 >>276 package MySchemaClass; use base qw/DBIx::Class/; # 自動生成 package MyController; use MySchemaClass; MySchemaClass->belongs_to(...); >>277 >>278 >>279 レスを頂きましてありがとうございます。 >>277 ご教授ありがとうございました。 prefetchはorder_byと同じ第2引数に記述するのですね。 今まで第3引数として書いても動作していたのは、 DBICの方で良きに計らってくれたのかもしれません・・・ ただちに直させて頂きました。 インデントの件も御指摘ありがとうございます。 以後気をつけて書き込みさせて頂きます。 >>278 >>279 なるほど、DBIC::Schemaを使用すれば、問題とならないのですね。 Catalystを使う上でもDBIC::Schemaが推奨させているようですので、 私もこちらを非常に使いたいのですが、未熟なため、 DBIC::Schemaを使用してCatalystのヘルパースクリプトを立ち上げられずにいます。 こちらのサイトを参考にして試してみたのですが http://en.yummy.stripper.jp/?eid=362958 >script\lc_create.pl model DBIC DBIC::Schema Lc::Schema create=static DBI:Pg:mydb user pass とプロンプトからヘルパースクリプトを起動させると >Can't locate object method "use" via package "DBIx::Class::Schema::Loader" (perhaps you forgot to load "D BIx::Class::Schema::Loader"?) 『もしかしてDBIx::Class::Schema::Loaderをロードし忘れているんじゃないか?』と指摘されてしまいました。 該当場所まで言って、useでロードして見るものの、 >Can't locate object method "use" via package "DBIx::Class::Schema::Loader" うしろの( )指摘がなくなっただけでして、現在はこちらで立ち止まっている状態です。 推奨されるDBIC::Schemaには切り替えたいですので、今から引き続き挑戦して参ります。 (何か大ポカをやらかしていそうな気がします・・・) 非常につまらないことが原因で本当に申し訳ないのですが・・・orz >>268 の件、ようやく望む通りの動きをするコーティングができました。 my $table = $c->model('DBIC::TblDiary'); $table->belongs_to(illust_bind => 'Test::Model::DBIC::TblIllust', 'have_illustno'); my $records = $table->search( { belong_dno => $dno }, { order_by => 'order_no', prefetch => ['illust_bind'] } ); 「belongs_to」にて最後に繋げたい、主キーではないカラム名を指示するだけだったようです。 お見苦しい質問をいたしまして、本当に申し訳ございませんでした。 レスを頂いた皆様に、心より御礼申し上げます。 おっさんさ、いいかげんにしたほうがいいとおもうよ。 CatalystでDBIC使ってフォームからの値を一発でアップデート、クリエイトできますか? 以下やってみたけど、エラーとなりまうす my $result = $c->form; my $userdata = $c->model('HOGE')->find(uid => $uid); $userdata->update($result); あほなのでフォームの値をいちいちハッシュに入れてからじゃないとうまくできないです。 良い方法あったらおしえてください。 ちょっと伝わらなかったかもしれません。 ごめんなさい。 $userdata->update($result); これ$resultは$c->formなんですが、これだとエラーになるんですよ。 DBIx::Class::InflateColumn::update(): No such column _records いちいち $c->req->param('hoge1')をハッシュに入れて、update(\%hoges)とすればうまくいくんですけど いちいちハッシュにいれなくても良い方法ないですかね。 >>289 $c->formはCatalyst::RequestオブジェクトだからいきなりDBICのupdateに わたしてもそりゃだめだろう。渡すとすれば$c->form->paramsじゃないか? チェックはちゃんとしてあるのが前提だけどな。 $c->form->paramsはだめでした。 http://search.cpan.org/ ~jrobinson/DBIx-Class-WebForm-0.02/lib/DBIx/Class/WebForm.pm これためしてみましたが、CatalystのDBICに __PACKAGE__=>config(additional_base_classes => 'DBIx::Class::WebForm'); 入れてみたけど $userdata->update_from_form($result); で Can't locate object method "update_from_form" とでてしまう... >>291 $c->form->paramsが返すハッシュリファレンスの中身は期待しているもの だったのか確認したのか? update_from_formはクラスメソッド。使い方がマニュアルと違うじゃん。 DBI使ってtextファイルの中身をpostgresのtext型のフィールドに突っ込みたいんですが、 ファイルの中身は変数に一度突っ込んでから $sth->execut($text); する方法しかないのでしょうか? メモリの使用量が心配なんですが、他に良い方法はありませんか? メモリが心配になるくらいでかいテキスト、突っ込んだあと どうやって利用するんだ? 取り出すときもメモリの心配するのか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる