RadPHP でSQL Serverへの接続テスト

◆テスト1 データエクスプローラでSQL Serverに接続してみる

結果: NG

RadPHPの「データエクスプローラ」で、「MSSQL」を選択、新規の接続を追加し「テスト接続」のボタンをクリックすると、
下記のメッセージが出力され、接続できない。

TDBXError: DBX Error: Driver could not be properly initialized.
Client library may be missing, not installed properly, or of the wrong version.

<接続の登録内容>
 サーバー名 : ibmsvr01\mdb01
 データベース名 : testdb
 ユーザ名 : user
 パスワード : ****

<環境>
 開発用PC : Windows7 , IIS7 , PHP5.2.14
 サーバー : Win2003 server , SQL Server 2005 , IIS7, PHP5.2.14

<その他>
 PHP5からは、SQL Serverにアクセスできる状態。 RadPHP からは上記の通りアクセスできない

?

◆テスト2 SQL Server 2008 Native Clientをインストールして再テスト

SQL Server 2005 Native Clientはインストールしていたが、ダメもとでSQL Server 2008 Native Clientを
インストールして再テストしてみた。

 ダウンロード: SQL Server 2008 Native Client

 結果: OK 

データエクスプローラで、テーブル名等が参照できるようになった

どうして、SQL Server 2008 Native Clientをいれることによって、接続できるようになったのか、
まったく理解できない。

使っているSQL Serverは2005で、2008ではない。 全く理解できない。

なんか怒りがこみ上げてきた。

参考にさせてもらったサイト:海外サイトだったがURL記録し忘れた。
そこに、SQL Server 2008 Native Clientをいれてみそって書かれていた。

?

◆テスト3 データエクスプローラのテーブルをフォームに張り付けて接続できるかテスト

結果: NG

データエクスプローラが使えるようになったので、テーブルをフォームに張り付けて接続できるかテストしてみた。

  

右のデータエクスプローラのテーブルを、フォームにドラッグすると、
あっという間にコントロールが4つ配置されるので、そのまま実行アイコンをクリック

エラーメッセージは...
Fatal error: Call to undefined function mssql_get_last_message()
in C:\Program Files\Embarcadero\RadPHP\3.0\rpcl\adodb\drivers\adodb-mssql.inc.php on line 542

どうも、モジュールが有効になっていないみたい。

で、phpinfo を確認してみることにする

新規ユニットを作成し、下記のコードをペーストし、実行する

  <?php phpinfo(); ?>

phpinfoをみると、ピンポン! mssqlのセクションが無いことがわかった

SQL Serverのモジュールを有効にしてやればいいのか

php.iniはどこかな

phpinfoでは下記になっているが、php.iniが見当たらない

 C:\Users\2198\AppData\Roaming\Embarcadero\RadPHP\3.0\php\php.ini

どうなってんの?

まあいいや。 つくろう。

php.ini.template
php.ini-recommended
php.ini-dist

なんか、それっぽいファイルが3個ある

php.ini を php.ini.template から作成

php.ini と php.ini.template の

 ;extension=php_mssql.dll のコメントは削除(先頭の;を削除して有効にする)

?

?

◆テスト4 php_mssql.dllを有効にして再テスト

 結果: OK しかし、文字化け

php_mssql.dllを有効にして再テストしてみた。 ようやくグリッドにデータが表示された。

しかし、カラム、データの漢字部分が文字化けしてる。

 

?

◆テスト5 文字化けの状況を調査

開発用PCにはPHPの環境が2つある

 ・開発用PCにインストールした単体PHP
 ・RadPHPのPHP

どちらのPHPも文字化けが発生するか、テスト用のPHPソースで確認してみた

<テスト用ソース>

 testdb データベースに接続し、namelistテーブルの内容を表示する
 ”名前”と”tel”の列があり、”名前”列のデータは漢字を使っている

<?php
$server = 'ibmsvr01\mdb01';
$userid = 'user';
$passwd = 'user';
$dbName = 'testdb';
$query = "select * from namelist";

$db = mssql_connect($server, $userid, $passwd);
mssql_select_db
($dbName, $db);
$res = mssql_query($query, $db);

while($row = mssql_fetch_array($res)){
? echo $row["名前"]. "," . $row["tel"] . "<br>\n";
}

mssql_free_result($res);
mssql_close();

?>

結果: RadPHPのPHPのみ、漢字が表示されない
     開発用PCのPHPは問題なく表示できた

  ということは、RadPHPのPHPの環境は、漢字表示に問題があることがわかった。

  最新の製品とだというのに、ちょっと残念。

 ※追加:データベース名、テーブル名、列名、データに漢字を使った本番DBでテストしたところ
  単体PHPは問題なく表示出来た。
?

◆ここまでのまとめ

RadPHPでSQL Sererを使うためには、RadPHPをインストールしただけでは簡単には使えない。

また、情報も少ない為、問題が起こった時は手に負えない。

SQL Server接続のWebアプリ用に、「RadPHP」の購入を考えていたが、見送りかな?

Webアプリ用にLotus Notes(RadPHPより安い:2万円)を使っているが、SQL Server接続するには問題があり、
テーブルの更新をLotus Notes専用にする必要がある。

高価なパッケージをつかえば、自由に更新出来るようだが、そんな余裕はないので、RadPHPに期待していた次第。

◆テスト6 EDNで提供してもらった手順でテスト

結果: テーブル名を英数字にすれば、列名、データの漢字が文字化けせず表示出来るようになった
    しかし、dbtables.inc.php なんか修正しちゃって後で問題がでないかちょっこし心配。

手順の内容:Shift_JIS で統一することで(+RCPLの一部修正)、DBGrid/QDBGridで日本語データを表示する

1. \Embarcadero\RadPHP\3.0\php\php.ini.template の php_mssql.dll のロードを有効にする
2. PHP が ntwdblib.dll を読み込めるように、PATHの通った場所にコピーする
3. RadPHPを再起動する
4. [ツール]-[オプション]-[エディタ設定]-[新規ファイルのデフォルト設定]-[文字のエンコーディング]を ANSI に設定
5. [ツール]-[オプション]-[PHP]の各種設定をSJISに設定する

Default Charset: shift_jis
HTTP Output: SJIS
Internal Encoding: SJIS

6. \Embarcadero\RadPHP\3.0\rpcl\dbtables.inc.php をメモ帳で開いて58行目のコードを

--------------------------------------------------------------------------------
reset($fd);

--------------------------------------------------------------------------------
から

--------------------------------------------------------------------------------
if(!is_array($fd))
return($result);
reset($fd);

--------------------------------------------------------------------------------
に変更して、保存する

7. 新規にRCPLアプリケーションを作成して、特定のフォルダにプロジェクトを保存する
8. データエクスプローラからフォームにテーブルをドラッグ&ドロップする
9. アプリケーションを実行し、DBGridに日本語のカラムやデータが表示される
10. DBGridを削除し、QDBGridに切り替えても正しく表示される

?

◆テスト7 データベース名に漢字を含むデータベースで再テスト

テスト用のDB作成(本番データは載せられないので...)

結果 : OK

みごとに漢字が表示されました。これで、RadPHPでSQL Serverに接続しても、文字化け問題は回避できそうです。
早速、RadPHPと「Delphi for PHPではじめるPHPビジュアルWeb開発」 2,625円を買いたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です