0

SQL update ステートメントを使用して一部のフィールド データを変更したら、それが DBGrid に反映されていることを確認する必要があります。実行している正しい方法が正しいかどうかはわかりません -> IBTable.Refresh。とにかく、それは今のところ動作しますが、DBGrid の垂直スクロールバーは最初の更新試行後に下に移動します。更新してから再度更新すると、垂直スクロールバーが小さくなり、DBGrid の中央に移動します。DBGrid自体で値を変更するだけで、フィールドの値を直接更新する方法がわかりません。誰かがその方法の例を示してくれれば幸いです。

IBTable.Refresh が発行された後、DBgrid の垂直スクロールバーを一番上の位置に移動し、一番上の行を選択するにはどうすればよいですか?

EMPLOYEE データベースの例を使用して、データベース (Firebird) と Delphi をまだ学習しているため、私のコードは単純です。

procedure TForm1.Button1Click(Sender: TObject);
begin
  //open IBQuery1, SQL command is in the component itself
  IBQuery1.Open;
  Label1.Caption := 'Tokyo''s budget was $' + TCaption(IBQuery1.FieldValues['BUDGET']);
  //clear all SQL commands as it's TStrings and remembers prev. added lines
  IBUpdateSQL1.ModifySQL.Clear;
  //start building the SQL update statement
  IBUpdateSQL1.ModifySQL.Append('update DEPARTMENT');
  if IBQuery1.FieldValues['BUDGET'] = '30000' then
    IBUpdateSQL1.ModifySQL.Append('set BUDGET = 500000')
  else
    IBUpdateSQL1.ModifySQL.Append('set BUDGET = 30000');
  IBUpdateSQL1.ModifySQL.Append('where LOCATION = ''Tokyo''');
  //execute SQL update
  IBUpdateSQL1.ExecSQL(ukModify);
  //close IBQuery1
  IBQuery1.Close;
  //let's see new field data
  IBTable1.Refresh;
end;

私がやっていることは、選択ステートメントからいくつかのフィールドデータを読み取り、それに応じて他の値に変更したり、その逆を行ったりすることです。

ありがとう

4

1 に答える 1

0

「DBGrid自体で値を変更するだけで、フィールドの値を直接更新する方法がわかりません。誰かがその方法の例を示してくれるとありがたいです。」

心配ない。代わりに、この単純な構成を試してください。

次のコントロールをフォームに配置します。

  1. TIBDatabase(ツール パレット - Interbase)
  2. TIBTransaction(ツール パレット - Interbase)
  3. TIBQuery(ツール パレット - Interbase)
  4. TDataSetProvider(ツール パレット - データ アクセス)
  5. TClientDataSet(ツール パレット - データ アクセス)
  6. TDataSource(ツール パレット - データ アクセス)
  7. TDBGrid(ツール パレット - データ コントロール)
  8. TButton(ツール パレット - 標準)

それでは、それらを接続しましょう。Object Inspector を使用していくつかのプロパティを設定し、このようにコントロールが連携するようにします。

  1. IBDatabase1: IBTransaction1DefaultTransactionに設定 (オブジェクト インスペクターでドロップダウン リストを使用)
  2. IBTransaction1: IBDatabase1DefaultDatabaseに設定
  3. IBQuery1: IBDatabase1Databaseに設定
  4. IBQuery1: IBTransaction1Transactionに設定
  5. DataSetProvider1: IBQuery1DataSetに設定
  6. ClientDataSet1: DataSetProvider1ProviderNameに設定
  7. DataSource1: DataSetClientDataSet1 に設定
  8. DBGrid1: DataSourceDataSource1 に設定

次に、データベースに固有のその他のプロパティをいくつか設定します

  1. IBDatabase1: セットDatabaseName, LoginPrompt,Params
  2. IBQuery1: 設定SQL

次に、いくつかのコントロールをアクティブにします。オブジェクト インスペクタを使用して設計時にこれを行うか、同等のコード (例: IBDatabase1.Connected := True) を記述して、必要に応じてボタンのクリック イベントに配置することができます。

  1. データベースに接続します ( IBDatabase1.ConnectedTrue に設定)
  2. クエリを有効にする ( IBQuery1.ActiveTrue に設定)
  3. ClientDataSet を有効化 ( ClientDataSet1.ActiveTrue に設定)

これで (小さな問題は別として) DBGrid に完全に編集可能なデータセットが作成されます。そこをクリックして、好きなように編集してください。次のコードを別のボタンのクリックイベントに書き込む場合、変更を保存する必要があります。

ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(-1);

これはこれを行う唯一の方法ではなく、改善の余地はたくさんありますが、どの方向に進んでもよい出発点が得られたはずです。

于 2013-10-24T03:08:16.817 に答える