Ubuntu(FireDAC)を使ってMS SQL Server(RDS)に接続する。[JAPAN]

Posted by on in Programming

毛利です。

 

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 



 



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

Check out more tips and tricks in this development video: