Kodumdaki hata nedir?

Merhabalar,

Bu videodakine benzer bir yazılım yapmaya çalışıyorum. Fakat bir hatam var. Çözebilmiş değilim. Videodan vb. kontrol ediyorum ama bulamadım.

(12) SQLite Kullanımı - QT Designer Kullanıcı Arayüzü - YouTube

Video bu.

Benim yazdığım kodlar ise:

baglan.py:

import sqlite3 as sql

from typing import final

def main():

    try:

        db = sql.connect("bilgiler.db")

        print("Veri tabanına bağlanıldı.")

    except:

        print("Bağlantı hatası !!!!!")

    finally:

        db.close()

if __name__ == "__main__":

    main()

tabloOlustur.py

import sqlite3 as sql

from typing import final

def main():

    try:

        db = sql.connect("Bilgiler.db")

        cal = db.cursor()

        sorg = "CREATE TABLE TBilgiler (urunno int, alacakkisiadsoyad txt, telno int, esya txt, parca txt, yapilacaklar txt, fiyat int)"

        cal.execute(sorg)

        print("Tablo olustu")

    finally:

        print("Tamam islem")

if __name__ == "__main__":

    main()

Arayuz.py

from PyQt5 import QtWidgets

from PyQt5.QtWidgets import QTableWidgetItem, QHeaderView

from Ui_tamir import Ui_Dialog

import sys

import os

import sqlite3 as sql

os.system("python Baglan.py")

os.system("python TabloOlustur.py")

global urunno, alacakkisiadsoyad, telno, esya, parca, yapilacaklar, fiyat

class Window(QtWidgets.QMainWindow):

    def __init__(self):

        super(Window, self).__init__()

        self.ui = Ui_Dialog()

        self.ui.setupUi(self)

        self.formYukle()

        self.ui.kaydetButon.clicked.connect(self.butonKaydetTiklandi)

        self.ui.silButon.clicked.connect(self.sil)

    def formYukle(self):

        self.ui.eklenenlerTablo.clear()

        self.ui.eklenenlerTablo.setColumnCount(7)

        self.ui.eklenenlerTablo.setHorizontalHeaderLabels(("Urun NO", "Ad-soyad", "Telefon NO", "Esya", "Parca", "Yapilacaklar", "Fiyat"))

        self.ui.eklenenlerTablo.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)

        db = sql.connect("bilgiler.db")

        cur = db.cursor()

        sorgu = "Select * from TBilgiler"

        cur.execute(sorgu)

        satirlar = cur.fetchall()

        self.ui.eklenenlerTablo.setRowCount(len(satirlar))

        for satirIndeks, satirVeri in enumerate(satirlar):

            for sutunIndeks, sutunVeri in enumerate(satirVeri):

                self.ui.eklenenlerTablo.setItem(satirIndeks, sutunIndeks, QTableWidgetItem(str(sutunVeri)))

    def butonKaydetTiklandi(self):

        urunno = self.ui.urunNoGiris.toPlainText()

        alacakkisiadsoyad = self.ui.urunNoGiris_2.toPlainText()

        telno = self.ui.telNoGiris.toPlainText()

        esya = self.ui.esyaGiris.toPlainText()

        parca = self.ui.parcaGiris.toPlainText()

        yapilacaklar = self.ui.yapilacaklarGiris.toPlainText()

        fiyat = self.ui.fiyatGiris.toPlainText()

        try:

            self.baglanti = sql.connect("bilgiler.db")

            self.c = self.baglanti.cursor()

            self.c.execute("INSERT INTO TBilgiler Values(?, ?, ?, ?, ?, ?, ?)", (urunno, alacakkisiadsoyad, telno, esya, parca, yapilacaklar, fiyat))

            self.baglanti.commit()

            self.c.close()

            print("Başarılı", "bilgiler başarıyla gönderildi")

        except:

            print("Hata", "Hata !!!!!!")

    def listeClick(self):

        self.ui.esyaGiris.setText(self.ui.eklenenlerTablo.item(self.ui.eklenenlerTablo.currentRow(), 0).text())

        self.ui.fiyatGiris.setText(self.ui.eklenenlerTablo.item(self.ui.eklenenlerTablo.currentRow(), 1).text())

        self.ui.parcaGiris.setText(self.ui.eklenenlerTablo.item(self.ui.eklenenlerTablo.currentRow(), 2).text())

        self.ui.telNoGiris.setText(self.ui.eklenenlerTablo.item(self.ui.eklenenlerTablo.currentRow(), 3).text())

        self.ui.urunNoGiris.setText(self.ui.eklenenlerTablo.item(self.ui.eklenenlerTablo.currentRow(), 4).text())

        self.ui.urunNoGiris_2.setText(self.ui.eklenenlerTablo.item(self.ui.eklenenlerTablo.currentRow(), 5).text())

        self.ui.yapilacaklarGiris.setText(self.ui.eklenenlerTablo.item(self.ui.eklenenlerTablo.currentRow(), 6).text())

    def sil(self):

        uruno = self.ui.urunNoGiris.toPlainText()

        

        self.baglanti = sql.connect("bilgiler.db")

        self.c = self.baglanti.cursor()

        self.c.execute("DELETE FROM TBilgiler where urunno = ?", (uruno, ))

        self.baglanti.commit()

        self.c.close()

        self.baglanti.close()

        print("Urun silindi")

        self.sil()

        self.formYukle()

def app():

    app = QtWidgets.QApplication(sys.argv)

    win = Window()

    win.show()

    sys.exit(app.exec_())

app()

Sorunlar:

  1. Videoda bir bilgi eklendiğinde direktmen listeye ekleniyor. Benim o ekleneni görebilmem için programı yeniden açmam gerek. Yani canlı olarak eklemiyor.

  2. Tablodan bilgi silinmiyor. Tablodan birini seçtikten sonra “Sil” butonuna basıyorum ve konsola “Urun silindi” diye spam atıyor ve ayrıca satır 86’da olan self.sil() kodunda hata veriyor.

Yardımcı olursanız sevinirim.

merhaba, iki yerdeki dosyaların ismi farklı, acaba bundan kaynaklı olabilir mi sorun?

1 Beğeni

Hocam onun görevi sadece birkaç kere çalışmaktı. Onun görevi bu program başka bilgisayara geçince görevi olur. Yani sorunun oradan olduğunu sanmıyorum. Zaten oluşan dosya adı bilgiler.db

@Empera0 @aib @sonsuz Üstadlarım bilginiz var mı?

Kodların aynı olduğundan eminsen python sürümüyle alakalı olabilir. Vaktim yok olunca yazarım o zamana kadar çözerler. İmportları falan kontrol et

1 Beğeni

Tamamdır bekliyorum yanıtınızı. Teşekkürler.

Hocam yanıt veren olmadı. Bilginiz varsa, paylaşırsanız sevinirim :slight_smile: Özür dilerim gıcık ettiysem.

Anlayabildiğim kadarıyla sorun burada:

def sil(self):

        uruno = self.ui.urunNoGiris.toPlainText()

        

        self.baglanti = sql.connect("bilgiler.db")

        self.c = self.baglanti.cursor()

        self.c.execute("DELETE FROM TBilgiler where urunno = ?", (uruno, ))

        self.baglanti.commit()

        self.c.close()

        self.baglanti.close()

        print("Urun silindi")

        self.sil()

        self.formYukle()

class’ı neden tekrar referans olarak alıyoruz? Silip deneyebilirsin. Başka bir problem görmedim.

Hocam o benim de aklıma geldi. Yaptım ve spam vs vermedi, hata da vermedi. Ama veritabanından silmedi.

  1. satir bos

Nasil bir hata?

sil kendini cagiriyor gibi gozukuyor. Sonsuza kadar.

Sadece database’e yaziyorsun gibi gozukuyor. Yaninda listeye de eklemen, veya database’e yazdiktan sonra listeyi database’den geri okuman (acilistaki gibi) lazim.

Evet orayı sildim. Şimdi bu spam atma çözüldü, ve hata da vermiyor. Şimdiki tek sorun bilgileri silmemesi.

Hocam başta databaseye yazmama sorunu yok. Başta bilgileri textbox’a yazıyorum ve kaydediyorum, sorun olmuyor, kaydediyor. Yeni okunmaya gerek yok sanırım.

Çözüm öneriniz var mı?

Bunun disinda yok.

Buna gelen cevabi anlamadim :confused:

Peki bunu nasıl yapabilirim? Kafam çok karıştı kusura bakmayın.

Sorunun bu kodlarda olduğunu düşünüyorum. Silindi diyor ama silmiyor.

        uruno = self.ui.urunNoGiris.toPlainText()

        
        self.baglanti = sql.connect("bilgiler.db")
        self.c = self.baglanti.cursor()
        self.baglanti.execute("DELETE FROM TBilgiler WHERE urunno = ?", (uruno,))
        self.baglanti.commit()
        self.c.close()
        self.baglanti.close()
        print("Urun silindi")

Form yukleyi tekrardan çağıracaksın Sil metodunun sonunda. Tekrardan yenileyecektir.

Hocam sorun bu değil ki?

        self.sil()
        self.formYukle()

Bu şekilde düzelttim. Sorun tablodan seçilenin silinmemesi. Ayrıca self.sil() ekledikten sonra sürekli bayağı bir spam atıp hata veriyor. Hata olarak self.sil()’i veriyor.

Hata vermesinin sebebi tekrardan fonksiyona dönmesi olarak görüyorum ben hala. Bu ifadenin kodda olmaması lazım. o şekilde dene.