procedure TPENCERE.QRY1AfterEdit(
DataSet: TDataSet);
begin
if QRY1.FieldByName('SAYIS').Value='1'
then QRY1.FieldByName('ACIKLAMA').AsString:='TEKLEME';
end;
TDataSet bileşeni (query nesnesi) AfterEdit olayını sizin istediğiniz zaman tetiklemeyecektir. Çok yüksek ihtimal ile SAYIS alanından çıktığınız zaman tetiklenir ki muhtemelen sizin istediğiniz bu değil. Aşağıda test edilmemiş kod örneğini deneyebilirsiniz.
procedure TForm2.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if DBGrid1.SelectedIndex = 0 then // DBGrid ilk kolonu SAYIS alanına ait olduğu varsayılıyor
begin
case Key of
'1': begin
DBGrid1.DataSource.DataSet.FieldByName('ACIKLAMA').AsString := 'TEKLEME';
end;
end;
end;
end;
procedure TPENCERE.dbgrd1KeyPress(Sender: TObject;
var Key: Char);
begin
if dbgrd1.SelectedIndex = 5 then // DBGrid ilk kolonu SAYIS alanına ait olduğu varsayılıyor
begin
case Key of
'1': begin
/// dbgrd1.DataSource.DataSet.FieldByName('ACIKLAMA').AsString := 'TEKLEME';
QRY1.Edit;
QRY1.FieldByName('ACIKLAMA').AsString := 'TEKLEME';
QRY1.Post;;
end;
end;
end;
end;
Eğer QRY1 durumu dsBrowse (normal dolaşma modunda) iken ve Focus DBGrid üzerinde iken kullanıcı 1 tuşuna basar ise buna rağmen AÇIKLAMA alanı "TEKLEME" olarak değiştirilir. Dolayısıyla benim önerim "DBGrid.State in [dsEdit, dsInsert]" şeklinde bir kontrol ile alan değerini değiştirmek olacaktır. Gezinme halinde iken yanlışlıkla değişiklik yapılmasının önüne geçilmiş olur bu şekilde.
Mesela,
- SAYIS alan değeri 3
- ACIKLAMA alanı değeri "deneme"
- Focus SAYIS kolonunda
- QRY1.State = dsBrowse iken
kullanıcı klavyeden 1 tuşuna basar ise;
* SAYIS alanı değeri 3 olarak kalır
* ACIKLAMA alanı değeri "TEKLEME" olarak değişir.