satır silinen tablodan veri çekme problemi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

satır silinen tablodan veri çekme problemi

Mesaj gönderen forumsad »

arkadaşlar tablodan bazı kayıtları silmem gerekti....

silme yaptıktan sonra tablo içeriğini aşağıdaki kodla çekemiyorum çünkü 10'ucu sıraya gelince
tabloda kayıt olmadığı silinmiş olduğu için hata veriyor...

id kullanmadan tablodaki bir sütunu bir dizi içine nasıl atabiliriz..

Kod: Tümünü seç

procedure TfrmAnaliz.Button1Click(Sender: TObject);
var
ilanNu:string;
i:integer;
say:integer;
begin
_yolExe:=ExtractFilePath(Application.Exename);
IBDatabase1.DatabaseName:=_yolExe+'DB\VT.FDB';
IBDatabase1.Connected:=true;


IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select count(*) from GECICI');
IBQuery1.Open;

top := IBQuery1.Fields[0].AsInteger;
ShowMessage(IntToStr(top));

for i:=1 to top-2 do
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select * from GECICI where ID='+IntToStr(i) );
IBQuery1.Open;

ilanNu:=IBQuery1.fieldbyname('ILANNU').value;


ListBox2.Items.Add(ilanNu) ;
end;
saygılarımla
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen mrmarman »

For döngüsünü sondan başa kurarsan olur.
Resim
Resim ....Resim
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen forumsad »

peki sondan 3 önceki satır silinmiş ise gene hata vermez mi ?

tabloda 120 kayıt var diyelim değişik yerlerde 40 tanesi silinmiş ID 120 olmasına rağmen tabloda 80 kayıt var dolayısıyla
ID kullanarak veriyi çekemeyiz diye düşünüyorum...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen mrmarman »

Sıralı gidiyorsun diye değerlendirdim. Index 0 .. 20 gidiyorken sen 10 noluyu silersen 19 ITEM kalır... Ancak 20'den geriye gidersen sildiğin item ne olursa olsun yukarıda hepsi kalıyor haldedir.
Resim
Resim ....Resim
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen forumsad »

hocam söylediğinizi deneyip sonucu yazacağım bu arada aşağıdaki kodda datasete aldığım bilğiyi dbgrid içinde gösterebiliyorum..

peki dataset içinden sadece ILANNU stununu bir diziye veya listbox içine atabilirmiyiz

saygılarımla

Kod: Tümünü seç

procedure TfrmAnaliz.Button2Click(Sender: TObject);
var
gln:string;
begin
_yolExe:=ExtractFilePath(Application.Exename);
IBDatabase1.DatabaseName:=_yolExe+'DB\VT.FDB';
IBDatabase1.Connected:=true;

//ibdataset1.Active:=false;
//ibdataset1.selectsql.text:=' select * from GECICI' ;
//ibdataset1.Active:=True;

IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select * from GECICI ');
IBQuery1.Open;

//gln:=IBDataSet1.Fields[0].AsString;
//gln:=IBDataSet1.FieldByName('ILANNU').AsString;
//ShowMessage(gln);

//DataSource1.DataSet:=ibdataset1;
DataSource1.DataSet:=IBQuery1;
DBGrid1.DataSource:=DataSource1;
end;
saygılarımla
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen forumsad »

Kod: Tümünü seç

procedure TfrmAnaliz.Button1Click(Sender: TObject);
var
ilanNu:string;
i:integer;
say:integer;
begin
_yolExe:=ExtractFilePath(Application.Exename);
IBDatabase1.DatabaseName:=_yolExe+'DB\VT.FDB';
IBDatabase1.Connected:=true;


IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select count(*) from GECICI');
IBQuery1.Open;

top := IBQuery1.Fields[0].AsInteger;
ShowMessage(IntToStr(top));

for i := top downto 0 do
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select * from GECICI where ID='+IntToStr(i) );
IBQuery1.Open;

ilanNu:=IBQuery1.fieldbyname('ILANNU').value;


ListBox2.Items.Add(ilanNu) ;
end;
son kayıttan geriye doğruda hata verdi hocam

saygılarımla
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen mrmarman »

Verdiğim örnek düz liste halinde olan bir liste kutusu benzeri yapı içindi.

Bir dizi ilanı silmek mi istiyorsun...

Kod: Tümünü seç

begin
    IBQuery1.Close;
    IBQuery1.SQL.Clear;
    IBQuery1.SQL.Add('DELETE FROM GECICI WHERE ID BETWEEN 1 AND 10 );
  veya
    IBQuery1.SQL.Add('DELETE FROM GECICI WHERE ID in ( 1,2,3,4,5,6,7,8,9,10 )' );
  veya
    IBQuery1.SQL.Add('DELETE FROM GECICI WHERE ILANNO in ( ''aaa'', ''bbb'', ''ccc'' )' );
  veya
    IBQuery1.SQL.Add('DELETE FROM GECICI WHERE ILANNO in ( '+QuotedStr(ListBox1.Items[0])+', '+QuotedStr(ListBox1.Items[1])+', '+QuotedStr(ListBox1.Items[2])+' )' );
    IBQuery1.ExecSQL;
end;
şeklinde bir defada yapabilirsin. SQL'in gücünü kullanmanı tavsiye ederim.
Resim
Resim ....Resim
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen forumsad »

yok hocam 50 adet ilanı GECICI adında bir tabloda takip ediyorum
saatılan ilanları tablodan siliyorum
yeni eklenen ilanları tabloya ekliyorum....

bu şekilde bir takip programı
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen mrmarman »

Tamam işte,
(1) görüntülediğin tablodan seçimlerini yaparsın,
(2) seçim yapılanların bir listesini alır,
(3) verdiğim örnekteki gibi tek satırda hepsini silersin.

Sistemi biraz daha tarif edersen yardımcı olabiliriz.
Resim
Resim ....Resim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen freeman35 »

while ve repeat until döngülerini neden kullanmıyorsun? for belirli sayıda ise kullanılır. sen 50 en fazla sayı içinden bazıları silinmiş olabilir diyorsun, ya silindimi önce karşı tarafa bak (locate gibi) sonra işlem yap, yada sayısal bir takip olmayan şart(lar)a bağlı olacaksa while yada repeat until en iyi çözüm.
dip not daha. While sadece koşul sağlandığı sürece çalışır, koşul sağlanmazsa hiç çalışmaz. Repeat until ise enaz bir kez mutlaka çalışır.
Query.First;// Ben bunu garanti olsun diye mutlaka yazarım, cursor başa gider.
While not Query.EOF do begin// eğer dosya boşsa döngüye girmez
Query.Next


Query.First;
repeat
// Buradaki işlem mutlaka çalışır. dosya boş bile olsa
until Query.EOF// dosya sonuna kadar
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: satır silinen tablodan veri çekme problemi

Mesaj gönderen forumsad »

Kod: Tümünü seç

procedure TfrmAnaliz.Button3Click(Sender: TObject);
var
ilanNu:string;
begin
_yolExe:=ExtractFilePath(Application.Exename);
IBDatabase1.DatabaseName:=_yolExe+'DB\VT.FDB';
IBDatabase1.Connected:=true;

IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select * from GECICI ');
IBQuery1.Open;

while (not IBQuery1.Eof) do
    begin
     say:=say+1;
      ilanNu:=IBQuery1.fieldbyname('ILANNU').value;
      ListBox2.Items.Add(ilanNu) ;
      IBQuery1.Next;
    end;
ShowMessage(IntToStr(say));
end;
freeman35 hocam teşekkür ederim benim bir türlü anlatmayı beceremediğimi anladınız internetten araştırıp hemen buldum istediğim gibi çalıştı size ve cevap veren tüm hocalarıma sonsuz saygılar
Cevapla