ListBox Problem...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

ListBox Problem...

Mesaj gönderen pma »

Merhaba Delphide bir film otomasyonu proje ödevim var.

veritabanım paradox.

veritabanının tur_table daki Tur_Ad alanından gelen film türlerin combo boxtan seçip listbox a ekletiyorum

kaydet e basınca listboxtaki bilgileri filmler_table daki Tur alanına gitmesini istiyorum


yardımlarınız için teşekkürler
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: ListBox Problem...

Mesaj gönderen pma »

Cevabı Bilen Kimse Yokmu Arkadaşlar Acil Destek

ListBox içindeki verileri paradox veritanımdaki "filmler_table" tablosundaki "Tur" alanıma nasıl atabilirim

table1.FieldByName('Tur').AsString := ListBox1.Items; (bu kodu yazdığımda "Incompatible types String And TString" hatası alıyorum)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: ListBox Problem...

Mesaj gönderen mrmarman »

Bilmeyen yoktur. Sadece vakit meselesi.

- ListBox içerisinde birden fazla veri olduğuna göre bu veriyi tek tek veritabanına atmalısın. Kümülatif olarak olmaz.
- Verdiği hatayı basit İngilizce Türkçe çevrimde bile tip uyuşmazlığı olduğunu görebilirsin. Diyor ki TStrings ile String uyumlu değil. Bu tip hata ile karşılaştığında bu tiplerin ne olduğuna bakarak yorumlayabilirsin.

- Şimdi gelelim sorunun çözümüne...

Paradox veritabanı kullandım diyorsan en basit haliyle aşağıdaki şekilde bir döngü ile halldebilirsin.

Kod: Tümünü seç

Var
  i : Integer;
begin
  for i := 0 to ListBox1.Items.Count - 1 do
  begin
    table1.Append;
    //...
    //...
    table1.FieldByName('Tur').AsString := ListBox1.Items[i];
    //...
    //...
    table1.Post;
  end;
end;
Resim
Resim ....Resim
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: ListBox Problem...

Mesaj gönderen pma »

Kusura bakmayın tam hakim değilim belli başlı yerleri biliyorum delphi de sizide uğraştırıyorum

Kodu Yazdım 2 item çekmiyor

1 tane koydum sonra çekti veritabanıma yazmış ama sonra bir daha denedim çekmedi hata ver (Key Violation) diyor

bide Bu aralara açıklama satır değillmi noktalı yerlere bişey gelimicek
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: ListBox Problem...

Mesaj gönderen mrmarman »

Merhaba.

- Hepimiz bir yerden başladık, kaygınızı anlıyorum.

- İlgili tabloda sadece 'Tur' isimli alan yoktur diye değerlendirdim. Diğer alanları da aynı blokta girersiniz diye düşündüm.

- "Key Violation" hatası anahtar olarak tanımlamış olduğunuz alan hangisi ise oraya mutlaka farklı değerler ataması yapmayı ihmal ettiğinizde karşılaşırsınız.

- Örneğin "Key Field" olarak SiraNo olsun. Bu "SiraNo" hanesine iki defa üst üste aynı kayıt içeriği giremezsiniz. Boş geçtiğiniz zaman da NULL dediğimiz bir değer kendiliğinden atanacağından iki defa ard arda NULL da atanmasını istemez. Sizde sadece Tur alanını koyduğunuza göre ikinci kayıtta yine mükerrer NULL değer ataması yapacağından hataya düşmüş. Sadece iki kayıt görüyorum demiştiniz ya, demek ki daha önce elle kayıt girişi yapmış ama anahtar alana en az bir değer girmiş olmalısınız ki en azından iki kayıt görme şansınız olmuş. Senaryo böyle.

- Şimdi çözüme gelelim. Anahtar Alan (KeyField) olarak tanımlamış olduğunuz alan hangisi ise onu mutlaka girmeniz lazım. Genelde AUTOINC alan tabir edilen kendiliğinden artan alanlar için uygun bir türdür ve de her tabloda en az bir anahtar alan bulunması faydalıdır. Hem mükerrer kaydı engeller, hem de tablolar arası ilişki kurmak gerektiği durumlarda iyi birer referans alanı olarak rasyonel bir kullanım imkanı sunar.

- Size verdiğim örnek aynen geçerlidir. Sadece POST etmeden önce

Kod: Tümünü seç

  table1.FieldByName('SiraNo').AsInteger := i; // Örneğin KeyField bu ise, boş tabloda sorun çıkarmaz ama ikinci defa çalışırsa KeyViolation verir. 
  table1.FieldByName('Tur').AsString := ListBox1.Items[i];
gibi bir yapı kurmalısınız.
Resim
Resim ....Resim
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: ListBox Problem...

Mesaj gönderen pma »

Bu Kodla İyi Oldu Ama ListBox ta Seçtiğim Herşeyi VeriTabanımda Alt Alta sıra Açarak Yazıyor ListBoxtaki Bütün Film Türlerini Yanyana Bir Satırda Yazması Benim için Önemli Olan

Bir Film İçin Örnek (Aksiyon/Bilim Kurgu/Belgesel)

https://www.dropbox.com/s/h4602oesf2tsorc/Deneme-2.7z
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: ListBox Problem...

Mesaj gönderen mrmarman »

O zaman başa dönüyoruz, ilk yazdığın soru için cevap

Kod: Tümünü seç

ListBox1.Items.Text
şeklinde sonuna .text ifadesini eklemen kafi.

Liste halindeki bir veriyi (/) şeklinde ayraçlar ile ayırmak istiyorsan bir döngü kurup, her satırı yanında (/) ayracı olacak şekilde bir String ifadeye atadıktan sonra veritabanına bu değişkeni kayıt altına alabilirsin.

Kod: Tümünü seç

Var
  i : Integer;
  strTurler : String;
begin
  strTurler := '';
  for i := 0 to ListBox1.Items.Count - 1 do
  begin
    if strTurler = '' then strTurler := ListBox1.Items[i]
                      else strTurler := strTurler + ' / ' + ListBox1.Items[i];
  end;
  Table1.Edit;
  Table1.FieldByName('Tur').AsString := strTurler;
  Table1.Post;
end;
Resim
Resim ....Resim
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: ListBox Problem...

Mesaj gönderen pma »

Verdiğiniz Kod İşe Yaradı Sorularıma Zahmet Edip Cevap Verdiniz İçin Çok Teşekkür Ederim...
Cevapla