AWS AuroraにFireDAC接続[JAPAN]

Posted by on in Programming

毛利です。

 

AWS AuroraはMySQL 互換のクラウド(RDS)データベースです。

MySQL互換と言う事なので FireDAC接続を試してみました。


 

[Aurora DBインスタンス起動]

いくつかのDBプロダクトが出てきます

Amazon Auroraを選択します。

DB インスタンスのクラスや、インスタンス名、DB名、パスワードなどを設定し起動します。

 

インスタンスの詳細を見ると

クラスターエンドポイントが表示されています。このエンドポイントをTFDConnectionの接続先で使います。


[FireDAC接続]

Amazon Auroraのインスタンス作成で表示されたクラスターエンドポイントを使います。

TFDConnectionでAuroraへの接続設定を行います。

Database名、User_Name、Password、ServerをRDS Auroraのインスタンス作成時に設定した文字列を使います

 

DriverID=MySQL

TButton 3つ、TPanel, TDBGrid, TFDPhysMySQLDriverLink. TFDConnection, TFDQuery, TDataSourceを配置しデザイン。

 


[TFDPhysMySQLDriverLink設定]

フォームのOnCreateで下記コードを追加

//////
void __fastcall TForm1::FormCreate(TObject *Sender)
{
	FDPhysMySQLDriverLink1->VendorHome	= L"C:¥¥projects¥¥mysql_driver¥¥mysql-connector-c-6.1.6-winx64";
	FDPhysMySQLDriverLink1->VendorLib   = L"libmysql.dll";
}

 


[TFDConnection接続]

aurora connectボタン」クリック時にTFDConnection からAuroraに接続

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	FDConnection1->Connected = true;
	FDQuery1->SQL->Text = "use embarcadero";
	FDQuery1->ExecSQL();
	ShowMessage("FDConnection1->Connected = true");
}

 

 


[Aurora embarcaderoデータベース上にテーブルを新規作成とインサート]

Create Tableボタン」のクリックイベントで

red_listと言う名称のテーブルを作成し、7行データをインサートしています。

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
	std::vector<std::tuple<int, std::wstring, std::wstring> > _list{
		std::make_tuple(1, L"オキナワオオコウモリ",L"Pteropus loochoensis"),
		std::make_tuple(2, L"ミヤココキクガシラコウモリ",L"Rhinolophus pumilus miyakonis"),
		std::make_tuple(3, L"オガサワラアブラコウモリ",L"Pipistrellus sturdeei"),
		std::make_tuple(4, L"エゾオオカミ",L"Canis lupus hattai"),
		std::make_tuple(5, L"ニホンオオカミ",L"Canis lupus hodophilax"),
		std::make_tuple(6, L"ニホンカワウソ(本州以南亜種)",L"Lutra lutra nippon"),
		std::make_tuple(7, L"ニホンカワウソ(北海道亜種)",L"Lutra lutra whiteleyi")
	};
	UnicodeString _s = L"create table red_list("
		L"num_ int not null, japanese_ varchar(20), english_ varchar(20), primary key (num_))";
	FDQuery1->SQL->Text = _s;
	try
	{
		FDQuery1->ExecSQL();
		for (auto _line: _list)
		{
			try
			{
				int _inum = std::get<0>(_line);
				UnicodeString _sja = std::get<1>(_line).c_str();
				UnicodeString _sen = std::get<2>(_line).c_str();
				_s = Format(L"insert into red_list value(%d, '%s', '%s')", ARRAYOFCONST((_inum, _sja, _sen)) );
				FDQuery1->SQL->Text = _s;
				FDQuery1->ExecSQL();
			}
			catch(Exception &e1){}
		}
		FDQuery1->SQL->Text = "select * from red_list";
        FDQuery1->Active = true;
	}
	catch(Exception &e2){}
}
//---------------------------------------------------------------------------


 


[テーブル削除]

Drop Tableボタン」クリックイベントで、red_listテーブルを削除。

//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
	FDQuery1->SQL->Text = L"drop table red_list";
	FDQuery1->ExecSQL();
	ShowMessage(FDQuery1->SQL->Text + "\nSuccessfull");
}
//---------------------------------------------------------------------------


全てのSQLコマンドを試した訳ではありませんが、MySQL互換のAmazon AuroraをDireDACで利用する事ができました。


 
 



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

Comments

Check out more tips and tricks in this development video: