インデックスの切り替えができない


かず  2011-06-30 22:14:10  No: 40719

WinVista+Delphi2010です。
いままで何の問題もなかったTTableにIndexNameのプロパティーで切り替え動作ができなくなってしまいました。

例として顧客番号順(プライマリー)からふりがな順に切り替えるのですが、DBGridでみる限り並び変わらないという現象です。
プログラム更新中に何か触ったとしか思えないのですが、心当たりがありません。

漠然とした質問になりますが、経験された方いませんでしょうか。


HOta  2011-07-01 00:38:56  No: 40720

データーベースの名前がありませんが、何を使っているのでしょうか?
もう、TTableは過去のファイルベースデーターベースのためのもので、
SQLを使えば、問題も出ません。


かず  2011-07-01 01:00:39  No: 40721

HOtaさん
データベースを書くのを忘れました。データベースはParadoxです。
最近ではTTableを使うのはParadoxぐらいなので、つい忘れました。

過去のもの、十分承知しています。
過去資産の移行は順次進めているところです。しかしparadoxの型にうまくはまるものがなく、ソースの書きなおしにうんざりです。MySQLやInterBaseが良さそうですが、多額の経費やGPLなどの問題が発生するので移行が進みません。

費用のかからないローカルデータベースがなくなることで、アマプログラマーの多いDelphiには致命的でしょうね。

いまさらParadoxですが。


シャカトウ  2011-07-01 01:27:49  No: 40722

Paradoxテーブルのインデックスファイルそのものが壊れている
可能性があります。
以前、インデックスファイルをボタンで切り替えるプログラムを
つくったことがありますが、インデックスファイルが壊れたとき、
その切り替えができなくなりました。
このときは、インデックスファイルを再作成して解決しました。


かず  2011-07-01 05:24:06  No: 40723

シャカトウさん
1.インデックスが壊れていると、エラーメっセージが表示されますが、表示されない
2.1つ前のバージョンで実行するとちゃんと動くし、インデックスも切り替わる。もちろん同じファイルを読みにいく。
3.旧版のプロジェクトを読むと正常にコンパイルでき、動作も正常
4.今回バージョンもコンパイルエラーなし、起動も正常、インデックスを切り替えても変わらない

Delphi2010でBDEを扱っているが、今まで特に問題なかった。
長年Delphiを使っているが、今回の現象は初めてです。


DEKO  2011-07-01 12:13:24  No: 40724

> MySQLやInterBaseが良さそうですが、
> 多額の経費やGPLなどの問題が発生するので移行が進みません。
Firebird がありますよ。DBX (Ent 以上) または IBX で接続可能です。
http://www.firebirdsql.org/
http://ht-deko.minim.ne.jp/tech040.html#tech074
http://ht-deko.minim.ne.jp/tech045.html#tech091

http://edn.embarcadero.com/article/images/40857/a4.pdf
P.90 辺りから IBX + Firebird の話があります。

http://edn.embarcadero.com/jp/article/36548
Firebird は Interbase に限りなく近いので、この資料が役に立つと思います。


igy  2011-07-01 20:58:07  No: 40725

どこかで IndexFieldNames プロパティを指定しているとかは、ないですか?


かず  2011-07-03 07:20:09  No: 40726

igyさん、遅くなりました
IndexFieldNamesは起動時にプライマリーキーとして使用しています。
フリガナ順に変える場合はIndexNameで指定します。
これで一方を指定すれば、他方が消えますので問題はないと思います。
Delphi2よりこの仕様は変わっていないと思います。また他のプロジェクトで同じ手法で正常に動作しております。


igy  2011-07-03 08:21:06  No: 40727

プログラム自体に問題がないとすると、

その Paradoxテーブル と同じ構成のテーブルをテスト用に作成してみて、
それで試してみるとか・・・

データベースのシステムで新たにDBを追加する方法
https://www.petitmonte.com/bbs/answers?question_id=4803
で、かず さんが挙げている DTUTIL32.EXE で、テーブルが破損していないか
確認してみるとか・・・

別のOSで動くか確認するとか・・・

あたりでしょうか?


かず  2011-07-06 03:26:57  No: 40728

igyさん
同じデータベースを旧バージョンで試すと動くのでデータベースはもんだいないようです。
今のところ全く分からないので、旧バージョンから時間をかけて直すのかなと思っています。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加