カテゴリー「データベース」の9件の記事

2014-02-18

【Firebird】 Unsupported on-disk structure for file xxx.fdb; found 32779, support @4?.@5?.

仕事で請求書を作るのに利用しているソフトが、起動時にエラーを吐いた。

"Unsupported on-disk structure for file xxxxxxxx.fdb; found 32779, support @4?.@5?."

というエラー…。OSはWindows 8.1 64bit

確か、InterbaseでFirebirdと同じポートを開けちゃった時に同じようなエラーを見た覚えがあった。
今回はInterbaseはインストールしていないが、同じようなことが起こっているんじゃないかと、ざっと辺りを見渡してみたのだが全然わからん。

先々週までは正常に動いてたんだけど…。

とにかく、Windowsを再起動してみた。


ちゃんと動いた。


Firebirdのデータとサーバーのバージョンが違うとかでも似たようなエラーを吐くというような記事をみ掛けたような気がするが、その場合、メッセージの最後のsupportの後がちゃんとした数字になっているみたいだ。
変なメッセージだったら、サーバーが正常に動いていないことを疑え。
って言っても、どうなんだろう。isqlでアクセスしたらちゃんとアクセスできちゃったんだよな。
詳しくないから知らないけど、IPアドレスを指定しないでデータベースファイルを指定すると、ローカルでサーバーを経由しないのかな?

なんだか、よくわかんないけど、とにかくサーバーがちゃんとしてない可能性も考えた方がいいな。

Win8だから、インストールされてるプログラムを探すのが面倒で…。っていうのは言い訳で、C++ Builder XE4をインストールした時に一緒にInterBaseをインストールしたみたいだ。外したと思ったんだけどRAD Studio 2010を入れた時はInterBaseをインストールしなかったことは覚えているんだけど。

とにかく、冷静になって探してみたらInterBaseが動いていたので、手動起動に切替えて、停止しておいたら問題なくなった。


| | コメント (0)

2013-07-09

データベースで検索に失敗する

IDが001000番があったとする。

where id like '%1%'

で結果レコードが0件になった。

where id like '%0%'

where id like '%10%'

なら、正常に結果を得られた。

ちなみに、dBASEテーブル。

文字コードって事も無さそうだしなんだろか?
と思いテーブルを再構築してみたら検索できるようになった。

散々、悩んだ。


| | コメント (0) | トラックバック (0)

2013-07-03

Firebird unsupported on-disk structure

firebirdデータに急にアクセスできなくなった。

なんで、急にアクセスできなくなったのかはわからないのですが、というかRAD STUDIO 2010からXE4にバージョンアップした時に、一緒にinterbase XE3をインストールしていて、interbaseが稼働していたのが原因だったのですが。

それまでどうして正常に使えていたのか。その方が不思議です。

まぁ、サービスがfirebirdの方が先にポートを掴んで、interbaseのサービスが起動していなかったとか、そういう事なのではないかと。

interbaseのサービスを停めたら正常にアクセスできるようになりましたので、interbaseをアンインストールしました。

元はといえば、XE4でIBXがなかったので、「もしかしてinterbaseをインストールしないとIBXが入ってこないとか?」と思い、インストールしてみたんですね。結局ダメで、後から追加パッケージがダウンロードできるようになっている事に気が付いたのですが。

ヤレヤレ肝冷やしました。

| | コメント (0) | トラックバック (0)

2012-01-25

dbExpressでMySQLに接続 RAD Studio 2010

今回、サーバはLinuxサーバなので、MySQLのインストールはしないので、mysql-noinstall-5.1.61-win32.zipをダウンロードしてlibmySQL.dllをパスの通ったディレクトリにコピー

どうも、5.0系では動かないっぽいので、5.1系を使わないとならないっぽい。

TSQLConnectionのDriverにMySQLを選択する。多分これだけで、ほとんどの設定を自動に選択してくれる。

Paramsパラメータにデータベース固有の情報を書く

  • HostName
    データベースサーバ
  • Database
    データベース名
  • User_Name
    ユーザー名
  • Password
    パスワード
  • ServerCharSet
    サーバーのデータの文字コード (sjis, ujis, utf8とか?)

これで、接続できるんじゃないのかな?

SET NAMES とかやっても、文字化けしちゃうからちょっと焦った。

| | コメント (0) | トラックバック (0)

2011-10-06

Firebirdでテーブル一覧を得る

テーブル一覧を得る

SELECT RDB$RELATION_NAME AS TABLE_NAME
FROM RDB$RELATIONS
WHERE RDB$VIEW_SOURCE IS NULL AND RDB$SYSTEM_FLAG = 0
ORDER BY RDB$RELATION_NAME ASC

以上で、テーブルのみの一覧が取得できる。

ビュー一覧を得る

SELECT RDB$RELATION_NAME AS TABLE_NAME
FROM RDB$RELATIONS
WHERE RDB$VIEW_SOURCE IS NOT NULL AND RDB$SYSTEM_FLAG = 0
ORDER BY RDB$RELATION_NAME ASC

とするとビューのみの一覧が得られる

テーブルとビューの一覧を一度に得る

SELECT RDB$RELATION_NAME AS TABLE_NAME
FROM RDB$RELATIONS
WHERE RDB$SYSTEM_FLAG = 0
ORDER BY RDB$RELATION_NAME ASC

とすれば、テーブルとビューの両方が取得できます。

シーケンス、ジェネレーターの一覧も得る

SELECT RDB$GENERATOR_NAME AS GENERATOR_NAME
FROM RDB$GENERATORS
WHERE RDB$SYSTEM_FLAG = 0
ORDER BY RDB$GENERATOR_NAME ASC

isqlで'SHOW SYSTEM TABLE'を実行するとシステム系テーブル名の一覧が得られます。
'SHOW TABLE RDB$TRIGGERS'のように目的のテーブルのフィールド一覧を見てみると、 他の情報も得ることができます。



| | コメント (0) | トラックバック (0)

2010-06-02

FirebirdをWindows 7にインストール

Windows 7にFirebirdをインストールした。

VISTA以降のWindowsでは、リモート接続しなければならないようだ。

データベースがc:\users\public\db\sample.gdbなら'localhost:c:\users\public\db\sample.gdb'とすると作成/接続できた。

Firebirdのダウンロード

| | コメント (0) | トラックバック (0)

2010-05-04

SELECT時に連番を付ける

SELECT (SELECT COUNT(T2.ID) + 1 FROM TEST AS T2 WHERE T2.ID < T1.ID) AS NUM, T1.ID, T1.NAME FROM TEST AS T1 ORDER BY T1.ID

で、NUMとして連番がつく。

IDの降順に対して昇順の連番をつけるには、

SELECT (SELECT COUNT(T2.ID) + 1 FROM TEST AS T2 WHERE T1.ID < T2.ID) AS NUM, T1.ID, T1.NAME FROM TEST AS T1 ORDER BY T1.ID DESC
のように、第1フィールドのSELECTの条件を逆にして、全体のORDER BYにDESCを付けてやる。

CGIなどで、ページ当たりn行を出力するためには、これをVIEWなどにしておくと、レコード削除などで、IDが連番になっておらず、虫食い状態になっていても、取得することができる。

Firebirdならこんな感じだと思う。

SELECT FIRST 20 NUM, ID, NAME FROM VIEW1 WHERE NUM > 20 * 2 ORDER BY ID;
1ページ当たり20行で1ページ目をページ数0とした時の3ページ目の分のレコードを抽出する。 NUMが41から60までのレコードとなる。

ただ、条件を設定した時には、NUMも虫食いになってしまうので使えない。



| | コメント (0) | トラックバック (0)

FirebirdでLIMIT

 MySQLのLIMITのように、特定の行数分を取得する

SELECT FIRST 20 * FROM TBL ORDER BY ID;

のようにする事で、テーブルTBLのすべてのフィールドをIDの昇順に先頭から20行分を取得する事ができる。

SELECT FIRST 20 SKIP 10 * FROM TBL ORDER BY ID;

とSKIPを利用すると、先頭から10行分飛ばして20行を取得する。

これは、2.0以降のバージョンでは非推奨となっている。

2.0以降では、ROWSを使う。

SELECT * FROM TBL ORDER BY ID ROWS 20;

で先頭から20行を取得する。

SELECT * FROM TBL ORDER BY ID ROWS 10 TO 30;

とすると10行目から30行目までを取得する。
つまり、先頭から10行分飛ばして、20行分を取得する。先頭から9行分飛ばして、21行分を取得する。

参考文献
Firebird 徹底入門
Firebird日本ユーザー会 木村明治・はやしつとむ・坂井恵
翔泳社
第4章 (4.5.1) P122-P129

| | コメント (2) | トラックバック (0)

2008-04-29

BDEからの移行

dBASEのアプリケーションの移行で悩み中。
BDEは、なんだか、とうとう、ついに先がなさそうなので、
別の物に移行しなければならなそうです。

マイクロソフトのdBASEドライバとODBCって言うんでしょうか。
それを、ADOでアクセスってのは、どうかと思って試行錯誤中。

テーブルオープン時に、NULLをString型に変換できないという、
バリアント型のキャスト例外(EVariantTypeCastError)が発生する。

少し前までは、sqlite3にデータベースを変更してしまおうかとも思っていたんですが、
なんとかこのまま行ければ、楽だなぁなんて思ってしまった訳です。

一応、1,000以上のユーザーがあるので、ライセンス料が掛かると、
なにかと面倒なんですよね。
更に、サーバーとなると管理諸々のサポートも . . . 。

| | コメント (0) | トラックバック (0)