Openoffice BaseからFirebirdのDBに接続していて、ちょっと問題が発生しました。
Blobに格納したテキストの文字化けです。
BlobのSUB_TYPE 1、UTF8で作成したデータですが、OpenOffice上ではバケバケ、という状況。
CHAR,VARCHARは問題なく表示できていました。
一応すぐに解決したので、対策をメモ。
OpenOffice Base のメニューの、編集(E)→データベース(L)→プロパティー(A)で、追加設定のタブを選択。
データ変換/文字セット(C)を、対象DBのそれに合わせる(今回はUTF-8)。
これで出来ました。
スポンサーサイト
2014/06/09(月) 09:11:44 |
Firebird
| コメント:0
詳細は後日ちゃんと纏めようと思っておりますが、とりあえず忘れない内にメモ。
【Firebirdの設定】 "firebird.conf"で、UdfAccess(UDFのdllを置くディレクトリ)を指定する。
例)UdfAccess = H:\fb\udf
【IBPPの入手・ビルド】 下記のリンク先を参考にしました。
ソースが全然洗われない迷走ブログ / 08/07/25: Firebirdの組み込み版を使ってみた
IBPPというのは、FirebirdのC++用ドライバだそうです。
実はこれを使わなくても簡単な数値計算程度のUDFは作れて、動かせたのですが、日付型のデータの引渡し時に値を変換しなければならず、まあ今後他にも用途が出てくるだろうと思い、使用することにしました。
【VC++でDLLを作る】 Firebirdに関係ない内容が膨らんできたので、別記事を立てました。→
【VC++】DLLを作ってみた 以下、UDFに関係ありそうな部分の走り書き。
※API関数は、数値型の引数もポインタで渡すつくりにしなければいけない。
※defファイルを使うなら、VC++のプロジェクト設定をいじる必要がある。
※defファイルを使わないなら、mapにエクスポート情報を吐く設定が必要。
※mapの吐き出しが必要なら、これもVC++のプロジェクト設定をいじる必要がある。
【DLLを"UdfAccess"で指定したディレクトリに置く】 まあ、ここは問題ないでしょう。
【DBにUDFの宣言を追加】 ライブラリ名(MODULE_NAME)には、DLLのファイル名(拡張子は不要)を指定します。
ややこしいのがエントリポイント(ENTRY_POINT)の方。
DLLを作る際にdefファイルを使っていれば、そこに書いた関数名そのままです。
defファイルを使ってない場合は、mapファイルの最後、Exportsで吐き出された名前。
ソース中の関数名が "hoge" だとすると、例えば "_hoge@8" みたいな感じの名前がエントリポイントになります。
2011/10/16(日) 00:22:22 |
Firebird
| トラックバック:0
| コメント:0
Windows 7(以後Win7)へ乗り換える前はCSE(Common SQL Environment)というフリーソフトを愛用していたのですが、これがWin7では動作検証されていないそうで、どうなんだろうと気になっておりました。
CSEとは何ぞ、という方は、つみきWeb(
http://www.hi-ho.ne.jp/tsumiki/ )さんの「CSEについて」という項目を参照して下さい。
【Firebird云々の前に、そもそもCSE自体がWin7で動くのか】 試しました。
起動時に何かエラーは出るんですが、まあ動かなくはないです。
SQLエクスプローラ部分が真っ白ですが、他はまあ、今のところ不具合らしき物も見当たらず。
…ヘヴィーユーザーの方は何かお気付きかも知れませんが、私は結構これで事足りています。
【ODBCドライバのインストール】 入手元:
http://www.firebirdsql.org/index.php?op=files&id=odbc ちなみに私は Firebird_ODBC_2.0.0.148_win32 を使用しています。
OSによってどれを使うかは異なると思うので、適宜選択して下さい。
インストールは特に難しい設定など無かったと思います。
インストーラーの言うとおり、でOKでしょう。
【ODBC接続の設定】 その前に、Firebird Embedded をハードディスク上の何処かに展開しておきます。
(既に展開済みの物がある場合はそれをそのまま使ってもらって構わないと思います。)
このとき、"fbembed.dll"というファイルを、"gds32.dll"にリネームして下さい。
(リネームが必要な理由はよく分からないのですが、そうするように書かれていることが多いので…)
ここでは既に何かしらデータベースが存在する、という前提で話を進めます。
(いや、無いよという方もいらっしゃるかも知れませんが、IBExpertあたりで何か作ってみて下さい。)
Windows上のコントロールパネルから、[システムとセキュリティ]→[管理ツール]へ行くと、[データソース(ODBC)]という項目があるので、それをダブルクリックで起動して下さい。
[システムDSN]のタブ(もしかしたら[ユーザーDSN]でも良いのかも知れませんが)を選択し、[追加(D))]で新規作成画面を表示します。
ドライバの選択画面で、"Firebird/InterBase(r) driver" を選択して完了ボタンを押すと、"Firebird ODBC Setup"の画面が出ます。
ここで、設定する項目は以下の通りです。
Data Source Name[DSN] : お好きな名前で結構です。
Driver : IscDbc
Description : 任意。特に何も設定しなくても構いません。
Database : 接続したいデータベースを選択します。
Client : Firebird Embedded の"gds32.dll"を選択します。
Database Account, Password, Role : 接続先のデータベースへのログイン情報を設定します。
Character Set : SJIS_0208 を選択します。
CSEの場合は、 Character Set : SJIS_0208で文字化けせずにデータが読めました。
が、同じことをOpenOffice.org Base でやろうとすると、ここをUTF8にする必要があるみたいです。
理屈はよく分かりませんが、やってみたらそうなりました。
【CSEの設定】 CSEの実行ファイルがあるディレクトリに、"firebird.conf"を配置(コピー)します。
CSEの実行ファイルに持ってきた"firebird.conf"内の"RootDirectiry"の設定値が、"gds32.dll"のあるディレクトリを指していることを確認して下さい。(無ければ記述を追加して下さい。)
…ってな具合で、多分いけるんじゃないかな、と思います。
うまく行かなかったらごめんなさい。
テーマ:データベース - ジャンル:コンピュータ
2010/04/01(木) 18:15:52 |
Firebird
| トラックバック:0
| コメント:0
すみません、今日の記事は雑談です。
役に立つ情報は無いので、情報収集にいらした方は読み飛ばして下さい。
先日の記事でFirebirdの組み込み版とIBExpertの組み合わせについて手順をメモってみましたが、実はあの初期設定に丸一日を費やしてしまいました。
組み込み版をダウンロードして、PC上に配置して…
とりあえず何か動かしてみたいと思うのが人情ってな物なんですが、無いんですよね…、その「何か」ってやつが。
テストプログラムを作ってみるかと思っても、どの言語でやるかによって色々違ってくるし。
始める前から気が滅入るというか、先が見えない気分になってきちゃいまして。
そんなこんなでGUIツールを物色して、結局のところIBExpertに辿り着いたんですが、いざ試してみると全角文字のデータが入力できないという問題が発生。
文字コード体系の設定を変更してみると、今度は「そんな文字コード体系使えませんぜ」というエラー。
Google先生にお尋ねしても適切なトラブルシューティング情報がなかなか出てこない。
組み込み版に関しては、「いろは」から教えてくれる資料が見つからないんです。
ちょっと躓くともう、足止めどころかリタイアに追い込まれそうな空気。
動かせてしまえば「へえ、こんな感じなんだ」と実感できて、しかもなかなか軽快で良い感じなのです。
それだけに、最初のハードルの高さが惜しい…と思ってしまう私は、やっぱり技術レベルがだいぶ落ちてしまってるのかもなぁ…と思う今日この頃です。
そんなこんなで、せっかく覚えた段取りをまた忘れちゃったら勿体無いし、何処かで誰かの役に立ってくれると嬉しいなと思って、「とりあえず、こうやったら動く(かもよ)」程度の内容ですが、ブログにも書かせていただきました。
テーマ:ひとりごとのようなもの - ジャンル:日記
2010/03/29(月) 15:00:38 |
Firebird
| トラックバック:0
| コメント:0
IBExpertを使ってみよう。
…と、思ってまず最初に躓いたのが、私の場合は「日本語を扱う環境」でした。
画面のメッセージが全部英語表記だったり、日本語の文字列データを入れようとしたら文字化けしたりエラーになったり。
ここでは、とりあえずその問題をクリアできるかも知れない手順についてお話ししたいと思います。
【環境】
まずは、私の手元の環境を明記しておいた方がいいかも知れません。
OS : Windows7(32bit)
Firebird : Embedded 2.1.3
入手元 :
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_download_21 IBExpert : Personal Edition (Ver. 2010.03.23)
【手順】
1) IBExpertをダウンロードして、インストール Personal版は無償らしいですが、初回ダウンロードの際にユーザー登録が必要です。
http://ibexpert.net/ibe/index.php?n=Main.DownloadFree 2) Firebird Embeddedのファイル一式を、ハードディスク上の何処かに展開する。 展開したファイルの中に、fbembed.dllというファイルがあるので、そのファイル名をgds32.dllに変更して下さい。
以降の手順には二つのパターンがあります。<パターン①><パターン②>のいずれかを実施します。
何処に展開するかですが、
<パターン①> 一時的な置き場なので何処でもいいです。 最終的に{IBExpertのインストールパス}へ移動するので、いきなりそこに展開しちゃっても構わないと思いますが何となくコワイので。 <パターン②> ここがFirebird Embedded のインストールパスになりますので、適宜お好みの場所へ移動して下さい。
<パターン①>
IBExpertのインストール先フォルダ(例:C:\Program Files\HK-Software\IBExpert)に、Firebird Embeddedのファイル一式を移動する。
この時点で既にIBExpertが起動中の場合は一度終了させて、起動し直して下さい。
※この手順は↓のリンク先のQAを参考に試しました。
http://groups.yahoo.co.jp/group/Firebird-jp-general/messages/3335?viscount=14&expand=1 <パターン②>
"firebird.conf"を開き、Firebird Embeddedのパス指定を追加して保存する。( 例:RootDirectory = H:\fb )
IBExpertのインストール先フォルダ(例:C:\Program Files\HK-Software\IBExpert)に、Firebird Embeddedの"firebird.conf"をコピーする。
使うアプリ毎にFirebird一式をコピーするのが何だかなぁ…という場合は、設定ファイルだけ配置するという手もあるようです。
試したところ、これでも大丈夫みたいです。
ちなみに、OpenOffice.org Base からODBC接続する際も同じ方法でいけました。
3) IBExpertのメニューを日本語に設定 これは、お好みで。UIは英語でもOKだという方は飛ばしちゃって下さい。
メニューの[Options]から[Environment Options]へ。
そこでLanguageが選べるので、私は日本語(Japanese)を選択しています。
4) IBExpert上でDBを新規作成してみる メニューの[データベース(D)]→[データベースの作成(E)]で。
Server : Local (既定値はRemoteのようです。)
Database : フルパスで入力
Client Library File : {Firebird Embeddedのインストールパス}\gds32.dll
gds32.dllは、手順 2)で配置したFirebirdのDLLです。
{Firebird Embeddedのインストールパスパス}の部分は、手順 2)で<パターン①>の場合は{IBExpertのインストールパス}という事になります。
私は文字コードUTF8でデータベースを作成しています。
必要に応じて、いろいろ試してみて下さい。
5) 4)で作ったDBの登録画面へ勝手に飛ぶので、その設定をいじる
これをやらなかった場合、全角文字データの入力時に文字化けしたり、エラーが出たりして使い物になりません。
ちなみに、後で変更する場合は、オブジェクトツリーの該当DBを右クリックして、「データベース登録情報」を選択すると設定画面が出ます。
・Charset : SJIS_0208
・Font Characters Set SHIFTJIS_CHARSET
あくまでも、うちのPCの環境では、という話ですので、まあ参考程度にお試し下さい。
結構やっつけで設定したので、もっと正しい手順をアドバイスしていただけるなら、大歓迎します。
テーマ:データベース - ジャンル:コンピュータ
2010/03/25(木) 18:22:30 |
Firebird
| トラックバック:0
| コメント:0