ListBox Problem...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
ListBox Problem...
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
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
Re: ListBox Problem...
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)
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)
Re: ListBox Problem...
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.
- 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;
Re: ListBox Problem...
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
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
Re: ListBox Problem...
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
gibi bir yapı kurmalısınız.
- 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];
Re: ListBox Problem...
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
Bir Film İçin Örnek (Aksiyon/Bilim Kurgu/Belgesel)
https://www.dropbox.com/s/h4602oesf2tsorc/Deneme-2.7z
Re: ListBox Problem...
O zaman başa dönüyoruz, ilk yazdığın soru için cevap ş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ç
ListBox1.Items.Text
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;
Re: ListBox Problem...
Verdiğiniz Kod İşe Yaradı Sorularıma Zahmet Edip Cevap Verdiniz İçin Çok Teşekkür Ederim...