Ubuntu(FireDAC)を使ってMS SQL Server(RDS)に接続する。[JAPAN]
毛利です。
UbuntuのFireDACからAWS(RDS)上のSQL Server Express(2016 13.00)に接続を試してみました。
[SQL Server Expressのインスタンスを作成]
AWS(RDS)からインスタンスの作成「DBインスタンス起動」します
エンジンの選択で「Microsoft SQL Server Express Edition」を選択
設定が色々出て来ます。
DB Engine="SQL Server2016", Time Zone=Tokyoに設定。
[UbuntuにMicrosoft ODBC Driver 11 for SQL Serverをインストール]
Ubuntu側にMicrosoft ODBC Driver 11 for SQL Serverをインストールします。
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/Microsoft_SQL_Server_への接続(FireDAC)
# sudo apt-get install openssl libkrb5-3 libc6 e2fsprogs sudo ln -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/libcrypto.so.10 sudo ln -s /lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/libssl.so.10 wget http://download.microsoft.com/download/B/C/D/BCDD264C-7517-4B7D-8159-C99FC5535680/RedHat6/msodbcsql-11.0.2270.0.tar.gz tar -xavf msodbcsql-11.0.2270.0.tar.gz sudo bash msodbcsql-11.0.2270.0/install.sh install --accept-license --force
[Delphi 10.2 Tokyo コンソール アプリケーション 新規作成]
メニューから[ファイル]→[新規作成]→[その他]
[Delphi プロジェクト]→[コンソール アプリケーション]を選びます。
/// uses System.SysUtils; begin try { TODO -oUser -cConsole メイン : ここにコードを記述してください } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
Delphiコードだけのシンプルなプロジェクトが作成されます。
[ターゲットプラットフォームの追加]→[64ビット Linux]を選択
Linux SDK のインストール,接続プロファイルの作成については下記のURLを参考にしてください。
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/Linux_アプリケーション開発
プロジェクトは「sql_server_connection.dpr」と言う名前で保存しました。
[データ モジュールの追加]
プロジェクトに「データ モジュール」を追加します。
メニューから[ファイル]→[新規作成]→[その他]を選択し
[Delphi ファイル]→[データ モジュール]を選んで[OK]をクリックします
空のデータモジュールが完成します。
データ モジュールにTFDConnectionを配置します。
FDConnection1でSQL Server Expressへの接続設定を行います。
# User_Name=ユーザー名 Password= Server=*.*.ap-northeast-1.rds.amazonaws.com DriverID=MSSQL
[接続テストコード]
データモジュール「Unit1.pas」
// function TDataModule1.get_sql_date: TDateTime; var query_: TFDQuery; begin query_ := TFDQuery.Create(Self); try query_.Connection := FDConnection1; query_.SQL.Text := 'select getdate() as d_'; query_.Active := True; Result := query_.FieldByName('d_').AsDateTime; finally query_.DisposeOf; end; end;
メイン側「sql_server_connection.dpr」
// uses System.SysUtils, Unit1 in 'Unit1.pas' {DataModule1: TDataModule}; var s_: String; begin try try DataModule1 := TDataModule1.Create(nil); s_ := DateTimeToStr(DataModule1.get_sql_date); Writeln(s_); finally DataModule1.DisposeOf; end; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
[結果]
データモジュール側で追加したメソッドの'select getdate() as d_' SQL通りSQL Server側のDateTimeが返りました。
[FireDAC側でライブラリが参照できない場合]
下記のようなエラーが出ます
# Project * raised exception class EMSSQLNativeException with message '[FireDAC][Phys][ODBC][unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0' : file not found'.
上記のようなメッセージが出た場合Ubuntu側でln -sでリンクを作成します
# ln -s /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.1.0 /opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0


Comments
-
Please login first in order for you to submit comments