Poi per fare un'altra prova potresti usare il mio codice per testare se funziona anche sul tuo pc, con la tua distro e la tua versione di gambas... almeno ci togliamo ogni dubbio
io uso kubuntu con gambas 2.20.2
Rispondo solo ora perchè ho voluto concludere un test sul programma. Infatti, mentre ragionavo con voi sulla funzione SQL "ALTER TABLE", sono andato avanti.
Anche se a me non piacciono le polemiche, devo dire che, per gli appellativi come "pivello" possono anche essere dichiarati senza nominare il termine esatto: Lo stesso effetto si ottiene, usando frasi che lo facciano capire:
(((se metti IF conn.Tables.Exist("NomeTabellaOrigine") THEN gambas esegue le istruzioni se la tabella esiste, invece se IF NOT conn.Tables.Exist("NomeTabellaOrigine") THEN esegue le istruzioni se la tabella NON esiste), rafforzata poi da: (Milio ti sta dicendo che il test che esegui tu domanda al DB se NON esiste la tabella. Siccome la tabella esiste, ti restituisce False perché il test non è andato a buon fine (cioè la tabella esiste). Quel "NOT" significa proprio questo: inverti il senso (o risultato) del test. La tabella SQLiteMan la vede proprio perché c'è.)))
Come vedi, soprattutto nella seconda affermazione il concetto è pungente, anche se il termine non è stato citato.
Siccome non credo che che sia costruttivo andare avanti con simili ragionamenti, anche perchè sono convinto che sia io, da una parte, che voi due, dall'altra, rimarremo sempre nelle nostre posizioni, per quanto mi riguarda, la parentesi comportamentale, può considerarsi chiusa.
Ho voluto provare il tuo codice, anche perchè contiene un'istruzione originale, che non conoscevo (ammetto la mia ignoranza in proposito):
' la seguente sql mi crea la tabella e ci inserisce i dati dentro dalla tabella di origine
Sql = "CREATE TABLE NomeTabellaTransito AS SELECT * FROM NomeTabellaOrigine ORDER BY cassa;"
IF DB_Connection.Tables.Exist("NomeTabellaTransito") THEN
Sql = "SELECT * FROM NomeTabellaTransito;"
RecTab = DB_Connection.Exec(Sql)
FOR i = 0 TO RecTab.Max
NEXT
PRINT i ----> stampa 142 (cioè il n° dei record teoricamente copiati)
ENDIF
' cancello la tabella di origine
Sql = "DROP TABLE NomeTabellaOrigine"
DB_Connection.Exec(Sql)
' Rinomino la tabella di transito
Sql = "ALTER TABLE 'NomeTabellaTransito' RENAME TO 'NomeTabellaOrigine';"
DB_Connection.Exec(Sql)
DB_Connection.Commit
DB_Connection.Close
WITH
DB_Connection
.Type = "sqlite3"
.Host = VarGlob.$_DbPath
.Name = VarGlob.$_DbNome
.OPEN 'Apro il DB
END WITH
IF DB_Connection.Tables.Exist("NomeTabellaOrigine") THEN
Sql = "SELECT * FROM NomeTabellaOrigine;"
RecTab = DB_Connection.Exec(Sql)
FOR i = 0 TO RecTab.Max
NEXT
PRINT i ----> stampa ancora 142 (sembrerebbe perciò che il lavoro sia andato bene)
ELSE
PRINT "La Tabella 'piancont' non esiste"
ENDIF
Dall'andamento delle interrogazioni sui record di tabella, sia nella fase intermedia, di registrazione sulla 'TabellaTransito', che nella fase finale, di registrazione sulla 'TabellaOrigine', sembrerebbe che abbia funzionato.
Accedendo però alla Tabella di DB tramite Sqliteman, ahimè, l'ho trovata di nuovo vuota. L'unica cosa che è cambiata dalla mia prova iniziale è che il test 'IF DB_Connection.Tables.Exist("NomeTabellaOrigine") ' questa volta trova la tabella.
Che ne pensi?
Secondo me, non conviene insistere.
Ciao.