Pyinsteller ile oluşturdugum exe dosyam(sqlite3) bağlantılı işlem yapmak istedigimde kapanıyor

arkadaşlar iyi günler pqt5 ile arayüz tasarımı yaptım(arac bilgileri girilen) ve sqlite3 ile databse olusturup girilen verileri sakladım olusturmuş oldugum arayüzündede listeledim IDE calıştırdıgımda yapmak istedigim tüm işlemleri yapabiliyorum araç ekleme silme güncelleme vs gibi.

olusturmuş oldugum arayüzü pyinstaller ile exe dosyasına dönüştürdüm exe dosyam oluştu ve gayet güzel açılıyor aryüzüm vs geliyor database dosyam olusuyor ama işlem yapmak istdeigimde örn: ekledigim bir aracı silmek istedigimde program kapanıyor tekrar actıgımda silmiş olarak gösteriyor yani problemim işlem yaptıgımda programın kapanması.
böyle bi sorun ile karşılasan varmı programlamada yeni sayılırım şimdiden teşekkürler :slight_smile:

bkz: Soru Sorarken Sıkça Düşülen Hatalar #5

"
#-----------MODÜLDAHİLİ---------#
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import*
from galeri import*
from hakkında1 import*
#-------------------------------#

#--------PENCERE OLUŞTURMA------#

uygulama=QApplication(sys.argv)
anapen=QMainWindow()
dosya=Ui_MainWindow()
dosya.setupUi(anapen)
anapen.show()

#--------Hakkında------#

hakkında=QDialog()
dosya1=Ui_HAKKINDA()
dosya1.setupUi(hakkında)

#------------sqlite3-------------------#

import sqlite3

bağlantı=sqlite3.connect(“autogaleri.db”)
işlem=bağlantı.cursor()
sorgutable=(“CREATE TABLE IF NOT EXISTS GALERİ(
Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
AraçAdı TEXT NOT NULL,
AraçRengi TEXT NOT NULL,
AraçPlaka TEXT NOT NULL,
AraçKM TEXT NOT NULL,
AraçModel TEXT NOT NULL,
VitesTipi TEXT NOT NULL,
YakıtTürü TEXT NOT NULL,
ÇekişTipi TEXT NOT NULL,
AraçFiyat TEXT NOT NULL,
AraçBilgisi TEXT NOT NULL)”)

işlem.execute(sorgutable)
bağlantı.commit()

#------------ARAÇ EKLEME FONKSİYONU-----------#

def KAYDET():
ad=dosya.arac_adi.text()
renk=dosya.arac_renk.text()
plaka=dosya.arac_plaka.text()
km=dosya.arac_km.text()
model=dosya.arac_model.text()
vites=dosya.cmb_vitestipi.currentText()
yakıt=dosya.cmb_yakit.currentText()
çekiş=dosya.cmb_cekis.currentText()
fiyat=dosya.arac_fiyat.text()
bilgi=dosya.arac_bilgiler.toPlainText()

işlem.execute("INSERT INTO GALERİ(AraçAdı,AraçRengi,AraçPlaka,AraçKM,AraçModel,VitesTipi,YakıtTürü,ÇekişTipi,AraçFiyat,AraçBilgisi)VALUES(?,?,?,?,?,?,?,?,?,?)",(ad,renk,plaka,km,model,vites,yakıt,çekiş,fiyat,bilgi))
# bağlantı.commit()

LISTELE()

#-------------ARAÇBİLGİLİSTELEME------------#

def LISTELE():

dosya.arac_bilgileri.clear()
dosya.arac_bilgileri.setHorizontalHeaderLabels(("NO","ARAÇ","RENK","PLAKA","KM","MODEL","VİTES","YAKIT","ÇEKİŞ","FİYAT","DETAYI"))
dosya.arac_bilgileri.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

işlem.execute("SELECT * FROM GALERİ")
for Satırındex,Satırveri in enumerate(işlem):
    for Sutunındex,Sutunveri in enumerate(Satırveri):
        dosya.arac_bilgileri.setItem(Satırındex,Sutunındex,QTableWidgetItem(str(Sutunveri)))
dosya.arac_adi.clear()
dosya.arac_renk.clear()
dosya.arac_plaka.clear()
dosya.arac_km.clear()
dosya.arac_model.clear()
dosya.cmb_vitestipi.setCurrentIndex(-1)
dosya.cmb_yakit.setCurrentIndex(-1)
dosya.cmb_cekis.setCurrentIndex(-1)
dosya.arac_fiyat.clear()
dosya.arac_bilgiler.clear()

işlem.execute("SELECT COUNT (*) FROM GALERİ")
arabasayı=işlem.fetchone()
dosya.arac_sayisi.setText(str(arabasayı[0]))

LISTELE()

#-----------Araç silme işlemi---------#

def SIL():
cevap=QMessageBox.question(anapen,“SİL!”,“Seçili Araç silinecek onay veriyormusunuz?”,
QMessageBox.Yes | QMessageBox.No)
if cevap==QMessageBox.Yes:
secili=dosya.arac_bilgileri.selectedItems()
a=secili[1].text()
try:
işlem.execute(“DELETE FROM GALERİ WHERE AraçAdı=’%s’” %(a))
# bağlantı.commit()
LISTELE()
dosya.statusbar.showMessage(“KAYIT SİLME İŞLEMİ BAŞARILI”,10000)

    except Exception as Hata:
        dosya.statusbar.showMessage("Şöyle bir hata ile karşılaşıldı:"+str(Hata))
else:
    
    dosya.statusbar.showMessage("KAYIT SİLME İŞLEMİ İPTAL EDİLDİ.",10000)  

#---------ARAÇ ARAMA İŞLEMİ-----------#

def ARA():
arama1=dosya.arac_adi.text()
arama2=dosya.arac_plaka.text()
arama3=dosya.arac_model.text()

işlem.execute("SELECT * FROM GALERİ WHERE AraçAdı=? OR AraçPlaka=? OR AraçModel=? OR (AraçAdı=? AND AraçPlaka=?)",(arama1,arama2,arama3,arama1,arama2))
# bağlantı.commit()
dosya.arac_bilgileri.clear()
for Satırındex,Satırveri in enumerate(işlem):
    for Sutunındex,Sutunveri in enumerate(Satırveri):
        dosya.arac_bilgileri.setItem(Satırındex,Sutunındex,QTableWidgetItem(str(Sutunveri)))

#---------TABLE WİDGET VERİ AKTARIMI----------#

def DOLDUR():

secili=dosya.arac_bilgileri.selectedItems()

dosya.arac_adi.setText(secili[1].text())
dosya.arac_renk.setText(secili[2].text())
dosya.arac_plaka.setText(secili[3].text())
dosya.arac_km.setText(secili[4].text())
dosya.arac_model.setText(secili[5].text())

dosya.cmb_vitestipi.setCurrentText(secili[6].text())
dosya.cmb_yakit.setCurrentText(secili[7].text())
dosya.cmb_cekis.setCurrentText(secili[8].text())

dosya.arac_fiyat.setText(secili[9].text())
dosya.arac_bilgiler.setText(secili[10].text())

#-----------------ARAÇ GÜNCELLEME------------#

def GUNCELLE():

cevap=QMessageBox.question(anapen,"GÜNCELLE","Araç güncellenecek onay veriyormusunuz?",   \
                                                    QMessageBox.Yes | QMessageBox.No)
if cevap==QMessageBox.Yes:
    
    try:
        secili=dosya.arac_bilgileri.selectedItems()
        Id=int(secili[0].text())
        ad=dosya.arac_adi.text()
        renk=dosya.arac_renk.text()
        plaka=dosya.arac_plaka.text()
        km=dosya.arac_km.text()
        model=dosya.arac_model.text()
        vites=dosya.cmb_vitestipi.currentText()
        yakıt=dosya.cmb_yakit.currentText()
        çekiş=dosya.cmb_cekis.currentText()
        fiyat=dosya.arac_fiyat.text()
        bilgi=dosya.arac_bilgiler.toPlainText()
        
        işlem.execute("UPDATE GALERİ SET AraçAdı=?,AraçRengi=?,AraçPlaka=?,AraçKM=?,AraçModel=?,VitesTipi=?,YakıtTürü=?,ÇekişTipi=?,AraçFiyat=?,AraçBilgisi=? WHERE Id=?",(ad,renk,plaka,km,model,vites,yakıt,çekiş,fiyat,bilgi,Id))
        # bağlantı.commit()
        
        LISTELE()
       
    except Exception as Hata:
        dosya.statusbar.showMessage("HATA:"+str(Hata))
else:
    dosya.statusbar.showMessage("Güncelleme İptal Edildi.",1000)

def HAKKINDA():
hakkında.show()

#------Sıgnal_sloat bağlantısı-------#
dosya.btn_kaydet.clicked.connect(KAYDET)
dosya.btn_listele.clicked.connect(LISTELE)
dosya.btn_sil.clicked.connect(SIL)
dosya.btn_ara.clicked.connect(ARA)
dosya.arac_bilgileri.itemSelectionChanged.connect(DOLDUR)
dosya.btn_gncelle.clicked.connect(GUNCELLE)
dosya.hakkinda_bilgi.triggered.connect(HAKKINDA)

sys.exit(uygulama.exec_())

"

2 adet dosya daha var qt desinger ile oluşturmuş oldugum arayüz dosyam py uzantısına çevirdim ve ana dosyama import ettim

bkz: Soru Sorarken Sıkça Düşülen Hatalar #1

#-----------MODÜLDAHİLİ---------#
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import*
from galeri import*
from hakkında1 import*
#-------------------------------#

#--------PENCERE OLUŞTURMA------#

uygulama=QApplication(sys.argv)
anapen=QMainWindow()
dosya=Ui_MainWindow()
dosya.setupUi(anapen)
anapen.show()


#--------Hakkında------#

hakkında=QDialog()
dosya1=Ui_HAKKINDA()
dosya1.setupUi(hakkında)




#------------sqlite3-------------------#

import sqlite3


bağlantı=sqlite3.connect("autogaleri.db")
işlem=bağlantı.cursor()
sorgutable=("CREATE TABLE IF NOT EXISTS GALERİ(                 \
             Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,   \
             AraçAdı TEXT NOT NULL,                         \
             AraçRengi TEXT NOT NULL,                      \
             AraçPlaka TEXT NOT NULL,                          \
             AraçKM  TEXT NOT NULL,                            \
             AraçModel TEXT NOT NULL,                          \
             VitesTipi TEXT NOT NULL,                          \
             YakıtTürü TEXT NOT NULL,                          \
             ÇekişTipi TEXT NOT NULL,                          \
             AraçFiyat TEXT NOT NULL,                           \
             AraçBilgisi TEXT NOT NULL)")    

işlem.execute(sorgutable)
bağlantı.commit()

#------------ARAÇ EKLEME FONKSİYONU-----------#
 
def KAYDET():
    ad=dosya.arac_adi.text()
    renk=dosya.arac_renk.text()
    plaka=dosya.arac_plaka.text()
    km=dosya.arac_km.text()
    model=dosya.arac_model.text()
    vites=dosya.cmb_vitestipi.currentText()
    yakıt=dosya.cmb_yakit.currentText()
    çekiş=dosya.cmb_cekis.currentText()
    fiyat=dosya.arac_fiyat.text()
    bilgi=dosya.arac_bilgiler.toPlainText()
    
    işlem.execute("INSERT INTO GALERİ(AraçAdı,AraçRengi,AraçPlaka,AraçKM,AraçModel,VitesTipi,YakıtTürü,ÇekişTipi,AraçFiyat,AraçBilgisi)VALUES(?,?,?,?,?,?,?,?,?,?)",(ad,renk,plaka,km,model,vites,yakıt,çekiş,fiyat,bilgi))
    bağlantı.commit()
    
    LISTELE()
    
#-------------ARAÇBİLGİLİSTELEME------------#

def LISTELE():
    
    dosya.arac_bilgileri.clear()
    dosya.arac_bilgileri.setHorizontalHeaderLabels(("NO","ARAÇ","RENK","PLAKA","KM","MODEL","VİTES","YAKIT","ÇEKİŞ","FİYAT","DETAYI"))
    dosya.arac_bilgileri.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
    
    işlem.execute("SELECT * FROM GALERİ")
    for Satırındex,Satırveri in enumerate(işlem):
        for Sutunındex,Sutunveri in enumerate(Satırveri):
            dosya.arac_bilgileri.setItem(Satırındex,Sutunındex,QTableWidgetItem(str(Sutunveri)))
    dosya.arac_adi.clear()
    dosya.arac_renk.clear()
    dosya.arac_plaka.clear()
    dosya.arac_km.clear()
    dosya.arac_model.clear()
    dosya.cmb_vitestipi.setCurrentIndex(-1)
    dosya.cmb_yakit.setCurrentIndex(-1)
    dosya.cmb_cekis.setCurrentIndex(-1)
    dosya.arac_fiyat.clear()
    dosya.arac_bilgiler.clear()
    
    işlem.execute("SELECT COUNT (*) FROM GALERİ")
    arabasayı=işlem.fetchone()
    dosya.arac_sayisi.setText(str(arabasayı[0]))

LISTELE() 


#-----------Araç silme işlemi---------#

def SIL():
    cevap=QMessageBox.question(anapen,"SİL!","Seçili Araç silinecek onay veriyormusunuz?",   \
                                                        QMessageBox.Yes | QMessageBox.No)
    if cevap==QMessageBox.Yes:
        secili=dosya.arac_bilgileri.selectedItems()
        a=secili[1].text()
        try: 
            işlem.execute("DELETE FROM  GALERİ WHERE AraçAdı='%s'" %(a))
            bağlantı.commit()
            LISTELE()    
            dosya.statusbar.showMessage("KAYIT SİLME İŞLEMİ BAŞARILI",10000) 
        except Exception as Hata:
            dosya.statusbar.showMessage("Şöyle bir hata ile karşılaşıldı:"+str(Hata))
    else:
        
        dosya.statusbar.showMessage("KAYIT SİLME İŞLEMİ İPTAL EDİLDİ.",10000)  
       
        
#---------ARAÇ ARAMA İŞLEMİ-----------#

def ARA():
    arama1=dosya.arac_adi.text()
    arama2=dosya.arac_plaka.text()
    arama3=dosya.arac_model.text()
    
    işlem.execute("SELECT * FROM GALERİ WHERE AraçAdı=? OR AraçPlaka=? OR AraçModel=? OR (AraçAdı=? AND AraçPlaka=?)",(arama1,arama2,arama3,arama1,arama2))
    bağlantı.commit()
    dosya.arac_bilgileri.clear()
    for Satırındex,Satırveri in enumerate(işlem):
        for Sutunındex,Sutunveri in enumerate(Satırveri):
            dosya.arac_bilgileri.setItem(Satırındex,Sutunındex,QTableWidgetItem(str(Sutunveri)))

    
#---------TABLE WİDGET VERİ AKTARIMI----------#

def DOLDUR():
     
    secili=dosya.arac_bilgileri.selectedItems()
    
    dosya.arac_adi.setText(secili[1].text())
    dosya.arac_renk.setText(secili[2].text())
    dosya.arac_plaka.setText(secili[3].text())
    dosya.arac_km.setText(secili[4].text())
    dosya.arac_model.setText(secili[5].text())
    
    dosya.cmb_vitestipi.setCurrentText(secili[6].text())
    dosya.cmb_yakit.setCurrentText(secili[7].text())
    dosya.cmb_cekis.setCurrentText(secili[8].text())
    
    dosya.arac_fiyat.setText(secili[9].text())
    dosya.arac_bilgiler.setText(secili[10].text())
    
#-----------------ARAÇ GÜNCELLEME------------#

def GUNCELLE():
    
    cevap=QMessageBox.question(anapen,"GÜNCELLE","Araç güncellenecek onay veriyormusunuz?",   \
                                                        QMessageBox.Yes | QMessageBox.No)
    if cevap==QMessageBox.Yes:
        
        try:
            secili=dosya.arac_bilgileri.selectedItems()
            Id=int(secili[0].text())
            ad=dosya.arac_adi.text()
            renk=dosya.arac_renk.text()
            plaka=dosya.arac_plaka.text()
            km=dosya.arac_km.text()
            model=dosya.arac_model.text()
            vites=dosya.cmb_vitestipi.currentText()
            yakıt=dosya.cmb_yakit.currentText()
            çekiş=dosya.cmb_cekis.currentText()
            fiyat=dosya.arac_fiyat.text()
            bilgi=dosya.arac_bilgiler.toPlainText()
            
            işlem.execute("UPDATE GALERİ SET AraçAdı=?,AraçRengi=?,AraçPlaka=?,AraçKM=?,AraçModel=?,VitesTipi=?,YakıtTürü=?,ÇekişTipi=?,AraçFiyat=?,AraçBilgisi=? WHERE Id=?",(ad,renk,plaka,km,model,vites,yakıt,çekiş,fiyat,bilgi,Id))
            bağlantı.commit()
            
            LISTELE()
           
        except Exception as Hata:
            dosya.statusbar.showMessage("HATA:"+str(Hata))
    else:
        dosya.statusbar.showMessage("Güncelleme İptal Edildi.",1000)
        
def HAKKINDA():
    hakkında.show()



#------Sıgnal_sloat bağlantısı-------#
dosya.btn_kaydet.clicked.connect(KAYDET)
dosya.btn_listele.clicked.connect(LISTELE)
dosya.btn_sil.clicked.connect(SIL)    
dosya.btn_ara.clicked.connect(ARA)
dosya.arac_bilgileri.itemSelectionChanged.connect(DOLDUR)    
dosya.btn_gncelle.clicked.connect(GUNCELLE)
dosya.hakkinda_bilgi.triggered.connect(HAKKINDA)

sys.exit(uygulama.exec_())                   



O zaman commit’e kadar calistiklarini varsayabiliriz. Sorun muhtemelen LISTELE’de. exe yapmadan calistirinca ne oluyor?

Yapilan exe’nin ciktisi (stdout, stderr) nerede? Orada programin neden kapandigina dair bilgi (e.g. exception mesaji, stack trace) bulabiliriz muhtemelen.

O da olmadi, programin muhtelif yerlerine bir dosyaya (veya bir tabloya) yazi yazdiran log satirlari ekleyip nerede patladigini bulmak lazim.

exe dönüşümü olmadan ide de çalıştırdıgımda tüm fonksiyonlar sağlıklı bir şekilde çalışıyor,sil fonksiyonun belirli yerlerine log satırı ekliyorum ve exe dönüşümü yapıyorum sil işleminden sonra commit bölümüne kadar sağlıklı çalısıyor ancak LİSTELE()'de takılıyor.

beni düşündüren şey araç kaydet işlemimdede LİSTELE() var exe dosyamda istedigim kadar araç kaydedbiliyorum bir problem cıkarmıyor sql database işliyor SİL-GÜNCELLE-LİSTELE-ARA bölümleri sıkıntılı

#------------ARAÇ EKLEME FONKSİYONU-----------#
 
def KAYDET():
    ad=dosya.arac_adi.text()
    renk=dosya.arac_renk.text()
    plaka=dosya.arac_plaka.text()
    km=dosya.arac_km.text()
    model=dosya.arac_model.text()
    vites=dosya.cmb_vitestipi.currentText()
    yakıt=dosya.cmb_yakit.currentText()
    çekiş=dosya.cmb_cekis.currentText()
    fiyat=dosya.arac_fiyat.text()
    bilgi=dosya.arac_bilgiler.toPlainText()
    
    işlem.execute("INSERT INTO GALERİ(AraçAdı,AraçRengi,AraçPlaka,AraçKM,AraçModel,VitesTipi,YakıtTürü,ÇekişTipi,AraçFiyat,AraçBilgisi)VALUES(?,?,?,?,?,?,?,?,?,?)",(ad,renk,plaka,km,model,vites,yakıt,çekiş,fiyat,bilgi))

    bağlantı.commit()
    LISTELE()  **KAYDET FONKSİYONUNUN BU BÖLÜMÜNDEN BAHSEDİYORUM**
   

exe olusturduktan sonra gelen klasörler uygulamam dist içinde

Exe olusturduktan sonra exe’nin ciktisini gorebilmek lazim:

Evet, ben de bunu dedim. LISTELE’nin neresinde takildigini gorebilmek icin iki de cozum onerdim, bir tanesi bu. Digeri database’e “su satirdayim”, “bu satirdayim” gibi kayitlar eklemek.

1 Beğeni