DBGrid İçerik Boşaltma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ufb1453
Üye
Mesajlar: 52
Kayıt: 14 Oca 2014 09:41
İletişim:

DBGrid İçerik Boşaltma

Mesaj gönderen ufb1453 »

Merhaba,

DBgrid içerisinde buton ile kayıt işlemi yapıyorum ancak doğal olarak önceki tüm kayıtlar listeleniyor, isteğim ise her post işleminden sonra dbgridin içeriği boş olsun, sütunlar kalacak grid boş görünecek bu işlemi nasıl yapabilirim,

saygılarımla,
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: DBGrid İçerik Boşaltma

Mesaj gönderen ertank »

Merhaba,

Bir yöntem DBGrid'in bağlı olduğu TDataSet (AdoQuery, Query, vb) Filter özelliğini kullanmak olabilir. Filtre kısmına PRIMARY KEY alanın değerini verip TDataSet.Filtered := True; şeklinde filtreyi aktif hale getirirseniz sadece tek kayıt gözükecektir.

Örnek bir prosedür aşağıdaki gibi olabilir.

Kod: Tümünü seç

procedure ShowNewRecord(const DataSet: TDataSet; const KeyFieldName, YeniKayitIDDegeri: string);
begin
  DataSet.DisableControls();
  try
    DataSet.Filtered := False;
    DataSet.Filter := KeyFieldName + ' = ' + QuotedStr(YeniKayitIDDegeri);
    DataSet.Filtered := True;
  finally
    DataSet.EnableControls();
  end;
end;
Kullanımı şöyle olacaktır.

Kod: Tümünü seç

  AdoQuery1.Post();
  ShowNewRecord(AdoQuery1, 'ID', AdoQuery1.FieldByName('ID').AsString);
ufb1453
Üye
Mesajlar: 52
Kayıt: 14 Oca 2014 09:41
İletişim:

Re: DBGrid İçerik Boşaltma

Mesaj gönderen ufb1453 »

Hocam öncelikle geç cevap için özür dilerim. net sorunu sebebi ile giremedim cevabınızı deneyemedim,

Sizin yaptığınız şekilde uyguladığımda son satırı ekranda bırakmaktaydı, ben şu şekilde yaptım istediğim gibi DBGridde boş satır geliyor;

Kod: Tümünü seç

procedure TForm31.FormShow(Sender: TObject);
begin
  adotable1.Open;
  adotable1.Last;
  deger := adotable1.FieldByName('FaturaID').value;
  adotable1.Append;
  adotable1.Filtered:=false;
  adotable1.Filter:='FaturaID=' + inttostr(deger+1)    ;
  adotable1.Filtered:=True;
  adotable1.Edit;
end;
aynı şekilde kaydet butonuna da aynı kodları ekledim, ancak warning olarak aldığım yazı;
Could not convert variant of type (Null) into type (integer) uyarının sebebi bana göre edit modunda boş kayıt olduğu için filtre alanını integer arıyor bu hatayı engellemenin yada doğru yazılımın yöntemini belirtir misiniz?

Saygılarımla,
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: DBGrid İçerik Boşaltma

Mesaj gönderen ertank »

Aşağıdaki satırı:

Kod: Tümünü seç

deger := adotable1.FieldByName('FaturaID').value;
şu şekilde değiştirir iseniz;

Kod: Tümünü seç

deger := '0' + AdoTable1.FieldByName('FaturaID').Value;
Sorununuzun düzelmesi gerekli.
ufb1453
Üye
Mesajlar: 52
Kayıt: 14 Oca 2014 09:41
İletişim:

Re: DBGrid İçerik Boşaltma

Mesaj gönderen ufb1453 »

dbgrid hakkında çok soru sordum farkındayım, burada da kaldım ilerleyemiyorum, aşağıdaki kod bloğu ile güncelleyince hata almıyorum o sorunu hallettim ancak şunu farkettim DBGrid nesnesi 3. satıra inmiyor, 2. satırda işlemleri yapıyor, alt satıra indiğimde yine 2. satırda işlem yapıyor, sqlserver üzerinde kontrol ettiğimde ise ne kadar kayıt ettiysem hepsini DB ye kayıt ediyor, dbgridin alt satırına inmemesinin sebebi filter alanından kaynaklı kodu iptal edince alt satırlara iniyor, bunu aşmak için izlenebilecek yol nedir?
saygılarımla,

Kod: Tümünü seç

procedure TForm31.FormShow(Sender: TObject);
var
deger:integer;
begin
  adotable1.Open;
  adotable1.Last;
  deger := AdoTable1.FieldByName('FaturaID').Value;
  adotable1.Filtered:=false;
  adotable1.Filter:='FaturaID=' + inttostr(deger+1);
  adotable1.Filtered:=True;
  adotable1.Edit;
end;
ufb1453
Üye
Mesajlar: 52
Kayıt: 14 Oca 2014 09:41
İletişim:

Re: DBGrid İçerik Boşaltma

Mesaj gönderen ufb1453 »

istediğim gibi çözdüm, hem dbgridde istediğim satır adeti kadar kayıt yapabiliyorum hem post işleminden sonrada dbgrid boş olarak geliyor, çözüm için sql tabloda yeni bir kolon (FaturaRefNo) açtım ID harici post edilene kadar aynı değeri döndürmektedir. Kodlamam;

form açılışında dbgrid boş gelmesi için;

Kod: Tümünü seç

procedure TForm31.FormShow(Sender: TObject);
var
deger:string;
begin
  adotable1.Open;
  adotable1.Filtered:=false;
  deger :=  Edit5.Text;//ref değerim 
  adotable1.Filter:='FaturaRefNo=' + deger;
  adotable1.Filtered:=True;
  adotable1.Edit;
end;
ayrıca kaydet butonuna da

Kod: Tümünü seç

deger :=  Edit5.Text;//ref değerim 
  adotable1.Filter:='FaturaRefNo=' + deger;

ekledim şuan sorunsuz bir şekilde DbGridde işlem yapmaktayım,

saygılarımla,
Cevapla