時間なし。ソースのみ。
<% Dim strSQL Dim strCon Dim adoRec Dim xmlDocXml Dim xmlDocXsl '接続文字列 strCon = "Provider=SQLOLEDB;" strCon = strCon & "Data Source=(local);" strCon = strCon & "User ID=sa;" strCon = strCon & "Password=pass;" strCon = strCon & "Initial Catalog=Master;" 'SQLを実行 strSQL = "SELECT * FROM MYTABLE" Set adoRec = Server.CreateObject("ADODB.Recordset") adoRec.CursorLocation = adUseClient Call adoRec.Open(strSQL, strCon, adOpenForwardOnly, adLockReadOnly, adCmdText) Set adoRec.ActiveConnection = Nothing 'xml作成 Set xmlDocXml = Server.CreateObject("MSXML2.DOMDocument") xmlDocXml.async = False Call adoRec.Save(xmlDocXml, adPersistXML) Call adoRec.Close() 'xsl読み込み Set xmlDocXsl = Server.CreateObject("MSXML2.DOMDocument") xmlDocXsl.async = False Call xmlDocXsl.load("template.xsl") '出力する Call Response.Write(xmlDocXml.transformNode(xmlDocXsl)) %>
「New Comment Posted to の文字化けをなおす。」でみた、Movable Typeのメールの本文作成するとこ
require Text::Wrap;
$Text::Wrap::cols = 72;
$body = Text::Wrap::wrap('', '', $body) . "\n$link_url\n\n" .
$app->translate('IP Address:') . ' ' . $comment->ip . "\n" .
$app->translate('Name:') . ' ' . $comment->author . "\n" .
$app->translate('Email Address:') . ' ' . $comment->email . "\n" .
$app->translate('URL:') . ' ' . $comment->url . "\n\n" .
$app->translate('Comments:') . "\n\n" . $comment->text . "\n";
は
$body = jcode( $body )->jfold(( 72, "\n" ));
$body .= "\n$link_url\n\n" .
$app->translate('IP Address:') . ' ' . $comment->ip . "\n" .
$app->translate('Name:') . ' ' . $comment->author . "\n" .
$app->translate('Email Address:') . ' ' . $comment->email . "\n" .
$app->translate('URL:') . ' ' . $comment->url . "\n\n" .
$app->translate('Comments:') . "\n\n" . $comment->text . "\n";
のがよさげか?
Perlで名前つき引数ってこんな感じに書く。サブルーチン内では省略されたときの初期値をエレガントに設定する。
sub mySub {
%args = (
PARAM1 => '',
PARAM2 => 5,
PARAM3 => '',
@_
);
return \%args;
}
# 呼び出す
$ret = mySub( PARAM1 => 'foo',
PARAM2 => 123,
PARAM3 => 'bar');
でも、VBな私は引数名の大文字小文字の区別がないようにしたい。さらに、ハッシュのキーをすべて大文字にしたい。したがってこう。
sub mySub {
my %args = @_;
%args = (
PARAM1 => '',
PARAM2 => 5,
PARAM3 => '',
( map { uc( $_ ) => $args{$_} } keys( %args ) )
);
return \%args;
}
# 呼び出す
$ret = mySub( Param1 => 'foo',
pArAm2 => 123,
param3 => 'bar');
[raindrop::diary] New Comment Posted toの件を、取り急ぎなおしてみた。全体をちゃんと見たわけじゃないので、適当。だけどちゃんと直った。
# MT::App::Comments # From Line 349 # <<< MODIFY # my $charset = $app->{cfg}->PublishCharset || 'iso-8859-1'; my $charset = 'iso-2022-jp'; # >>> MODIFY $head{'Content-Type'} = qq(text/plain; charset="$charset"); my $body = $app->translate( 'A new comment has been posted on your blog [_1], on entry #[_2] ([_3]).', $blog->name, $entry->id, $entry->title); require Text::Wrap; $Text::Wrap::cols = 72; $body = Text::Wrap::wrap('', '', $body) . "\n$link_url\n\n" . $app->translate('IP Address:') . ' ' . $comment->ip . "\n" . $app->translate('Name:') . ' ' . $comment->author . "\n" . $app->translate('Email Address:') . ' ' . $comment->email . "\n" . $app->translate('URL:') . ' ' . $comment->url . "\n\n" . $app->translate('Comments:') . "\n\n" . $comment->text . "\n"; # <<< ADD require Jcode; $body = new Jcode( $body )->jis(); # >>> ADD
あとは、extlibにJcodeをいれる。こんだけ。
覚え書き的ですが
# エンコード $value =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; # デコード $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Movable Typeの場合、@INC(ライブラリ検索パス)にユーザ定義パスを追加する処理はこんな感じで実現している。
my($MT_DIR); BEGIN { if ($0 =~ m!(.*[/\\])!) { $MT_DIR = $1; } else { $MT_DIR = './'; } unshift @INC, $MT_DIR . 'lib'; unshift @INC, $MT_DIR . 'extlib'; }
私もそれに倣ってずっとunshiftで押し込んでたんだけど、実はプラグマが存在することを最近知った。これだと、モジュール内でユーザ定義ライブラリ内のモジュール'hoge.pm'を参照するときも、requierでなく、useで書くことができる。
use lib qw(./lib ./extlib); use hoge;
DBの検索条件を指定して、検索結果を表示する、こんなフレームページを作成しました
<!-- フレームドキュメントのフレーム定義部分 --> <frameset rows="*,60"> <!-- 検索結果を表示するフレーム --> <frame id="frame_main" name="frame_main" frameborder="0" /> <!-- 検索条件のフォーム --> <frame id="frame_menu" name="frame_form" frameborder="0" src="form.asp" /> <noframes> (省略) </noframes> </frameset> <!-- 実際にはこんな感じ ┏━━━━━━━┓ ┃frame_main ┃ ┃ ┃ ┃ ┃ ┠───────┨ ┃frame_form ┃ ┗━━━━━━━┛ -->
ページの初期表示に検索結果を表示するため、form.aspのbody.onloadにフォームをサブミットするコードを書いておいたのですが、httpsでアクセスすると、表示時に、'このページにはセキュリティ保護された項目と保護されていない項目が含まれています。 保護されていない項目を表示しますか?'が表示されてしまいます。frame_mainに表示するものがないため、UAが'about:blank'を表示しようとして起こるみたいです。ダミーのドキュメントを作成して、frameタグのsrcに指定しておくと解決します。
UDLファイルを作成して、Microsoft OLE DB Provider for Oracleを使用してOracleに接続するテストを行い、成功することを確認したのですが・・・ASPより接続すると以下のエラー
-2147467259(Microsoft OLE DB Provider for Oracle) Oracle クライアントとネットワーク コンポーネントが見つかりません。これらのコンポーネントは Oracle Corporation から提供され、Oracle Version 7.3.3 (またはそれ以降) のクライアント ソフトウェアの一部としてインストールされます。 プロバイダは、これらのコンポーネントがインストールされるまで機能しません。
原因は、c:\oracle\ora92 ディレクトリに、Administrators, Authenticated Users, SYSTEMのみアクセス許可になっていたためでした。IUSR_(コンピュータ名)を追加すると、接続可能になりました。
開発環境がFAT32、実機がNTFSだったのが敗因でした:-(
実機セットアップのため、Windows 2000 Serverに、新たにMSDEとOracle Clientをインストールして、MSDEにデータベースを作成し、Oracleのリンクサーバを作成しました。
そして、MSDEから使用するためOracleの表をビューとして作成しようとするとこんなエラーが。
1>SELECT * FROM DB_SVR..USER_FOO.TABLE_BAR 2>GO メッセージ 7302、レベル 16、状態 1、サーバー TESTSRV、行 1 OLE DB プロバイダ 'MSDAORA.1' のインターフェイスを作成できませんでした。 1>
インターフェースと言う言葉から想像するに、COM回りのエラーであろうと想像は付くのですが(OLE DBってCOMですから)MDACの再インストールを行っても、MSDEの再インストールを行っても解決しませんでした。
一応、
280106 - [HOWTO] SQL Server で Oracle へのリンク サーバーのセットアップおよびトラブルシューティングを行う方法[support.microsoft.com]
に情報がありますが、REGSVR32で確認する前にMDACの再インストールをしたので、あまり有用な情報とは思えませんでした。
だいぶん長いこと試したのですが、結局は、
で、ビューが作成できるようになりました。Everyoneでなく、MSDEサービスがどのユーザの権限で実行されるのか調べて設定し直さなくてはいけないのですが、それはまたあとで。とりあえず原因は権限不足、だったみたいです。
2003.12.08 追記
SYSTEMアカウントに対し、権限を追加すればOKです。
複数ページの<body onload="....">に同じクライアントスクリプトの初期化処理を記述するのはメンテナンスが大変、というあなたに朗報です!
...というほどのものではないのですが、まあ、こんな感じで、このスクリプトを読み込むすべてのページで、同じ初期化処理を行うことができます。
// init.js window.onload = function () { // 初期化処理を記述します... return true; }
そして、それぞれのページのhead要素内に
<script type="text/javascript" src="./init.js"></script>
と記述します。
ここでは関数を代入していますが、
// init.js
window.onload = 'init(this);'
などと、スクリプトを文字列で指定しても動きそうな気もします。(確認していません)
また、もちろんonload以外でも、たとえば
window.onblur = function () {
window.focus();
}
なども動きます。
HTMLに出力することを考えて、NULL項目は' 'と出力させようとしたSQLをテストしようとSQL*Plusで実行したのですが
SQL> SELECT NVL(emp_cd, ' ') AS emp_cd 2 FROM emp_tbl 3 / nbspに値を入力してください:
&は変数として扱われるの?そんなん知りませんでした。これはSQL*Plusの置換変数と言って、実行時に値を聞いてきます。ちなみに、&&var、と言うように&を2つ重ねると、そのSQL文内の後続の&varすべてを置換します。
で、置換変数を無効にするにはこうするそうです。
SQL> SET DEFINE OFF
こういうのもありましたね・・・
SQL> SELECT NVL(TRIM(' '), 'null!') FROM DUAL
2 /
NVL(T
-----
null!
オラクルで、CHAR(8)で年月日の区切りなしで日付を格納してる列を、TO_DATE, TO_CHARでSELECTすると、こんなエラーが出ました。
ORA-01841: (周)年は-4713と+9999の間で指定してください。0であってはなりません。
エラーメッセージを見てもさっぱりわけがわからないのですがたまたまデータが空白の行でした。そりゃあそうですね。
こんな感じで実行すると、同じエラーになりました。
CREATE TABLE SAMPLE_TABLE(
CHAR_DATE CHAR(8)
)
/
INSERT INTO SAMPLE_TABLE
VALUES(' ')
/
SELECT
TO_CHAR(TO_DATE(CHAR_DATE, 'YYYYMMDD'), 'YYYY/MM/DD') AS FORMATED_DATE
FROM SAMPLE_TABLE
/
このエラーのわけがわからなくて、Web上の情報をあさったところ、面白い事例がありました。