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のサブセットしかサポートできてないから,しゃーないのだが。
 さて,客人を迎えに行ってから寝ます。