3

bdeエンジンを必要としないという利点を持つtdatasetに基づくtdbfを使用するdelphiアプリケーションがあります。テーブルを並べ替える必要がありました。これは、indexdefを追加してから、indexfieldnamesを指定することにより、単一のフィールドで行いました。

私は今、2つのフィールド、つまり男性をグループ化し、次に女性をグループ化してから、各グループの給与を並べ替えて、同じように最低所得者から最高所得者の順に女性が表示されるようにしようとしています。

indexdefのsortfieldを「gender+salary」として指定するだけであると述べているすべての資料を読みました。インデックスを使用しようとすると、「+」は有効なフィールド名ではないと言われます。'。'からすべてのデリメータを試しました。'、'。'&' と ';'。すべての区切り文字は、存在しないフィールドとして取得されます。複数のフィールドでテーブルを並べ替える正しい方法は何ですか?

よろしくお願いしますクリントン英国人

4

2 に答える 2

4

xBASE(dBASEとその派生物)では、インデックス内のフィールドがすべて同じデータ型(通常は文字列)に変換される必要があります。これを行うには、通常、いくつかの一般的な機能が必要です。

  • DTOS()-xBASEの日付をCCYYMMDD文字列としての形式に変換します
  • STR()-数値を文字列に変換します。オプションの幅指定子(デフォルトは10)と、小数点の右側の桁数を使用します。具体的には、構文はとして指定されSTR(<numeric> [, <width> [, <decimaldigits>] ])ます。
  • SUBSTR()-指定された開始位置と文字数を使用して、文字列の一部を別の文字列から抽出します
  • IIF()-論理を変換するために使用される即時IF(例:IIF(Married = .T., 'Y', 'N')

インデックス式は実際に演算子と組み合わされてい+ます。表示されるエラーは、一般的なデータ型に変換されていないことが原因である可能性があります。

Gender列(おそらくとして定義されているCHAR 1Salaryと列(おそらく何らかのサイズ)を指定したのでNUMERIC、次のようなものを使用できます。

Dbf1.AddIndex('GENDER_SAL', 'GENDER + STR(SALARY, 10, 0)', []);

これにより、、、、のような式にインデックスが作成されます。ここでF 10000F 200000デフォルトの幅である10文字(左にスペースが埋め込まれています)に変換され、小数点以下の桁はありません。これはあなたのために働くはずです。M 12000SALARY

于 2013-01-16T01:44:15.937 に答える
1

このコンポーネントは使用していませんが、dBaseIIIで使用していたものと同様のインデックス式を使用したいと考えているようです。ドキュメントのPDFバージョンの7ページで、式のトピックの下に例が示されています。

Dbf1. AddIndex('INDEX1 ', 'DTOS( DATEFIELD)+ SUBSTR ( LONGFIELD ,1 ,10)+ SUBSTR
( LONGFIELD2 ,1 ,20)', []);

文字列全体を含むパラメータを使用してフィールドでSubStr関数を試して、少なくとも結果が得られるかどうかを確認できます。

于 2013-01-15T23:01:09.120 に答える