2010年10月07日


PHP : COM 経由( OO4O ) での Oracle アクセス

OpenDatabaseメソッドの3つ目の引数は、デフォルト(Visual Basicモード)のモードです。

CreateDynasetメソッドの第二引数は、データベースから取り出された文字列データから、
後続するブランクを削除しない事を意味します。
<?
header( "Content-Type: text/html; Charset=euc-jp" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

	// 日本語設定
	mb_language( "ja" );
	// 内部エンコード
	mb_internal_encoding("UTF-8");

	// Oracleオブジェクト
	$OracleOO4O = new COM( "OracleInProcServer.XOraSession" );

	// 接続文字列作成
	$db_path = realpath(mb_convert_encoding( "./販売管理C.mdb", "SHIFT_JIS", "EUC-JP" ));
	$ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;";
	$ConnectionString .= "Data Source=$db_path;";

	// 接続
	$cn = $OracleOO4O->OpenDatabase("VPC-019/ORCL", "LIGHTBOX/LIGHTBOX", 0);

	$query = "select * from 社員マスタ";
	$query = mb_convert_encoding( $query, "SHIFT_JIS", "EUC-JP" );

	// レコードセット取得
	$rs = $cn->CreateDynaset($query,2);
	while( !$rs->EOF ) {

		// レコードセットを PHP で使いやすいように変換
		$ret = ms_convert_fetch_array( $rs, "EUC-JP", "SHIFT_JIS" );

		print "{$ret['氏名']},{$ret['フリガナ']},{$ret['生年月日']},{$ret['給与']}";
		print "<br>";

		$query = "update 社員マスタ set 生年月日 = null where 社員コード = '{$ret['社員コード']}'";
		$query = mb_convert_encoding( $query, "SHIFT_JIS", "EUC-JP" );
		// 行を返さない SQL の実行
		$cn->ExecuteSQL( $query );

		$rs->MoveNext();
	}

	// レコードセットを閉じる必要はありません

	// 接続解除は必要ありません

// ***********************************************
// レコードセット内のデータのキャラクタセットを
// 変換して、インデックス配列と連想配列作成
// ***********************************************
function ms_convert_fetch_array( &$rs, $to_encoding , $from_encoding ) {

	$ret = array();
	for( $i = 0; $i < $rs->Fields->count; $i++ ) {
		// 値変換(インデックス配列)
		$ret[$i] = mb_convert_encoding(
			$rs->Fields[$i]->value."",
			$to_encoding,
			$from_encoding
		);
		// 列名変換
		$k = mb_convert_encoding(
			$rs->Fields[$i]->name,
			$to_encoding,
			$from_encoding
		);
		// 連想配列作成
		$ret[$k] = $ret[$i];
	}

	return $ret;
}
?>



posted by at 2010-10-07 13:10 | PHP+COM | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します