KütüphaneDenemesi

Merhaba, sqlite’a kitap adı eklerken var olan kitap olduğu zaman “Bu Kitap Mevcuttur” tarzı bir messegebox oluşmasını istiyorum fakat nasıl yapılacağını bulamadım.

'''python
def kitap_yazar_ekle(self):
    a = self.ui.lineEdit_kitap_adi.text()
    b = self.ui.lineEdit_yazar_adi.text()
    c = self.ui.lineEdit_yayin_evi.text()
    d=self.ui.dateEdit.text()
    if (a and b and c and d)=="":
        QMessageBox.about(self,"Bilgilendirme","Lütfen Boş Alanları Doldurunuz")
    else:
        cursor.execute("INSERT INTO KitaplarListesi (KitapAdı, YazarAdı, YayınEvi, EklendiğiTarih) VALUES (?,?,?,?)", (a, b, c,d))
        con.commit()
        self.ui.statusbar.showMessage("Kitap Listenize Başarılı Bir Şekilde Eklenmiştir",self.süre)
        self.ui.statusbar.setStyleSheet("color: rgb(255,0,0)")
        self.ui.lineEdit_kitap_adi.clear()
        self.ui.lineEdit_yazar_adi.clear()
        self.ui.lineEdit_yayin_evi.clear()

‘’’

Kodun duzgun gozukmuyor (Gönderilerdeki kod görünümü hakkında) ama gozukse de calisacak gibi degil; QMessageBox ve cursor gibi var olmayan isimler kullanilmis. (Gerci sorun degil cunku fonksiyon cagrilmiyor bile!)

Kitabi belirleyen kolonlara UNIQUE constraint’i ekleyebilirsin.

Siz kodların tamamını istiyorsunuz sanırım. Bütün kodlar ortalama 650 satırdan oluşuyor, bu da anlam kargaşasına neden olur diye yazmadım. Evet kodlarım düzgün görünmüyor çünkü tam olarak nasıl düzgün görünür bilemediğim için yazamadım. Fonksiyonlar bir pushButton’a entegre, o yüzden çağırmadım.
Vakit ayırıp çözüm konusunda yardımcı olduğunuz için teşekkür ederim yine de. Allah razı olsun.

“Anlam kargasasina neden olmasin” diye 650 satirdan asagi indirilen kod cogu zaman kisinin kendi problemini cozmesine veya en azindan daha iyi anlamasina neden oluyor, o yuzden sorudan bagimsiz olarak tavsiye ediyorum.

Verilen cevaplarin da calisan kod olmasi gibi bir yan etkisi de var.

Ilk cozum onerim (UNIQUE) hala en kolay ve gecerli bir yontem olmakla beraber, ikincisini de yazabilirim:

INSERT’ten once kitap kaydi var mi diye bakmak:
SELECT TRUE WHERE EXISTS (SELECT * FROM KitaplarListesi WHERE KitapAdi = ?);
veya
SELECT COUNT(*) > 0 FROM KitaplarListesi Where KitapAdi = ?

Bu arada su da yanlis:

a, b, c ve d’yi bool’a cevirip, and’leyip, sonucun (True veya False) "" olup olmadigina bakiyor. (Hic bir zaman degil)

Dogrusu a and b and c and d veya (a != "") and (b != "") and (c != "") and (d != "").

Anladım, çok teşekkür ederim vakit ayırıp çözüm için önerilerde bulunduğunuz için. Tekrardan Allah razı olsun emeğinize sağlık