8/26(火) 掛川・?

 へー,相加相乗平均の新しい証明(朝日新聞)とな。論文はこれ。ふーん,一番単純な帰納法のお手本みたいね。早速どっかで使おうっと。

 久々に仕事に集中した日。つーても,丸々一月ほったらかしていた事案を着手したと言うだけだが。
 ODBC-ODBC bridgeを使って,Windows側にあるACCESSファイルを,ODBC経由で,Vine Linux側のPHPスクリプトからアクセスするという件。相手側がWindowsドメイン管理下にあるため,何が原因か切り分けができずにいたのだが,何とか下記の手順で接続するまではできた(らしい?)。

0. brodbc03.tgzをダウンロードし,Windows側にorbrd.exe(ODBC-ODBC bridgeサーバ)をインストールしてもらい

サーバのIPアドレス
ポート番号(22002がデフォルト)
DSN, Database名, UID, PWD
を教えてもらう

1. UNIX ODBCドライバをインストールする

# apt-get install unixODBC unixODBC-devel

2. brodbc03.tgzのうち, client/makefile.uxを次のように書き換える。
# unixODBC
ODBCLIB = /usr/lib/libodbcinst.so.1.0.0 <-- libodbcにはSQL APIがなくなっていたので

3. makeしてbrodbc.soを/usr/libにコピー

4. /etc/odbcinst.iniに追記

[brodbc03]
Description = ODBC-ODBC bridge
Driver = /usr/local/lib/brodbc.so <--ここ
UsageCount = 1

5. /etc/odbc.initに追記(まだ不確定)
[test1]
Driver = brodbc03
Server = 192.168.xxx.xxx <-- ODBC設定済みのWindowsマシン
Port = xxxxx
TARGETDSN = TEST1ODBC
Database = TEST1
Username = user
Password = user
Servercharset = Shift_jis
Charset = eucjp
Debug = 0

[test2]
Driver = brodbc03
Server = 192.168.xxx.xxx
Port = xxxxx
TARGETDSN = TEST2ODBC
Database = TEST2
Username = user
Password = user
Servercharset = Shift_jis
Charset = eucjp
Debug = 0


6. isqlコマンドで接続確認

$ isql test1
(略)
SQL> <-- このプロンプトが出ればおっけ
$ isql test2
(略)
SQL>
7. php-odbcライブラリをインストール
# apt-get install php5-odbc php-odbc
7'. Apache2をソースからコンパイルしている場合は,PHPも
./configure --prefix=/usr/local/apache2 --with-apxs2=/usr/local/apache2/bin/apxs --with-unixODBC --with-mysql
とやって作り直しておく。

8. phpから接続テスト

//データベースへの接続を開く
$conn_id = odbc_connect("test1", "user", "user");
if(!$conn_id)
{
 print "データベースにつながりません\n";
 exit;
}
// SQL Query発行
$result = odbc_do($conn_id, "SQL文");
if(!$result)
{
 print "警告!: 結果が正しく戻ってきません.\n";
}
else
{
 while(odbc_fetch_row($result))
 {
  print odbc_result($result, 1) . ", " . odbc_result($result, 2) . "\n";
 }
}
//データベースへの接続を閉じる
$ret = odbc_close($conn_id);

 ハーめんどくさ。これでもまだアクセスがきちんと確認できたか不明。一歩前進だとは思うが完全解決への道のりは長そうだ。

[2008-08-27 追記] 無事接続確認できました。しかし・・・使えるSQL文に制限があるのってものすごく不自由だ。所詮,ODBCはSQLのサブセットしかサポートできてないから,しゃーないのだが。

 さて,客人を迎えに行ってから寝ます。