Tabella database

di il
8 risposte

Tabella database

Ho un database con una tabella di 24campi. Fino a qui nessun problema.
Ho rifatto la tabella, ma con 29 campi me ne scrive sempre 24.
Forse c'è un limite nel numero dei campi? Grazie

8 Risposte

  • Re: Tabella database

    Come scrivi scusa?
  • Re: Tabella database

    Sti ""ziovinastri""

    Deve essere l'eta: ormai i ""ziovini"" leggono nella mente e trasmettono il pensiero

    I "Veri Programmatori" di una volta non riescono piu' a starci dietro
  • Re: Tabella database

    Mydb = sqlite3.connect(PathAll)
    Kampi = ["Id","Comune","Clas","Zon","Cod","Catap","Vaniap","Valoap","Costap","Catga","Supga","Valoga","Costga","Mesi","Poss","Aliap","Aliga","Molt",
    "Det","Imuap","Imuga","Imutot","Imu50","Imu25","Data"]
    mydb .execute("CREATE TABLE IF NOT EXISTS TabImu (id INTEGER PRIMARY KEY,\
    Comune text, Clas text,Zon text,Cod text,Catap text,Vaniap real,Valoap real,Costap real,\
    Catga text,Supga real,Valoga real,Costga real,Mesi real,Poss real,\
    Aliap real,Aliga real,Molt real,Det real,Imuap real,Imuga real,Imutot real,Imu50 real,Imu25 real,Data text);")
    Questo funziona alla Perfezione, ma se aggiungo altri quattro(4) campi

    Kampi = ["Id","Comune","Clas","Zon","Cod","Catap","Vaniap","Valoap","Costap","Catga","Supga","Valoga","Costga","Mesi","Poss","Aliap","Aliga","Molt",
    "Det","Imuap","Imuga","Imutot","Imu50","Imu25","Data","Pio","Puo","Poo","Pao",]
    provola.execute("CREATE TABLE IF NOT EXISTS TabImu (id INTEGER PRIMARY KEY,\
    Comune text, Clas text,Zon text,Cod text,Catap text,Vaniap real,Valoap real,Costap real,\
    Catga text,Supga real,Valoga real,Costga real,Mesi real,Poss real,\
    Aliap real,Aliga real,Molt real,Det real,Imuap real,Imuga real,Imutot real,Imu50 real,Imu25 real,Data text,Pio text,Puo text,Poo text,Pao text);")
    Così non funziona. Vedo sempre fino a "Data", come prima. Sempre 24 Campi (+0 indice)
    Ho provato a riscrivere il tutto in altro file .py, ma idem come solpra.

    Carissimo "migliorabile" forse sei triestino da come scrivi ""ziovini"". Io sono toscano ed ho 79 anni e mi sono appassionato a questo linguaggio .Lo 'pratico' come passatempo fino, spero, alla fine dei miei pochi anni che mi restano, quindi sapendo benissimo di non essere un "Vero Programmatori", mi sono rivolto a questo sito per avere delle risposte (se ce ne fossero). Quindi se si ha la pazienza e la volontà di rispondermi, anzichè snobbarmi, ringrazio altrimenti grazie ugualmente e arrivederci.

    "oregon" mi ha risposto "Come scrivi scusa?" Credo di avere scritto in italiano. I Campi di una tabella sono le "colonne" di cui si compone la tabella stessa. mentre i record sono le righe che sono la sequenza di dati forniti da ogni singola colonna (o campo) della tabella. Ho creato una tabella con 24 campi + indice.
    Successivamente ho aggiunto quattro campi alla tabella riscrivendo, di nuovo, tutto il programma. La risposta è che ancora vedo solo 24 campi come in precedenza. Chiedevo solo se c'è una ragione e/o una soluzione
    Grazie
  • Re: Tabella database

    Salve,
    credo il problema sia il fatto che utilizza il comando "...IF NOT EXISTS...":
    non intendo dire che sia errato, ma se quella sua tabella già esiste il DBMS non eseguirà questa query.

    Per risolvere può fare due cose:
    1) Modifica la tabella del database:
    ALTER TABLE table_name ADD new_column_name column_definition;


    2) In caso... se proprio non vuole, può cancellare la tabella o il database, ricreare le tabelle con tutti i campi di cui ha bisogno e infine ripopolare il tutto;

    PS: L'idea di fondo è che non si può creare una tabella, se essa già esiste; quindi o la modifica o la elimina e la ricrea modificata.
  • Re: Tabella database

    Grazie,
    ho BUTTATO via tutto e riscriverò' il programma dall'inizio senza inserire nulla del pregresso, ma tenendo conto degli input ricevuti. Grazie

    Ultimo piccolo chiarimento. Le librerie necessarie allo sviluppo del programma, le metto tutte, indistintamente, all'inizio del programma stesso.
    Mi sono accorto, così facendo, che non riesco più a capire quale sia la Def che necessita di una determinata libreria.
    E' possibile che l'esecuzione di un file .exe di Python parta dopo qualche secondo, dovendo, inizialmente, leggere tutte le librerie che trova elencate all'inizio?
    Auguro una buona giornata grazie.
  • Re: Tabella database

    Beh... c'è da dire che Python di base è lento; poi se si caricano tutti i moduli all'inizio si avrà, ovviamente, qualche ritardo all'avvio.
    Mettere tutto all'inizio è "tipico" dei linguaggi compilati, se desideri rendere più "leggero" il tuo script python puoi semplicemente gestire i package mammano che ti servono, importando i package all'inizio di una funzione o di un metodo e non nel "header" del codice. (ovviamente questo comporta una migliore velocità nella partenza, ma riduce le prestazioni in esecuzione)
    Inoltre una cosa molto saggia sarebbe quella di importare solo il minimo indispensabile... invece di importare tutto il modulo, importa solo classi/funzioni/costanti/... che ti servono.

    NB: utilizzare queste metodologie ha senso solo se si opera su computer poco performanti, o in programmi molto grandi; se è una finestrella di Hello World non cambia praticamente nulla.

    Buona giornata.
  • Re: Tabella database

    Ringrazio per le sue preziose indicazioni.
    Io sono un autodidatta che ha iniziato a programmare con il Basic dello Spectrum passando poi per il Clipper Pascal e VB6 poi Vbscript, Javascript (Java,C,C++c# di striscio) e infine Python
    Non utilizzo la programmazione ad oggetti perché mi è ostica, non ho gli studi appropriati e anche perché la programmazione non è un lavoro per me, ma un graditissimo passatempo.
    Grazie per la disponibilità
    Questa è roba fatta da me non copiata . Mi perdonerà l'ingenuità della programmazione
    p.s. ho iniziato ad usare Python con la pandemia
    ##############################################
    # CACOLO DEL JULIAN DAY #
    # e vicecersa #
    # Formula di Meeus #
    #############################################
    '''
    APERTURA DELLE LIBRERIE
    '''
    from tkinter import *
    import tkinter as tk
    from tkinter import ttk
    import shutil
    import datetime
    from datetime import date
    import time
    import os
    import sys
    from tkinter import messagebox
    import tkinter.simpledialog as simpledialog
    from tkinter.simpledialog import askstring
    from tkinter.messagebox import showinfo
    ###################################################
    wd = os.getcwd() # Percorso di dove mi trovo
    pro ="JylianDay.py"
    proc = "\\"+pro
    PathAll = wd + proc # Percorso + Nome programma
    #####-------- Creo una Cartella MyTest --------
    Cartella = wd +"\\MyTest"
    if not os.path.exists(Cartella):
    os.makedirs(Cartella)
    ##--------- Definisco Le variabili Globali
    gio = 0
    mes = 0
    ann = 0
    jdy = 0
    hho = 0
    mmo = 0
    sso = 0
    shho = ""
    smmo = ""
    so = ""
    GioH = 0
    sgio = ""
    smes = ""
    sann = ""
    giomax = 28
    giosett = "" #"Sabato"
    bize =""
    bise = False
    data = ""
    ora = ""
    spaz = " "
    Jdy = 0
    titolasso =""
    global Mega
    Mega = []
    days = []
    days = ["Domenica ","Lunedi' ","Martedi' ","Mercoledi' ","Giovedi' ","Venerdi' ","Sabato "]
    ############## ZONA FUNZIONI #########################
    #----------------------------------------------------------------------------------------------------------
    def cmdJulian(): # pulsante

    ######################### Splitto l'Ora
    varora = txtOra.get()
    #if len(varora)==0:
    # return

    if varora == "0" or len(varora) == 0:
    varora = "00.00.00"
    if len(varora) < 8:
    messagebox.showwarning(title="Errore", message="Formato Orario hh.mm.ss")
    return
    puntiOra = varora.count(".")
    if puntiOra==2:
    varora = varora.replace(".",":") #Formato Orario
    varora = varora.replace(",",".") # eventuali decimali
    ######################### C.llo e Splitto la Data
    vardata = txtData.get()
    # i due campi sono vuoti
    if len(vardata) == 0:
    messagebox.showwarning(title="Errore", message="Inserisci sempre la Data gg/mm/aaa")
    return

    ArData = vardata.split("/")
    sla = vardata.count("/")
    if sla >2 or sla <2:
    messagebox.showwarning(title="Errore", message="Errore!!! Correggi l'Input della Data")
    return

    #-------- Stringhe Data
    sgio = ArData[0] # Giorno
    smes = ArData[1] # mese
    sann = ArData[2] # anno
    #-------- Valori Data
    gio = int(sgio)

    mes = int(smes)
    if mes >12:
    messagebox.showwarning(title="Errore", message="Errore nell'inserimento del Mese")
    return

    ann = int(sann)
    if ann >= 9999:
    messagebox.showwarning(title="Errore", message="Errore nell'inserimento dell'Anno")
    return

    bize =""
    bise = False
    bise = Bisestile(ann) # Anno esatto

    if bise == True:
    bize = "[Bisestile]"
    #--------------------------------
    giomax= GioMax(mes,bise)
    if gio > giomax or gio >31:
    messagebox.showwarning(title="Errore", message="Errore nell'inserimento del Giorno")
    return

    ArOra = varora.split(":")
    #-------- Stringhe Ora
    shho = ArOra[0]
    smmo = ArOra[1]
    ssso = ArOra[2]
    #-------- Valori Ora
    hho = int(shho) # Ora
    if hho >24:
    messagebox.showwarning(title="Errore", message="Errore!!!\n\n Inserire un Orario <= 23.59.59")
    return
    mmo = int(smmo) # minuti
    sso = float(ssso) # secondi
    print("sso : ",sso)
    #------------------------------------- controllo ora
    if int(sso) >= 60:
    sso -=60
    mmo +=1
    logi = True
    if sso == 60:
    sso = (sso - 60)

    if mmo >= 60:
    mmo -=60
    hho +=1
    logi = True
    if mmo == 60:
    mmo = (mmo-60)
    if hho >= 24:
    hho -=24
    gio +=1
    if gio > giomax:
    gio = gio-giomax
    mes+=1
    if mes > 12:
    mes = mes-12
    ann+=1

    Secondi = ((hho*3600) + (mmo*60) + sso)

    if Secondi >= 86400:
    Secondi -=86400
    s1 = Secondi/3600
    hho = int(s1)
    s2 = s1-sso
    s3 = s2*60
    mmo = int(s3)
    s4 = s3-mmo
    sso = s4*60
    gio +=1


    oH = OreGiorno(hho,mmo,sso)
    GioH = float(oH /86400)
    #Ricostruzione Data e Ora
    Dda = str(gio)+"/"+str(mes)+"/"+str(ann)
    seco = str(int(sso))
    Oor = zero(str(hho))+":"+zero(str(mmo))+":"+zero(seco)
    # Metto i nuovi valori nelle Entry di input
    Gdata.set(Dda)
    Gora.set(Oor)

    #### Preparo il valore giorno per il calcolo del gilian day

    xgio = gio + GioH
    Jdy = float(JulianDay(xgio,mes,ann))
    jdm = Jdy +1.5
    xg = int(jdm % 7)

    # Giorno della settimana
    giosett = str(days[xg]).strip()

    jday.set(Jdy)

    Mega.clear() # Svuota la Lista
    Mega.append("Da Gregorian Day a Julian Day")
    Mega.append(Dda)
    Mega.append(Oor)
    Mega.append(Jdy)
    Mega.append(giosett)
    Mega.append(False)

    lbl2 = Label(text= " ",font=("Courier 10 italic bold "))
    lbl2 = Label(text= giosett ,font=("Courier 10 italic bold "))
    lbl2.place(x=130, y=160)

    return
    #--------------------------------------------------------------
    def GioMax(mes,bi):
    switcher = {
    1: 31,
    2: 28,
    3: 31,
    4: 30,
    5: 31,
    6: 30,
    7: 31,
    8: 31,
    9: 30,
    10: 31,
    11: 30,
    12: 31,}

    gmes = switcher.get(mes, "Invalid month")
    if mes ==2 and bi==True:
    gmes = 29
    return gmes
    #--------------------------------------Calcolo Ore in secondi
    def OreGiorno(hho,mmo,sso):
    hhh = (((hho * 60)+mmo)*60) +sso
    return hhh
    #--------------------------------------Calcolo Gulian day
    def JulianDay(xgio,mes,ann):

    a=0
    b=0
    d = xgio
    ms = mes
    xms = mes
    Y = ann
    xan = ann
    if(xms == 1 or xms == 2):
    xan -=1
    xms +=12

    dd = int(xgio)

    if(xan > 1852):
    a = int(xan/100)
    b = 2 - a + int(a/4)
    if(xan < 1852):
    b = 0

    VA0 = float(4716.00)
    z = xan +VA0
    J = xms +1

    VA1 = float(365.25)
    VA2 = float(30.6001)
    ii = int(VA1 * z)
    jj = int(VA2 * J)

    VA3 = float(1524.5)
    vv = float(d + b - VA3)
    pio = float(ii + jj + vv)
    Somma = float(pio)

    txtData.focus_set()

    return Somma
    #---------------------------------------------------------------------
    def cmdGregorian(): # Pulsante Gog

    jd = jday.get() # legge il Campo Entry
    print(jd)
    if len(jd) == 0:
    return

    JdToDg = DataGreg(jd)
    print(JdToDg)
    dhg = JdToDg.split("x")

    LaData = dhg[0]
    LaOra = ControlloOra(dhg[1])
    ilGio = dhg[2]

    Gdata.set(LaData)
    Gora.set(LaOra)

    Mega.clear()
    Mega.append("Da Julian Day a Gregorian Day")
    Mega.append(jd)
    Mega.append(LaData)
    Mega.append(LaOra)
    Mega.append(ilGio)
    Mega.append(True)

    lbl2 = Label(text= " ",font=("Courier 10 italic bold "))
    lbl2 = Label(text= ilGio ,font=("Courier 10 italic bold "))
    lbl2.place(x=130, y=160)
    # se una cifra, anreporre 0 / Togliere i decimali
    # vedo se ci sono decimali
    return

    #--------------------------
    def ControlloOra(H):
    oraDec = H.split(".")
    oraInt = oraDec[0]
    hms =oraInt.split(":")
    oo = ""
    for i in hms:
    i=i.strip()
    if len(i) == 1:
    i =zero(i)+":"
    else:
    i = i+":"
    oo = oo+i
    oo = oo[:-1]
    return oo
    #--------------------------
    def zero(x):
    if len(x)==1:
    return('0' +x)
    return x
    #------------ 1721058 01/01/000 12:00:00 Giovedì
    def DataGreg(jj):
    jj = float(jj)
    z = 0
    F = 0
    a = 0
    B = 0
    C = 0
    d = 0
    e = 0
    alfa = 0
    mm1 = 0
    yy1 = 0
    va1 = 1867216.25
    va2 = 36524.25
    va3 = 1524
    va4 = 122.1
    va5 = 365.25
    va6 = 30.6001
    va7 = 4716
    va8 = 4715
    Konstz = 2299161
    J1 = float(jj + 0.5)
    z = int(J1)
    F = float(J1 - int(J1))

    if z < Konstz:
    a = z

    if z >= Konstz:
    alfa = int((z - va1) / va2)
    a = z + 1 + alfa - int(alfa / 4)

    B = (a + va3)
    C = int((B - va4) / va5)
    d = int(va5 * C)
    e = int((B - d) / va6)

    Dd1 = (B - d - int(va6 * e) + F)

    #**** Mese
    if e < 14:
    mm1 = (e - 1)

    if e == 14 or e == 15:
    mm1 = (e - 13)

    #**** Anno
    if mm1 > 2:
    yy1 = (C - va7)

    if mm1 == 1 or mm1 == 2:
    yy1 = (C - va8)

    # Creo la Stringa della Data
    DDD = str(int(Dd1)) + "/" + str(mm1) + "/" + str(yy1)
    ###-----------------------------------------------------
    bize =""
    bise = False
    bise = Bisestile(int(Dd1)) # Anno Bisestile?
    bize = "[Bisestile]"
    jdm = jj +1.5
    xg = int(jdm % 7)
    giosett = days[xg] # Giorno della settimana letto dall'Array days[]

    # Calcolo dell'Orario con i secondi decimali
    HO = Dd1 - int(Dd1)
    h = HO * 24
    Hora = int(h)
    mi = h - int(h)
    mi = mi * 60
    mii = int(mi)
    se = mi - int(mi)
    se = se * 60
    Sec = float(se)

    #Orario = str(Hora) + ":" + str(mii) + ":" + str(Sec)[0:6] #limito a tre decimali
    Orario = str(Hora) + ":" + str(mii) + ":" + str(round(Sec,4)) #limito a tre decimali
    return DDD + "x" + Orario + "x" + giosett

    #---------------------------------------BISESTILE
    def Bisestile(yea):
    ve = False
    if yea %4 == 0:
    ve = ((yea % 100)>0 or ((yea % 400) == 0))
    else:
    ve = False

    return ve
    #---------------------------------------USCITA
    def cmdEsco():
    os._exit(0)

    ###---------------- PULIZIA DEI CAMPI ------------
    def cmdClear():
    txtData.delete(0,END)
    txtOra.delete(0,END)
    txtJd.delete(0,END)
    lbl2 = Label(text= 20*" " ,font=("Courier 10 italic bold "))
    lbl2.place(x=130, y=160)
    txtData.focus_set()
    lbl3 = Label(text= " " ,font=("Courier 7 bold "))
    lbl3.place(x=130, y=180)
    Mega.clear()
    txtData.focus_set()
    ##------------------------------------------------------------------------
    def cmdReport():
    titolo = ""
    rep = ""
    if Mega[5] == True:
    rep = rep+Mega[0]+"\n\nJulian Day\t = "+Mega[1]+"\nData\t\t = "
    rep = rep+Mega[2]+"\nOra\t\t = "+Mega[3]+"\nGiorno\t\t = "+Mega[4]
    messagebox.showinfo("Data Giuliana",rep)

    if Mega[5] == False:
    rep = rep+Mega[0]+"\n\nData\t\t = "+Mega[1]+"\nOra\t\t = "+Mega[2]
    rep = rep+"\nGiorno\t\t = "+Mega[4]+"\nJulian Day\t = "+str((Mega[3]))
    messagebox.showinfo("Data Giuliana",rep)

    return
    #----------------------------------------------------------------------
    ############## ZONA WINDOW #########################
    #inizializziamo globalmente la finestra
    window = Tk()
    #dimensioni Finestra
    WIDTH = 400 #larghezza
    HEIGHT = 200 #Altezza
    ###------------------- CENTRO FINESTRA SU SHERMO ---------------------
    larghezza = window.winfo_screenwidth() # larghezza schermo in pixel
    altezza = window.winfo_screenheight() # altezza schermo in pixel
    x = larghezza//2 - WIDTH//2
    y = altezza//2 - HEIGHT//2
    window.geometry("%dx%d+%d+%d" % (WIDTH, HEIGHT, x, y))
    window.title("Calcolo del Julian Day By GSan 02/2021 Python 3.9 64 Bit")
    #window.resizable(False, False) # non modificabile e no ingrandisce
    #window.resizable(0,0) # non modificabile e no ingrandisce
    #window.overrideredirect(1) # non spostabile e senza i controlli
    window.attributes("-topmost", True) # sempre in primo piano
    #---------------------------------------------------------------------------
    ### ---------------- Creo un riquadro Frame chiamato "gruppo"
    gruppo = LabelFrame(window, text="Gregorian Day",fg='navy',font=("Arial 10 bold"), padx=5, pady=5, width=300)
    gruppo.grid(row=0, sticky='W', padx=55, pady=5, ipadx=5, ipady=5)
    # Il Frame si allunga mano a mano che inserisco oggetti
    gru = LabelFrame(window, text="Julian Day",fg='navy',font=("Arial 10 bold"), padx=5, pady=5, width=300)
    gru.grid(row=1, sticky='W', padx=55, pady=5, ipadx=5, ipady=5)

    #Label e Campo Entry
    Gdata = StringVar()
    Gora = StringVar()
    jday = StringVar()
    #Mega=[]

    Label(gru, text="J.Day : ",font=("Arial 10 bold italic")).grid(row=0, sticky=W)
    txtJd = Entry(gru, textvariable=jday, bg="azure",font=("Arial 10 bold "), width=18)
    txtJd.grid(row=0, column=1, sticky=W)
    txtJd.focus_set()

    Label(gruppo, text="Data : ",font=("Arial 10 bold italic")).grid(row=0, sticky=W)
    Label(gruppo, text=" gg/mm/aaa ",font=("Arial 8 italic")).grid(row=0,column=2, sticky=W)

    txtData = Entry(gruppo, textvariable=Gdata, bg="azure",font=("Arial 10 bold "), width=12)
    txtData.grid(row=0, column=1, sticky=W)
    txtData.focus_set()

    Label(gruppo, text="Ora : ",font=("Arial 10 bold italic")).grid(row=1, sticky=W)
    Label(gruppo, text=" hh:mm:ss ",font=("Arial 8 italic")).grid(row=1,column=2, sticky=W)
    txtOra = Entry(gruppo, textvariable=Gora, bg="azure",font=("Arial 10 bold "), width=12)
    txtOra.grid(row=1, column=1, sticky=W)

    # Pulsanti Invio e Chiusura
    ###--- Pulsante di Calcolo del Julian Day---------------------------
    cmdEnter = Button(gruppo, text='J d y',fg='navy',bg='lightgray',font=("Arial 7 italic "),cursor ="hand2", command=cmdJulian)
    cmdEnter.grid(row=1,column=4, sticky=W) #.place(x=260, y=60)

    ###--- Pulsante di Calcolo del Gregorian Day---------------------------
    Label(gru, text=" ",font=("Arial 10 bold italic")).grid(row=0,column= 4, sticky=W)
    cmdEnteg = Button(gru, text='G r g',fg='navy',bg='lightgrey',font=("Arial 7 italic "),cursor ="hand2", command=cmdGregorian)
    cmdEnteg.grid(row=0,column=5, sticky=W) #.place(x=260, y=60)

    #------ PULISCE CAMPI
    cmdPuli = Button(window, text='C L E A R',fg='navy',bg='lime',font=("Arial 6"),cursor ="hand2", command=cmdClear)
    cmdPuli.place(x=215, y=89)
    #------ Crea Report
    cmdPuli = Button(window, text='R E P O R T',fg='white',bg='dimgrey',font=("Arial 6"),cursor ="hand2", command=cmdReport)
    cmdPuli.place(x=140, y=89)

    ###--- Pulsante Uscita Programma ----------------------
    cmdEsci = Button(window, text='E X I T',bg='orange',font=("Arial 6"),cursor ="hand2", command=cmdEsco)
    cmdEsci.place(x=280,y=89)#315 160
    #cmdEsci.place(x=268,y=180)

    if __name__ == "__main__":
    window.mainloop()
  • Re: Tabella database

    Quando alleghi del codice lo devi racchiudere tra i tag '[ CODE]' e [\ CODE]' (pulsante '</>' dell'editor completo) altrimenti va in vacca tutta la formattazione e spariscono alcuni caratteri.
Devi accedere o registrarti per scrivere nel forum
8 risposte