DBGrid deki Kayıtları silmek !!!
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
DBGrid deki Kayıtları silmek !!!
Merhaba;
Bu şekilde bir kodla sıfır bakiyeleri buluyorum ;
ESILRapor.close;
ESILRapor.sql.clear;
ESILRapor.sql.add('SELECT ESTOK_KODU,ESTOK_ADI,EOLCU_BR1,EFISNO,ECARI_ISIM,');
ESILRapor.sql.add('SUM(CASE WHEN EGCTIP='+#39+'G'+#39+' then ESTHAR_GCMIK else 0 end) [Giren Mik.],');
ESILRapor.sql.add('SUM(CASE WHEN EGCTIP='+#39+'C'+#39+' then ESTHAR_GCMIK else 0 end) [Çıkan Mik.],');
ESILRapor.sql.add('SUM((CASE WHEN EGCTIP='+#39+'G'+#39+ ' then ESTHAR_GCMIK else 0 end)-(CASE WHEN EGCTIP='+#39+'C'+#39+' then ESTHAR_GCMIK else 0 end)) [Kalan Mik.] ');
ESILRapor.sql.add('FROM TBLEMANET GROUP BY ESTOK_KODU,ESTOK_ADI,EOLCU_BR1,EFISNO,ECARI_ISIM');
ESILRapor.SQL.Add('HAVING SUM((CASE WHEN EGCTIP='+#39+'G'+#39+ ' then ESTHAR_GCMIK else 0 end)-(CASE WHEN EGCTIP='+#39+'C'+#39+' then ESTHAR_GCMIK else 0 end)) <= 0');
ESILRapor.open;
Stok da sıfır bakiyeleri DBGrid de 4 sütün da görüntülüyorum ve "Kalan Mik." sıfır ise kayıtları silecek.
tabi sıfır olmayan kayıtlar da var
burda silmeyi nasıl kullanabilirim?
Bu şekilde bir kodla sıfır bakiyeleri buluyorum ;
ESILRapor.close;
ESILRapor.sql.clear;
ESILRapor.sql.add('SELECT ESTOK_KODU,ESTOK_ADI,EOLCU_BR1,EFISNO,ECARI_ISIM,');
ESILRapor.sql.add('SUM(CASE WHEN EGCTIP='+#39+'G'+#39+' then ESTHAR_GCMIK else 0 end) [Giren Mik.],');
ESILRapor.sql.add('SUM(CASE WHEN EGCTIP='+#39+'C'+#39+' then ESTHAR_GCMIK else 0 end) [Çıkan Mik.],');
ESILRapor.sql.add('SUM((CASE WHEN EGCTIP='+#39+'G'+#39+ ' then ESTHAR_GCMIK else 0 end)-(CASE WHEN EGCTIP='+#39+'C'+#39+' then ESTHAR_GCMIK else 0 end)) [Kalan Mik.] ');
ESILRapor.sql.add('FROM TBLEMANET GROUP BY ESTOK_KODU,ESTOK_ADI,EOLCU_BR1,EFISNO,ECARI_ISIM');
ESILRapor.SQL.Add('HAVING SUM((CASE WHEN EGCTIP='+#39+'G'+#39+ ' then ESTHAR_GCMIK else 0 end)-(CASE WHEN EGCTIP='+#39+'C'+#39+' then ESTHAR_GCMIK else 0 end)) <= 0');
ESILRapor.open;
Stok da sıfır bakiyeleri DBGrid de 4 sütün da görüntülüyorum ve "Kalan Mik." sıfır ise kayıtları silecek.
tabi sıfır olmayan kayıtlar da var
burda silmeyi nasıl kullanabilirim?
Re: DBGrid deki Kayıtları silmek !!!
Merhaba,
Öncelikle bazı noktalara dikkat çekmek istiyorum.
1- ESILRapor.SQL içine tasarım aşamasında aşağıdaki gibi bir ifade yazarsanız:
#39 gibi kodu okumayı zorlaştıran bir kullanımına gerek kalmamış olur ve daha sonra kullanımı aşağıdaki gibi olabilir.
2- Sorunuzda sıfır olan kayıtları silmekten bahseder iken ne istediğiniz net anlaşılmıyor.
A- Bakiyesi sıfır olan tüm stok hareketlerini mi silmek istiyorsunuz?
B- Sorgu içinde bakiyesi sıfır olan kayıt görmek istemiyor musunuz?
Eğer esas soru A ise tablo yapınızı bilmediğimiz için hazır kullanabileceğiniz bir kod/sql yazmak mümkün değil.
Eğer esas soru B ise sorguda ufak bir değişiklik ile sıfır bakiyeli kayıtların listelenmemesini sağlayabilirsiniz. HAVING SUM ile başlayan satırın sonundaki "<= 0" yerine "< 0" yazabilirsiniz.
Öncelikle bazı noktalara dikkat çekmek istiyorum.
1- ESILRapor.SQL içine tasarım aşamasında aşağıdaki gibi bir ifade yazarsanız:
Kod: Tümünü seç
SELECT ESTOK_KODU,ESTOK_ADI,EOLCU_BR1,EFISNO,ECARI_ISIM,
SUM(CASE WHEN EGCTIP='G' then ESTHAR_GCMIK else 0 end) [Giren Mik.],
SUM(CASE WHEN EGCTIP='C' then ESTHAR_GCMIK else 0 end) [Çıkan Mik.],
SUM((CASE WHEN EGCTIP='G' then ESTHAR_GCMIK else 0 end)-(CASE WHEN EGCTIP='C' then ESTHAR_GCMIK else 0 end)) [Kalan Mik.]
FROM TBLEMANET GROUP BY ESTOK_KODU,ESTOK_ADI,EOLCU_BR1,EFISNO,ECARI_ISIM
HAVING SUM((CASE WHEN EGCTIP='G' then ESTHAR_GCMIK else 0 end)-(CASE WHEN EGCTIP='C' then ESTHAR_GCMIK else 0 end)) <= 0
Kod: Tümünü seç
ESILRapor.Close();
ESILRapor.Prepare();
ESILRapor.Open();
A- Bakiyesi sıfır olan tüm stok hareketlerini mi silmek istiyorsunuz?
B- Sorgu içinde bakiyesi sıfır olan kayıt görmek istemiyor musunuz?
Eğer esas soru A ise tablo yapınızı bilmediğimiz için hazır kullanabileceğiniz bir kod/sql yazmak mümkün değil.
Eğer esas soru B ise sorguda ufak bir değişiklik ile sıfır bakiyeli kayıtların listelenmemesini sağlayabilirsiniz. HAVING SUM ile başlayan satırın sonundaki "<= 0" yerine "< 0" yazabilirsiniz.
Re: DBGrid deki Kayıtları silmek !!!
Hayır Bakiyesi sıfır olan tüm kayıtları silmek istiyorum.
Re: DBGrid deki Kayıtları silmek !!!
Hayır Bakiyesi sıfır olan tüm kayıtları silmek istiyorum. Tablo 1 tane TBLEMANET hepsi bunun içerisinde. ve alanlar da ESTOK_KODU,ESTOK_ADI,EOLCU_BR1,EFISNO,ECARI_ISIM
Re: DBGrid deki Kayıtları silmek !!!
İstediğiniz birkaç yöntem ile yapılabilir. Aklıma gelen ilk yöntem:
Formda iki tane Query nesnesi olsun. İlkinin adı belli ESILRapor. İkincisinin adı qryESIL2 olsun. İlk sorguyu aşağıdaki şekilde değiştirin
qryESIL2 sorgusunu çalışma zamanında aşağıdaki gibi tanımlayın
Kodunuzu aşağıdaki şekilde değiştirin.
Bu kod sonrasında normal sorgunuzu çalıştırın.
NOT: Kullandığınız Query nesnesini bilinmiyor. Bu sebepten Params[0] noktasında derleme hatası alırsanız Parameters[0] şeklinde kodu değiştirmeniz gerekebilir.
Formda iki tane Query nesnesi olsun. İlkinin adı belli ESILRapor. İkincisinin adı qryESIL2 olsun. İlk sorguyu aşağıdaki şekilde değiştirin
Kod: Tümünü seç
SELECT ESTOK_KODU,ESTOK_ADI,EOLCU_BR1,EFISNO,ECARI_ISIM,
FROM TBLEMANET GROUP BY ESTOK_KODU,ESTOK_ADI,EOLCU_BR1,EFISNO,ECARI_ISIM
HAVING SUM((CASE WHEN EGCTIP='G' then ESTHAR_GCMIK else 0 end)-(CASE WHEN EGCTIP='C' then ESTHAR_GCMIK else 0 end)) = 0
Kod: Tümünü seç
delete from TBLEMANET
where ESTOK_KODU = :KOD AND ESTOK_ADI = :AD AND EOLCU_BR1 = :BIRIM AND EFISNO = :FIS AND ECARI_ISIM = :ISIM
Kod: Tümünü seç
ESILRapor.Close();
ESILRapor.Prepare();
ESILRapor.Open();
qryESIL2.Prepare();
ESILRapor.First();
while not ESILRapor.Eof do
begin
qryESIL2.Params[0].AsString := ESILRapor.FieldByName('ESTOK_KODU').AsString;
qryESIL2.Params[1].AsString := ESILRapor.FieldByName('ESTOK_ADI').AsString;
qryESIL2.Params[2].AsString := ESILRapor.FieldByName('EOLCU_BR1').AsString;
qryESIL2.Params[3].AsString := ESILRapor.FieldByName('EFISNO').AsString;
qryESIL2.Params[4].AsString := ESILRapor.FieldByName('ECARI_ISIM').AsString;
qryESIL2.ExecSQL();
ESILRapor.Next();
end;
NOT: Kullandığınız Query nesnesini bilinmiyor. Bu sebepten Params[0] noktasında derleme hatası alırsanız Parameters[0] şeklinde kodu değiştirmeniz gerekebilir.
Re: DBGrid deki Kayıtları silmek !!!
DBGrid de rapor olarak alıyorum dbgrid de listelenen kayıtları delete edebilir miyim?
veya
DBGrid deki kayıtları Mouse ile seçip sağ klik sil diyebilirmiyim?
veya
DBGrid deki kayıtları Mouse ile seçip sağ klik sil diyebilirmiyim?
Re: DBGrid deki Kayıtları silmek !!!
Anladığım kadarıyla bu yeni bir soru. Kısa cevabı evet.
DBGrid zaten bir TDataSet içeriğini ekranda göstermeye yarar. Siz "dbgrid de listelenen kayıtları delete edebilir miyim?" dediğinizde esasen sorduğunuz soru TDataSet içinden ilgili kayıtları silmek oluyor. Bunu SQL kullanarak yapmanız mümkün.
Bir önceki cevabımda tarif etmeye çalıştığım qrySIL2 sorgusunu tasarım zamanında hazırlarsanız herhangi bir kayıt üzerinde sağ tuş ile tıklayıp sildirmeniz mümkün. Tıklama altına yazmanız gereken kod yine önceki cevabın bir parçası.
NOT: DBGrid adını kendinize göre uyarlamanız gerekir.
DBGrid zaten bir TDataSet içeriğini ekranda göstermeye yarar. Siz "dbgrid de listelenen kayıtları delete edebilir miyim?" dediğinizde esasen sorduğunuz soru TDataSet içinden ilgili kayıtları silmek oluyor. Bunu SQL kullanarak yapmanız mümkün.
Bir önceki cevabımda tarif etmeye çalıştığım qrySIL2 sorgusunu tasarım zamanında hazırlarsanız herhangi bir kayıt üzerinde sağ tuş ile tıklayıp sildirmeniz mümkün. Tıklama altına yazmanız gereken kod yine önceki cevabın bir parçası.
Kod: Tümünü seç
qryESIL2.Params[0].AsString := DBGrid1.DataSource.DataSet.FieldByName('ESTOK_KODU').AsString;
qryESIL2.Params[1].AsString := DBGrid1.DataSource.DataSet.FieldByName('ESTOK_ADI').AsString;
qryESIL2.Params[2].AsString := DBGrid1.DataSource.DataSet.FieldByName('EOLCU_BR1').AsString;
qryESIL2.Params[3].AsString := DBGrid1.DataSource.DataSet.FieldByName('EFISNO').AsString;
qryESIL2.Params[4].AsString := DBGrid1.DataSource.DataSet.FieldByName('ECARI_ISIM').AsString;
qryESIL2.ExecSQL();
// Silinen kaydı ekrandan da kaldırmak için aşağıdaki kod gerekebilir
DBGrid1.DataSource.DataSet.Close();
DBGrid1.DataSource.DataSet.Open();
Re: DBGrid deki Kayıtları silmek !!!
Ben işin içinden çıkamadım, şöyle ki;
TBLEMANET Tablom var ve bu tablo şu şekilde ;
Burda şunu yapamadım Müşteri emanete 1 stok için 30 adet ürün bırakıyor ve bu ürünü aralıklı zamanlarda 10 tane 5 er tane alarak ürünü bitiriyor.
ben bu ürünün DBGrid e raporunu alıyorum tabi tek kayıt olarak
Tabloda bu ürüne ait çıkışı olan tüm kayıtları sildikten sonra da Cari ve ilk ürünün girişini silmek istiyorum.
Not : Tabi Müşteri birkaç ürün de bırakmış olabilir ve bu ürünlerden bir tanesini sıfırlamış da olabilir, diğer ürünlerin alımına devam edecek .
Bu şekilde bana yardımcı olabilir misiniz?
Ben DBGrid1 'e PopupMenu1 ekledim ve tüm kayıtları sil in içine de sql kodu yazdım
Silmedi.
TBLEMANET Tablom var ve bu tablo şu şekilde ;
Burda şunu yapamadım Müşteri emanete 1 stok için 30 adet ürün bırakıyor ve bu ürünü aralıklı zamanlarda 10 tane 5 er tane alarak ürünü bitiriyor.
ben bu ürünün DBGrid e raporunu alıyorum tabi tek kayıt olarak
Tabloda bu ürüne ait çıkışı olan tüm kayıtları sildikten sonra da Cari ve ilk ürünün girişini silmek istiyorum.
Not : Tabi Müşteri birkaç ürün de bırakmış olabilir ve bu ürünlerden bir tanesini sıfırlamış da olabilir, diğer ürünlerin alımına devam edecek .
Bu şekilde bana yardımcı olabilir misiniz?
Ben DBGrid1 'e PopupMenu1 ekledim ve tüm kayıtları sil in içine de sql kodu yazdım
Kod: Tümünü seç
procedure TForm17.mKaytlarSil1Click(Sender: TObject);
var
ESTOK_KODU:string;
ESKOD:STring;
ESTOKSILCevap:Word;
begin
//ESTOK_KODU:=trim(ESTOKSIL.fields[8].asstring);
Application.MessageBox('Seçtiğiniz Stok Emanet Kaydı Bitmiş!!! STOK SİLİNECEK !!!','Bilgilendirme Mesajı',MB_ICONINFORMATION);
ESTOKSIL.Close;
ESTOKSIL.SQL.Clear;
ESTOKSIL.SQL.add('DELETE FROM TBLEMANET WHERE ESTOK_KODU=:ESKOD');
ESTOKSIL.ExecSQL;
ESTOKSIL.Close;
ESTOKSILCevap:=Application.MessageBox('Silme İşlemi Yapıldı !!! Devam Edecekmisiniz ? ','Silme İşlemi',MB_YESNO);
if ESTOKSILCevap=mrYes Then
begin
end
Else
DBGrid1.Visible:=False;
end;//sil
Re: DBGrid deki Kayıtları silmek !!!
Kod genel olarak doğru. Sadece parametre ataması yapmamışsınız. Aşağıdaki şekilde çalışması gerekli.
Eğer derleme zamanında Params[0] için hata mesajı alırsanız Parameters[0] şeklinde değiştirmeyi deneyebilirsiniz. Kullandığınız database erişim bileşenine göre kodun bu kısımı değişiklik gösterir.
Kod: Tümünü seç
procedure TForm17.mKaytlarSil1Click(Sender: TObject);
begin
// Kullanıcı yanlışlıkla SİL tıklamış olabilir. Onay alalım
if MessageDlg('Seçtiğiniz Stok Emanet Kaydı Bitmiş!!! STOK SİLİNECEK !!! Emin misiniz?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes then Exit();
ESTOKSIL.Close();
ESTOKSIL.SQL.Clear();
ESTOKSIL.SQL.Add('DELETE FROM TBLEMANET WHERE ESTOK_KODU=:ESKOD');
ESTOKSIL.Params[0].AsString := DBGrid1.DataSource.DataSet.FieldByName('ESTOK_KODU').AsString;
ESTOKSIL.ExecSQL();
ESTOKSIL.Close();
DBGrid1.Visible := MessageDlg('Silme İşlemi Yapıldı !!! Devam edecek misiniz ? ', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
end;//sil
Re: DBGrid deki Kayıtları silmek !!!
Yardımların için size çok Teşekkür ederim.
Kod çalıştı ufak değişiklik yaptım şöyle ki;
bu şekildeydi.
değiştirdim.
Kod çalıştı ufak değişiklik yaptım şöyle ki;
bu şekildeydi.
Kod: Tümünü seç
ESTOKSIL.Params[0].AsString := DBGrid1.DataSource.DataSet.FieldByName('ESTOK_KODU').AsString
Kod: Tümünü seç
ESTOKSIL.Parameters[0].Value:= DBGrid1.DataSource.DataSet.FieldByName('ESTOK_KODU').Asstring;
Re: DBGrid deki Kayıtları silmek !!!
Bir şey daha sormak istiyorum; DBGrid1 de listelenen kayıtları bir Button1 yardımı ile tümünü seç diyebilir miyim? sonrada Button2 ile de Tümünü Sil diyebilir miyim? O zaman kod yapısı değişir mi ? mevcut kodları kullanabilir miyim ?
Re: DBGrid deki Kayıtları silmek !!!
1- DBGrid içindeki kayıtlara "tümünü seç" diyemezsiniz.
2- DBGrid içindeki kayıtların tümünü silmek için ayrı bir kod yazıp bunu kullanabilirsiniz.
İkinci seçenek için mevcut kod içinde uyarlamalar gerekmektedir.
2- DBGrid içindeki kayıtların tümünü silmek için ayrı bir kod yazıp bunu kullanabilirsiniz.
İkinci seçenek için mevcut kod içinde uyarlamalar gerekmektedir.
Re: DBGrid deki Kayıtları silmek !!!
Peki döngüye nasıl alırım ?
Bu Kodu kullanabilirmiyim?
Bu Kodu kullanabilirmiyim?
Kod: Tümünü seç
ESTOKSIL.Close();
ESTOKSIL.SQL.Clear();
ESTOKSIL.SQL.Add('DELETE FROM TBLEMANET WHERE ESTOK_KODU=:ESKOD');
ESTOKSIL.Params[0].AsString := DBGrid1.DataSource.DataSet.FieldByName('ESTOK_KODU').AsString;
ESTOKSIL.ExecSQL();
ESTOKSIL.Close();
Re: DBGrid deki Kayıtları silmek !!!
Uygulamanın içeriğini tam bilmemek ile birlikte aşağıdaki gibi bir kod yazabilirsiniz diye düşünüyorum.
Yukarıdaki prosedürü kullanmak için aşağıdaki gibi bir kod yazabilirsiniz.
Kod: Tümünü seç
procedure DeleteAllZeroRecords(Data: TDataSet);
var
Query: TADOQuery;
begin
if not Assigned(Data) then Exit();
Query := TADOQuery.Create(nil);
try
Query.Connection := TAdoQuery(Data).Connection;
Query.SQL.Add('DELETE FROM TBLEMANET WHERE ESTOK_KODU=:ESKOD');
Data.First();
while not Data.Eof do
begin
// Kalan miktarı sıfır olan kayıtları silmek istiyoruz
if Data.FieldByName('Kalan Mik.').AsFloat = 0 then
begin
Query.Parameters[0].Value := Data.FieldByName('ESTOK_KODU').AsString;
Query.ExecSQL();
end;
Data.Next();
end;
finally
Query.Free();
end;
end;
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
begin
// Silinecek kayıt içeren DataSet parametre olarak gönderilir.
DeleteAllZeroRecords(DBGrid1.DataSource.DataSet);
// Kayıtların silindiği Query yeniden çalıştırılmadan anlaşılmaz.
TAdoQuery(DBGrid1.DataSource.DataSet).Refresh();
end;
-
- Üye
- Mesajlar: 30
- Kayıt: 14 Mar 2017 04:01
Re: DBGrid deki Kayıtları silmek !!!
Hocam benimde böyle bir sıkıntım nasıl yaparım kodu inceledim ancak biraz farklı benim istediğim burada arkadaş dbgrid de bakiyesi 0 olanları siliyor anlaşılan ancak ben dbgridde ki tüm kayıtları silmeyi istiyorum nasıl yapabilirim.
Ve programı yeniden başlatınca 1.kayıttan başlasın istiyorum ancak nasıl yapabilirim.yardımcı olur musunuz?
Paradox veritabanı datasource ve Query kullanıyorum.
Ve programı yeniden başlatınca 1.kayıttan başlasın istiyorum ancak nasıl yapabilirim.yardımcı olur musunuz?
Paradox veritabanı datasource ve Query kullanıyorum.