iki farklı projede birinde çalış kod diğer projede hata veriyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

iki farklı projede birinde çalış kod diğer projede hata veriyor

Mesaj gönderen dogan »

Merhaba,

İki farklı proje aynı excelden, aynı kodları kullanıyorum, excelden listview veri çekiyorum, birinde çalışan kodlar diğer projede hata veriyor. (Exception class EStringListError with message 'List index out of bounds (5)'.) Bu hata neden kaynaklı olabilir....

Kod: Tümünü seç

procedure TForm5.excelButtonClick(Sender: TObject);
const
  xlCellTypeLastCell = $0000000B;
var
  Str: String;
  Book: Variant;
  Excel, Sheet: Variant;
  Satir, SSay: Integer;
begin
  try
    Excel := CreateOleObject('Excel.Application');
    With TOpenDialog.Create(Nil) do
    begin
      Filter := 'Excel *.xls,*.xlsx|*.xls;*.xlsx';
      FilterIndex := 1;
      if Execute then
      begin
        Book := Excel.WorkBooks.Open(FileName);
        Sheet := Book.worksheets[1];
        SSay := Excel.ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell,
          EmptyParam).Row;
        for Satir := 1 to SSay do
        begin
          Screen.Cursor := crHourGlass;
          Str := Sheet.Cells[Satir, 1];
          with PlaylistListView.Items.Add do
          begin
            Caption := IntToStr(ListView1.Items.Count);
            SubItems.Add(Sheet.Cells[Satir, 1]);
            SubItems.Add(Sheet.Cells[Satir, 2]);
            SubItems.Add(Sheet.Cells[Satir, 3]);
            SubItems.Add(Sheet.Cells[Satir, 4]);
            SubItems.Add(Sheet.Cells[Satir, 5]);
            SubItems.Add(Sheet.Cells[Satir, 6]);
            SubItems.Add(Sheet.Cells[Satir, 7]);
            SubItems.Add(Sheet.Cells[Satir, 8]);
            Next;
          end;
        end;
        Screen.Cursor := crDefault;
        Excel.WorkBooks.Close;
        Excel.quit;
        Excel := Unassigned;
        Sheet := Unassigned;
      end;
    end;
  except
  end;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: iki farklı projede birinde çalış kod diğer projede hata veriyor

Mesaj gönderen mrmarman »

Merhaba.

- Sorun çektiğin veri ile ilintili olduğundan verdiğin kod ile bunu anlamak imkansız.

- Boş üçüncü bir proje oluştur ve bu kod yardımı ile aynı excel verisini almaya çalış. Sana sorunsalın çözümü hakkında vakit tasarrufu sağlar.
- Bu proje sana hakemlik edecektir.

- Eğer üçüncü projede hata almıyorsan sorunun projelerinden hata verende diyebilirsin. Daha da ötesi, hata veren projede bu excelden veri alma öncesi veya sonraso bir operasyon ( örneğin ListView'de eklenmemiş bir subitem'i istemek vs. ) gibi yerde hata arayabilirsin.
Resim
Resim ....Resim
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: iki farklı projede birinde çalış kod diğer projede hata veriyor

Mesaj gönderen dogan »

mrmarman yazdı:Merhaba.

- Sorun çektiğin veri ile ilintili olduğundan verdiğin kod ile bunu anlamak imkansız.

- Boş üçüncü bir proje oluştur ve bu kod yardımı ile aynı excel verisini almaya çalış. Sana sorunsalın çözümü hakkında vakit tasarrufu sağlar.
- Bu proje sana hakemlik edecektir.

- Eğer üçüncü projede hata almıyorsan sorunun projelerinden hata verende diyebilirsin. Daha da ötesi, hata veren projede bu excelden veri alma öncesi veya sonraso bir operasyon ( örneğin ListView'de eklenmemiş bir subitem'i istemek vs. ) gibi yerde hata arayabilirsin.

Hocam sorunu tespit ettim fakat çözüm bulamadım,
CustomDrawSubItem kaldırınca sorun çözülüyor ama CustomDrawSubItem iptal edemem guruplara göre renklendiriyorum, databaseden veri çekerken sorun yok ancak opendialog ile excelde yeni kayıt girişi yapınca hata veriyor. "length" destekledim oda olmadı...


Kod: Tümünü seç

procedure TForm.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if (Item.Index mod 2) = 0 then
  begin
    Sender.Canvas.Brush.Color := RGB(248, 248, 255);
  end
  else
  begin
    Sender.Canvas.Brush.Color := RGB(255, 255, 255);
  end;
  if Item.Selected then
  begin
    Sender.Canvas.Font.Color := RGB(238, 0, 0);
  end;
  if (length(Item.SubItems[5]) > 0) and (Item.SubItems[5] = 'total') then
  begin
    Sender.Canvas.Font.Color  := RGB(127, 27, 27);
  end;
  end;
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: iki farklı projede birinde çalış kod diğer projede hata veriyor

Mesaj gönderen thelvaci »

Bir yandan data doldururken diğer yandan boyama kodu çalıştığı için hata alıyorsunuzdur büyük ihtimalle. İlgili ListView'inize item eklemeden önce BeginUpdate; item ekleme işlemi bittikten sonra da EndUpdate çağrımı yaparsanız büyük ihtimalle düzelecektir.
Kullanıcı avatarı
badkursat
Üye
Mesajlar: 84
Kayıt: 03 Mar 2014 08:58

Re: iki farklı projede birinde çalış kod diğer projede hata veriyor

Mesaj gönderen badkursat »

Genelde bunu for döngüsünde veriyor. SSay-1 yapıp dene bence sorun ortadan kalkar.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: iki farklı projede birinde çalış kod diğer projede hata veriyor

Mesaj gönderen brs »

Benzer durumu bende yaşamıştım, thelvaci hocamın dedigini uygulayabilirsiniz sorununuz çözülür...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Cevapla