Oggi, durante l'esecuzione di un programma di test sul DB costruito dal mo programma "ContabFam" ho incontrato un'anomalia che definirei inverosimile, e cioè:
vado a leggere il contenuto di certi dati riepilogativi presenti in campi di colonne contigue della tabella di DB
riepmovgEbbene pur avendoli richiamati correttamente, l'output fornito dalla query sql è uguale per tutti e due i campi, proprio come se contenessero entrambi lo stesso valore.
Riporto la print eseguita durante il debug del programma, per tutte le colonne di una riga della tabella incriminata:
RecRiepMovg!IdRiepMovg= '6159'
RecRiepMovg!DtCoMovg= '20130102'
RecRiepMovg!StaDtMovg='C'
RecRiepMovg!TotEntrg= '3110' RecRiepMovg!TotUscg= '3110'
RecRiepMovg!RipFing= '360,52'
Come risulta chiaramente la 4^ riga di print richiama le colonne TotEntrg e TotUscg:
RecRiepMovg!TotEntrg= '3110' RecRiepMovg!TotUscg= '3110'L'istruzione di query che precede la suddetta print é:
RecRiepMovg = ApriDB.DB_Connection.Exec("SELECT * FROM riepmovg WHERE DtCoMovg = '" & iGiornata & "'")
If Not RecRiepMovg.Available
EdtData = New EditData(iGiornata)
Message.Error("<CENTER> ATTENZIONE !!!<BR><b> Il RECORD RIEPILOGATIVO della giornata contabile '" & EdtData.$DataEdt & "' inesistente in DB.ContabFam.riepmovg <BR><BR>IL PROGRAMMA VERRÀ CHIUSO </b></CENTER>")
Quit
Endif
Print "RecRiepMovg!IdRiepMovg= '"; RecRiepMovg!IdRiepMovg; "'", "RecRiepMovg!DtCoMovg= '"; RecRiepMovg!DtCoMovg; "'", "RecRiepMovg!StaDtMovg='"; RecRiepMovg!StaDtMovg; "'", "RecRiepMovg!TotEntrg= '"; RecRiepMovg!TotEntrg; "'", "RecRiepMovg!TotUscg= '"; RecRiepMovg!TotUscg; "'", "RecRiepMovg!RipFing= '"; RecRiepMovg!RipFing; "'"
If RecRiepMovg!TotEntrg = fTotEntr And RecRiepMovg!TotUscg = fTotUsc And RecRiepMovg!StaDtMovg = "C" Then
iEsito = 0
Else
iEsito = 1
Endif
La vista della tabella fornita da Sqlite ed allegata qui mostra chiaramente che i nomi delle colonne sono riportati correttamente e che il contenuto delle celle nella riga di cui ho detto sopra è diverso:
3110 per TotEntrg3012.9 per TotUscgInoltre la tabella presenta altre celle delle stesse colonne con valori uguali, diversamente dalla realtà. Mi viene difficile da crederlo, ma sembra che ci possa essere qualche cattivo comportamento di software che legge e/o registra i dati in codesta tabella. Ma perché solo in essa?
Ho guardato le istruzioni di creazione della tabella ed a me sembrano corrette:
Public Sub CreaRiepMovg($_NomeTab As String) 'Routine di crea'PRIVATE DB_path AS String 'Percorso di ricerca del Database ContabFam.db
'----------------------------------------------------------- CREAZIONE DELLA "Tabella di RIEPILOGO DEI MOVIMENTI GIORNALIERI" -------
ApriDB = New OpenDB
sql = "CREATE TABLE '" & $_NomeTab & "'" '*** Contiene i Conti e sottoconti di dettaglio utilizzabili nella procedura ***"
sql = sql & "('IdRiepMovg' INTEGER PRIMARY KEY AUTOINCREMENT," 'codice id obbligato dalla struttura di SQLite3, ma inutile per questo DB
sql = sql & " 'DtCoMovg' INTEGER," '----»» costituisce la chiave primaria d'ordinamento effettiva e rappresenta la Data contabile della giornata di riferimento
sql = sql & " 'StaDtMovg' CHAR(1) DEFAULT NULL," ' "A" = Giornata aperta, "C" = Giornata chiusa
sql = sql & " 'TotEntrg' INTEGER," 'Totale Entrate di giornata
sql = sql & " 'TotUscg' INTEGER," 'Totale Uscite di giornata
sql = sql & " 'RipFing' FLOAT" 'Saldo di fine giornata, a riportare
sql = sql & " );"
Try ApriDB.DBConnection.Exec(sql)
If ApriDB.DBConnection.Error Then
Message.ERROR("Attenzione! -> Creazione Tabella 'ContabFamdb.RiepMovg' --> FALLITA" & Chr(10) & Chr(10) & "Cod.Erro= " & Error.Code & "»»" & ERROR.Text & Chr(10) & Chr(10) & "Il programma verrà chiuso")
Quit
Else
ApriDB.DBConnection.Close 'chiude il DB
Endif
End