List index out of bounds (6) TJvDBComboBox

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

List index out of bounds (6) TJvDBComboBox

Mesaj gönderen Berdem »

Merhaba Arkadaşlar,

Kod: Tümünü seç

procedure Trpr.il(Sender: TObject);
var
  n: integer;
begin
  if (Sender is TJvDBComboBox) then TJvDBComboBox(Sender).Items.Clear;
  dm.il.LoadFromFile('il.cds');
  n := -1;
  while not dm.il.Eof do
  begin
    if (Sender is TJvDBComboBox) then
    begin
      TJvDBComboBox(Sender).Items.Add(dm.il.Fields[2].value);
      TJvDBComboBox(Sender).Values.Strings[n+1]:=dm.il.Fields[1].value;
      dm.il.Next;
    end;
    n := n + 1;
  end;
  dm.il.Close;
  dm.il.Open;
end;
DBLookupCombox gibi comboboxa itemlere görünüşleri , values veritabanına karşılık gelecek değerleri atamaya çalışıyorum. Kodla yapmaya çalışınca hata mesajı alıyorum. Fikirlerinizi bekliyorum.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
kodu şu şekilde düzenleyip satır satır çalıştırın.
orda hata veren satırı göreceksiniz.
muhtemelen

Kod: Tümünü seç

TJvDBComboBox(Sender).Values.Strings[n+1]:=dm.il.Fields[1].value;
satırında hata verecektir.
burda n in değerini falan kontrol et. ama kodu şöyle değiştirdiğin zaman muhtemelen hatayıda almayacaksın.
kolay gelsin.

Kod: Tümünü seç

procedure Trpr.il(Sender: TObject);
var
  n: integer;
begin
  if (Sender is TJvDBComboBox) then 
  begin
    TJvDBComboBox(Sender).Items.Clear;
    dm.il.LoadFromFile('il.cds');
    n := -1;
    while not dm.il.Eof do
    begin
      TJvDBComboBox(Sender).Items.Add(dm.il.Fields[2].value);
      TJvDBComboBox(Sender).Values.Strings[n+1]:=dm.il.Fields[1].value;
      dm.il.Next;
      n := n + 1;
    end;
    dm.il.Close;
    dm.il.Open;
  end;
end;
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Çok teşekkürler,
Kodu denedim aynı hatayı alıyorum.

Kod: Tümünü seç

TJvDBComboBox(Sender).Items.Add(dm.il.Fields[2].value); 
point koydum.F8 ile çalıştırdım. 6 sefer eof döngüsünden döndükten sonra

Kod: Tümünü seç

TJvDBComboBox(Sender).Values.Strings[n+1]:=dm.il.Fields[1].value;
satırında aynı hata mesajını alıyorum. Acaba ne olabilir diye düşünüyorum. Component olarak belirli bir kapasitesimi var.?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
n+1 6 olduğu zaman ekleme yapmıyor sanırım.
ekleme yapmadığı içinde 6 elemanı bulamadım diyor.
items.add dedikten combobox un elemanlarını showmessage ile (veya başka bir şekilde) gösterin.
bakın bakalım gerçektende ekliyormu?

aklıma aynı isimde iki tane il olduğu için eklemiyomuş gibi bir ihtimal geliyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Dediğiniz gibi yaptım.Aynı hata yı fakat list index bounds (0) olarak alıyorum.Yalnız Adana yerine Amasya sonrasında 5 mesajını alıyorum.

Kod: Tümünü seç

procedure Trpr.il(Sender: TObject);
var
  n: integer;
begin
  if (Sender is TJvDBComboBox) then
  begin
    TJvDBComboBox(Sender).Items.Clear;
    dm.il.LoadFromFile('il.cds');
    n := -1;
    while not dm.il.Eof do
    begin
      TJvDBComboBox(Sender).Items.Add(dm.il.Fields[2].value);
      ShowMessage(dm.il.Fields[2].value);
      ShowMessage(inttostr(dm.il.Fields[1].value));
      TJvDBComboBox(Sender).Values.Strings[n+1]:=dm.il.Fields[1].value;
      dm.il.Next;
      n := n + 1;
    end;
    dm.il.Close;
    dm.il.Open;
  end;
end;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

items.comatext i de showmessage ile gösterin.
olması gerektiği gibimi onuda kontrol edin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

ShowMessage(TJvDBComboBox(Sender).Text); ekledim,boşluk olarak çıkıyor. ShowMessage(TJvDBComboBox(Sender).Items.CommaText) ekledim aynı değeri veriyor.
En son Berdem tarafından 12 Şub 2007 03:46 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

text i boşluk vermesi normal.

Kod: Tümünü seç

ShowMessage(TJvDBComboBox(Sender).items.commatext
yapıp bakın.
Not: normal comboboxta items.commatext var ama jedide varmı iblmiyorum.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

:oops: Pardon
ShowMessage(TJvDBComboBox(Sender).Items.CommaText) ekledim aynı değeri veriyor.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

peki ozaman
strings[n+1] yerine

Kod: Tümünü seç

.Strings[TJvDBComboBox(Sender).Items.count-1]
deneyin.
Eğer hata vermezse items ve value leri kontrol etmenizi öneririm.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

@aslangeri çok teşekkürler,
Bunuda denedim values.string de bir sıkıntı var.Showmessage item değerlerini alıyor fakat values lerde sıkıntı yaratıyor ve degerini atamıyor.Hatayı orda veriyor.ordaki kullandığım kodda bir hatamı var. İl.csd diğer lookcomboboxlarda kullanıyorum orda sorun yok.
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Kod: Tümünü seç

procedure Trpr.Button1Click(Sender: TObject);
begin
      TJvDBComboBox(Sender).Items.Add('Adana');
      TJvDBComboBox(Sender).Values.Strings[0]:='1';
      TJvDBComboBox(Sender).Items.Add('Adıyaman');
      TJvDBComboBox(Sender).Values.Strings[1]:='2';
      TJvDBComboBox(Sender).Items.Add('Aağrı');
      TJvDBComboBox(Sender).Values.Strings[2]:='3';
      TJvDBComboBox(Sender).Items.Add('Amasya');
      TJvDBComboBox(Sender).Values.Strings[3]:='4';
end;
Böyle bir deneme yapayım dedim.Yine list index bounds(0) hatası aldım.
Sanırım kodala valueslere değer ataması yapamıyacağız.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

sanırım sorun valuese birşey eklememenden kaynaklanıyor.

Kod: Tümünü seç

TJvDBComboBox(Sender).Values.add('xx');
şeklinde valuesede ekleme yapman lazım.
valuesi clear yapmayı unutma tabi :wink:
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

:lol: :lol: :lol:
Elinden kodlara kurtuluş yok....Aynen dediğin gibi oldu.Bazen çok basit hatalar yapabiliyoruz.Çok teşekkürler...
Cevapla