質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Firebird

Firebirdは、オープンソースのリレーショナルデータベース管理システムです。オープンソースとしてBorland社が公開したInterBaseから派生したもので、MGAによる高度なトランザクション管理機能を持ちます。

Q&A

解決済

1回答

1047閲覧

FireBirdのユーザ定義関数を読み込めない

NobuoWatanabe

総合スコア8

Firebird

Firebirdは、オープンソースのリレーショナルデータベース管理システムです。オープンソースとしてBorland社が公開したInterBaseから派生したもので、MGAによる高度なトランザクション管理機能を持ちます。

0グッド

0クリップ

投稿2017/07/13 10:01

###前提・実現したいこと
FireBird2.1からwindows10にインストールしたFireBird2.5(32bit)へ移行しようとしています。
2.1で使っていた自作のdllを2.5でも使いたいのです。

###発生している問題・エラーメッセージ

2.1で使っていた自作のDLLはUDFフォルダに入れてありました。
ですが、2.5ではUDFフォルダにそのDLLを置いても、その関数を認識してくれません。

データベースファイルはそのままコピーしただけなので
関数の定義自体もそのままあります。

isqlで、
show function ncommatexti;
とすると、

Function NCOMMATEXTI:
Function library is nFB1.dll
Entry point is nCommaTextI
Returns BY VALUE INTEGER
Argument 1: CSTRING(5000) CHARACTER SET SJIS_0208
Argument 2: INTEGER
Argument 3: INTEGER

つまり、
nFB1.dllファイルにありますよという、返事をくれます。

しかし、実際に使おうとすると、
(使用例のSQL)
select ncommatexti('1,2,3',1,2) from rdb$database;

このようなエラーが返ってきます。
Statement failed, SQLSTATE = 39000
invalid request BLR at offset 36
-function NCOMMATEXTI is not defined
-module name or entrypoint could not be found

UDFに置いただけでは駄目なのでしょうか?

###試したこと
UDFフォルダへのアクセス権限をEveryOneにフルコントロールなど与えてみましたが、影響がないようです。

何かご存じの方いらっしゃいましたらお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました。
単にUDFフォルダに入れただけでなく再起動が必要でした・・・・。
お恥ずかしい。

ただ、問題はそれだけではなく、DLLの作り方にも問題がありました。
リンク内容
に、書き間違えがあり、functionの呼び出し規約をstdcallとしているのですが、これは正しくはcdeclなのです。
こちらの記事は正しいようです。リンク内容

なぜ、2.1ではstdcallでも動いていたのが、2.5では駄目になったのかは分からないんですが。
ま、解決したので、よしとします。

ありがとうございました。

投稿2017/07/14 09:04

NobuoWatanabe

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問