0

フォームにテキストボックスとグリッドがあります。

機能: Emp ID (1、2、3 など) をテキスト ボックスに入力すると、その Emp ID に対応する Emp Name がデータベースからグリッドに入力されます。別の Emp ID を再度入力すると、別の Emp 名が次の行のグリッドに埋め込まれます...何度でも必要なだけです。このようにして、従業員名がグリッドの次の行に続く必要があります。

私はできる限り私の質問を説明したと思います。

私のアプローチ

これには、TTable、TDatasource、および TDBGrid を使用しています。テキスト ボックスに Emp ID を入力して Enter キーを押すと、データベースで Emp Name を確認し、その名前を TTable に追加します。次に、この TTable を TDatasource に割り当て、最後に TDatasource を TDBGrid に割り当てます。以下は、このためのコードです

Table1.Close;

//Create table for the first time

if not Table1.Exists  then
begin
      Table1.Close;

      Table1.DatabaseName    := 'databaseName';
      Table1.TableType           := ttParadox;
      Table1.TableName          := 'MyTable';
      Table1.FieldDefs.Clear;
      Table1.FieldDefs.Add('EmpName',ftString,40);
      Table1.CreateTable;

      Table1.Open;
end;

   Table1.Open;
   Table1.Append;
   Table1.FieldByName('EmpName').AsString := EmpName; //EmpName is fetched from database
   Table1.Post;
//Now assign this table to datasource
       DataSource1.DataSet := Table1;
//Now assign this datasource to dbgrid
       DBGrid1.DataSource := DataSource1;

私の問題:私の問題は、グリッドに表示されるレコードが異常に動作していることです。レコードは適切な順序で表示されず、互いに混在しています。グリッド内のデータ行が、以前に追加した順序で表示されないことを意味します。何が問題になる可能性があります。毎回バインドする前に、データソースまたは dbgrid を更新する必要がありますか。これを手伝ってください。

4

1 に答える 1

0

レコードの順序を定義するには、インデックス/主キーを使用する必要があります。以下のコードのように追加します。

Table1.FieldDefs.Add('EmpId', ftAutoInc, 0, True);
Table1.FieldDefs.Add('EmpName', ftString, 40);
Table1.IndexDefs.Add('idxEmpId','EmpId',[ixPrimary]);
Table1.CreateTable;
Table1.Open;

必要な列のみを表示する DBGrid.Columns プロパティを定義することで、EmpId をグリッドで表示しないようにできます。

于 2015-05-18T04:57:07.057 に答える