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


かず  2011-06-30 13:14:10  No: 40719  IP: 192.*.*.*

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

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

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

編集 削除
HOta  2011-06-30 15:38:56  No: 40720  IP: 192.*.*.*

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

編集 削除
かず  2011-06-30 16:00:39  No: 40721  IP: 192.*.*.*

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

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

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

いまさらParadoxですが。

編集 削除
シャカトウ  2011-06-30 16:27:49  No: 40722  IP: 192.*.*.*

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

編集 削除
かず  2011-06-30 20:24:06  No: 40723  IP: 192.*.*.*

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

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

編集 削除
DEKO  2011-07-01 03:13:24  No: 40724  IP: 192.*.*.*

> 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 11:58:07  No: 40725  IP: 192.*.*.*

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

編集 削除
かず  2011-07-02 22:20:09  No: 40726  IP: 192.*.*.*

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

編集 削除
igy  2011-07-02 23:21:06  No: 40727  IP: 192.*.*.*

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

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

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

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

あたりでしょうか?

編集 削除
かず  2011-07-05 18:26:57  No: 40728  IP: 192.*.*.*

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

編集 削除