Firebirdのテーブル・カラムに日本語が使えない難と、SQLSERVER LocalDBの発見!

インストール不要のDBサーバーを試してみました。

SQLite

DLLを置けば、使えますね。

新しいDelphiだとFireDACで、SQLiteに接続ができるようですが、
手持ちの最新は、XE5。

オープンソースのコンポーネントを使って、
試してみましたが、inner join 程度のレベルなんですが、
いいコンポーネントがなかったというのが、

MS ACCESS

ADOで接続できるので、期待したのですが、
テーブル同士の結合がとても面倒だったので、断念。

 

で、今回の本命

Firebird

Delphiの初期の頃に付属していたInterbaseから派生した
オープンソースのRDBS「Firebird」ですが、

もともとDelphiと親和性が高いため、コンポーネントも標準でついており、
期待感はとても高かったのですが、

Firebird 日本語 カラム名

日本語カラム(テーブル名も)が指定できません・・・

そういえば、昔Interbaseを使っていたときは、
アルファベットでテーブルを作っていたな。。。

当時は、マルチバイトの対応がまだまだだったので、
そんなもんだと、諦めていましたが、
今では、ほとんどのRDBSで、日本語テーブル・カラムが使えるのに・・・

まさか、新しいFirebirdで日本語が使えないとは、とても思いませんでした!

でも、多くのDBエンジニアは、英語名でカラムを作ってるんですね。

https://thinkit.co.jp/free/tech/31/3

その比率も、

オラクル関連とマイクロソフト関連の両方のカンファレンスで講演する機会があったのですが、Oracle技術者主体だと9対1で日本語を利用しない方が圧倒的に多かったのですが、SQL Server技術者主体だと5対5といった結果でした。

私は、英語だと、列名が長くなりすぎるので、絶対に日本語派!

 

最後に、Firebird Embedded Serverを使うため調査履歴


ということで、
たかだかこの程度のことに、使いたくはなかったのですが、
親に使っていたSQLSERVER Expressを各クライアントにインストール・・・

と思ったところ、

SQLSERVER エディション

サービスとしてではなくアプリケーションのプロセス内で実行される SQL Server Express の軽量展開オプションである SQL Server Express LocalDB を使って、小規模なデータベースを基本的なデスクトップ アプリケーションやデスクトップ ツールに構築することができます。

https://www.microsoft.com/ja-jp/sql-server/sql-server-editions-express

 

ということで、

SQL SERVER EXPRESS Local DB!!!

https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/sql-server-2016-express-localdb?view=sql-server-2017

※英語のみ

Install LocalDB through the installation wizard or by using the SqlLocalDB.msi program. LocalDB is an option when installing SQL Server 2016 Express.

最新のSQLSERVER Expressは、2017ですが、リンク先は、2016。
オプションとしてLocalDBがあるようですが、
たどっていくと、2017をインストールするしかないようです。

まあ、とりあえず、SQLSERVER Express 2017をダウンロードして、実行。

「メディアのダウンロード」を押すと、「LocalDB」がありました!

参考 >> https://www.ipentec.com/document/sql-server-2017-express-local-db-install

※このLocalDBの機能は、もっと古いエディション2012から、既にあったんですね!知りませんでした!

インスタンスの作成と起動

sqllocaldb.exeを使って、インスタンスを作り、
インスタンスを指定して、起動するわけですね。

sqlserver express localdb インスタンス作成

※黒塗りのところが、「データベース名」となります。

SQLServer Expressとの違いは、サービスとしてではなく、
アプリケーションとして、起動させること。

スタートアップから、起動させる感じで。

参考 >> https://www.jetbrains.com/help/datagrip/connecting-to-sql-server-express-localdb.html

 

SQLSERVER Manage Studioに接続

参考 > https://blog.engineer-memo.com/2012/12/16/sql-server-localdb-にデータベースを接続/

SQLSERVER Management Studio に接続

上記で、作成したインスタンスを指定で、Windows認証で接続します。

(localdb)¥インスタンス名

で、SQLSERVER Expressでバックアップしたものを、
localDBに復元させたのですが、いとも簡単に・・・

 

SQLCMDで接続

など、SSMSは軽量版がほしいほど、非常に巨大な容量のアプリなので、
データバースの登録程度で、インストールするには、
億劫なので、CLIを使います。

 

上記の「sqllocaldb info {instance}」で取得した、
パイプ付きのアドレスを用いて、接続します。

sqllocaldb -S np:\\.\pipe\LOCALDB#123BAA99\tsql\query

ログイン後、

craete databaase {database}

で、作れると思いきや、エラーです・・・

sqlcmd create databaase error

ファイルのアクセス権がないとされるが、
エラーの3行目(全体で5行目)に、

‘c:\users\◯◯山01test.mdf’

という表記があるが「¥」が足りないのが、原因だと思われるが、
同しようもないので、別の方法。

※開発用のPCには、当然巨大なSSMSが入っているので、
そこで作成したDBを認識させたかっただけで、
空のデータベースを作ってから、ファイルを上書きすればいいや。
と思っていたのですが、、、、

ということで、正当に「アタッチ」して、認識させました。

createa database test on
(filename = ‘c:\users\{username}\test.mdf’),
(filename = ‘c:\users\{username}\test_log.ldf’)
for attach

参考 >> https://docs.microsoft.com/ja-jp/sql/relational-databases/databases/move-a-database-using-detach-and-attach-transact-sql?view=sql-server-ver15

 

Delphiからの接続

FireDACなど最新品を持ち合わせていないので、TADOConecctionで接続します。

Delphi TAdoConecttion SQLServer LocalDB

いつもは、「Microsoft OLE DB Provider for SQL Server」でつないでいましたが、
今回は、「SQL Server Native Client 11.0」を指定します。

理由は、ここにそう書いてあったのでw

http://linyi-zatta.blogspot.com/2013/02/localdb.html

はい、続いて、SSMSと同様に。

Delphi TAdoConecttion SQLServer LocalDB

以上です。

コンパイルして、実行してみると、変更するコード・SQLは一切なく、
スタンドアローンで、動いてくれるように!

 

あとは、集計時に、AWS RDSに吸い上げるロジックを作れば、完成ですが、
SQLをまったく変更する必要がなかったことで、
ずいぶん時間を節約することが出来ました!

 

ほんと、ExpressやSSMS、無料で商用に使わせてもらえる
SQLSERVER様 素晴らしい限りですね!

経緯

SQLServerを入れた親にも、忙しいときには、
作業が出来るように、アプリを入れているんですが、
不具合が起きると、他の正常なPCで作業ができなくなるため、
再起動出来ないという、罠にハマってしまい、

この対策のために、対策することになりました。

AWS RDSにSQLSERVER Expressがあり、
これを親として使おうと思ったわけですが、

インターネットに接続必須というが出来てしまい、

接続時にちょっと時間がかかる程度で、
データの読み込みは、クラウドであるとはわからないほどの、
使用感なのですが、インターネットが切れると動かないという状況を
考慮すると、やっぱり各クライアントにDBシステムが必要だなと、
ということで、軽いDBを探しました。

 

Firebirdのテーブル・カラムに日本語が使えない難と、SQLSERVER LocalDBの発見!