list index out of bounds(0)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

list index out of bounds(0)

Mesaj gönderen ademcicek »

herkese merhaba. ben yeni proje başladım artık bir sürü soru soracam herhalde :( .
programı derlerken "list index out of bounds(0)" böyle bir hata veriyor. bir türlü çıkamadım işin içinden.
bu hata ne hatası çok teşekür ederim
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

while not dmod.Qcombo.Eof do
begin
yaklasikmaliyet.LBsol.Selected[yaklasikmaliyet.LBsol.Items.IndexOf(dmod.Qcomboitem.Value)] := True;
yaklasikmaliyet.ACsagatekExecute(Self);
hata verdiği satır aşağısı
dmod.Qcombo.Next;

yaklasikmaliyet.ACsagatekExecute(Self); işlediği ko aşağıda.

procedure Tyaklasikmaliyet.ACsagatekExecute(Sender: TObject);
var i, k: Integer;

begin
k := 0;
for i := LBsol.Items.Count - 1 downto 0 do
begin
if LBsol.Selected then
begin
LBsag.Items.Add(LBsol.Items.Strings);
LBsol.Items.Delete(i);
inc(k);
end;
end;
if k = 0 then LBsol.Selected[0] := True else
begin
LBSAGDEGISTI := True;
ACsolatek.Enabled := True;
ACsolatum.Enabled := True;
end;
if LBsol.Items.Count = 0 then
begin
ACsagatek.Enabled := False;
ACsagatum.Enabled := False;
end;
end;

çok teşekürederim
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Kod: Tümünü seç

dmod.Qcombo.Next; 
Qcombo dan dönen sonuçların bir sonrakine ulaşmaya çalışırken hata almışsınız ama

Kod: Tümünü seç

while not dmod.Qcombo.Eof do 
demişsiniz. Yani sonuna gelmediyseniz bu döndünün içinde kalmaya devam edecek. Yani görünür itibari ile sorun yok gibi. Aklıma da başka birşey gelmiyor şuan.

Siz bu dönen sonuçları bir dbgride aktarıp gördünüz mü? Daha ilk stepde mi hata alıyorsunuz?
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

debug ettirdim.

2. yi döndükten sonra hata veriyor.
vallahi birsürü şey denedim ama çıkamadım içinden.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Kod: Tümünü seç

dmod.Qcombo.Next; 
satirini isletmeye calisinca hata veriyor diyorsunuz. Bu satir dataset'te bir sonraki kayda gecirmek icin. Normalde bu islemden boyle bir hata mesaji cikmasi pek olasi degil. (En azindan ben hic duymadim....) Bu hata mesajini vermesi muhtemel satirlar sunlardir :

Kod: Tümünü seç

if LBsol.Selected[i] then 
begin 
LBsag.Items.Add(LBsol.Items.Strings[i]); 
LBsol.Items.Delete(i); 
.....
if k = 0 then LBsol.Selected[0] := True else 
Next metoduna bagli olarak calisan bir kod hatayi veriyor olabilir.... ilgili dataset'in veya datasource'un herhangib bir eventinde kod varsa oralara da breakpoint koyun. Ayrica dataset icindeki alanlarin da mesela onchange gibi bir eventinde kod varsa yine buralara breakpoint koyun muhtemelen varsa oralardaki bir kod sorunu olusturuyordur.....

Kolay gelsin......
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.

- Buraya lütfen dikkat edin. :idea:

Kod: Tümünü seç

for i := LBsol.Items.Count - 1 downto 0 do 
begin 
  if LBsol.Selected[i] then 
  begin 
    LBsag.Items.Add(LBsol.Items.Strings[i]); 
    LBsol.Items.Delete(i); // <-- Hata.. 
    // döngü içerisinde eleman rejim değişikliği 
    // döngü sayacında değişiklik yapmaz...
    // Repeat Until veya While ile dögü içinde DEC() fonksiyonu vb. 
    // manuel düşüş yapılıp kontrol edilip For döngüsü kullanılmasa iyi olurdu diye düşünüyorum...
    // böylece daha erken döngüden çıkılma vs şansı olurdu demek istiyorum..
    inc(k); 
  end;
end;
Teknik olarak geri sayımda eleman sayısı kalandan daha da küçük olacağı düşünülüyor sanıyorum ama bir kontrol noktası olması konusunda bilgi vereyim dedim..
Resim
Resim ....Resim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Öncelikle Delphi editörü,syntax(yazım) hatası değilse, hatanın olduğu yere değil bir sonraki bloğa konumlanır. Blok tan kastım ise ";" arasındaki comut yada komut grubu.
Bu bilgi ile
hata

Kod: Tümünü seç

dmod.Qcombo.Next;
satırında değil, bir önceki satırda

Kod: Tümünü seç

yaklasikmaliyet.ACsagatekExecute(Self);
Tlist gibi TSringList gibi component ların delete comutunu kullanacaksanız, bunu @mrmcop anlattığı gibi yapın.
Döngü seçerkende
eğer sayı belli ise for
eğer döngü içine enaz bir kez dahi olsa girecekse repeat until
eğer döngü içine girmeme ihtimali varsa while
döngülerini kullanın
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 !!!
Cevapla