Autore Topic: [RISOLTO] Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup  (Letto 5472 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Da quando ho sbattuto la faccia nel concetto delle tabelle indicizzate in sqlite3, mi sono impantanato nelle sabbie mobili e vi sono immerso fino al collo. Per non dilungarmi troppo non sto a spiegare la scelta pensata per mantenere le tabelle del mio DB sempre ordinate nell'ambito della primary key. Uno dei passi immaginati comprende la cancellazione, la nuova creazione della tabella originaria(Tabella_orig) e la riscrittura della stessa coi dati riordinati e salvati prima della cancellazione in una tabella di Backup (Tabella_bkp). Ora dovrei semplicemente leggere tutte le righe della "Tabella_bkp" e trascriverle pari pari nella "Tabella_orig"; per ottenere ciò, ho scritto il seguente codice:
Codice: [Seleziona]
 WITH 
      DB_Connection
      .Name = DBname
      .OPEN    'Riapro il DB
  END WITH
 
  sql = "CREATE TABLE 'Tabella_orig'  ("                  
  sql = sql & " 'NumVoce'  INTEGER PRIMARY KEY,"                        
  sql = sql & " 'NomeVoce' VARCHAR(50) DEFAULT NULL,"  
  sql = sql & " 'Campox1' CHAR(1) DEFAULT NULL,"    
  sql = sql & " 'Campox2' INTEGER DEFAULT NULL"    
  sql = sql & " );"                                        
  sqltable = DB_Connection.Exec(sql)
  DB_Connection.CLOSE               'chiude il DB

  DB_Connection.Begin
  NomeRec_via = DB_Connection.edit("Tabella_bkp")  
  NomeRec = DB_Connection.edit("Tabella_orig")  
  FOR EACH NomeRec_via
      NomeRec = NomeRec_via
      NomeRec.Update
  NEXT

  DB_Connection.Commit
  DB_Connection.CLOSE

Però, non capisco il perché, l'istruzione  
Citazione
NomeRec.Update

fornisce l'errore
Citazione
Cannot modify record: SQL error or missing database


Ho sbagliato qualcosa? Dove?
Spero che anche a ferragosto qualcuno mi possa aiutare.  :ciao:  :ciao:
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #1 il: 11 Agosto 2009, 11:56:03 »
Ciao, io solitamente uso la sintassi sql pura senza utilizzare le funzioni update dei result. cmq credo che il problema sia alla riga:
Codice: [Seleziona]
NomeRec = NomeRec_via 

credo tu debba specificare colonna per colonna i vari valoti. ad esempio:
Codice: [Seleziona]
NomeRec!nome_primo_campo = NomeRec_via!nome_primo_campo
NomeRec!secondo_nome_campo = NomeRec_via!nome_secondo_campo

forse in questa maniera il commit andrebbe messo dentro il ciclo FOR.
Oppure prova con la sintassi sql pura:
Codice: [Seleziona]
FOR EACH NomeRec_via
     DB_Connection.Exec("INSERT INTO NomeRec VALUES(" & NomeRec_via!nome_primo_campo & ", " & NomeRec_via!secondo_primo_campo & ")")  
NEXT


Ciao.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #2 il: 11 Agosto 2009, 22:47:05 »
Citazione

Berserker79 ha scritto:
Ciao, io solitamente uso la sintassi sql pura senza utilizzare le funzioni update dei result. cmq credo che il problema sia alla riga:
Codice: [Seleziona]
NomeRec = NomeRec_via 

credo tu debba specificare colonna per colonna i vari valoti. ad esempio:
Codice: [Seleziona]
NomeRec!nome_primo_campo = NomeRec_via!nome_primo_campo
NomeRec!secondo_nome_campo = NomeRec_via!nome_secondo_campo

forse in questa maniera il commit andrebbe messo dentro il ciclo FOR.
Oppure prova con la sintassi sql pura:
Codice: [Seleziona]
FOR EACH NomeRec_via
     DB_Connection.Exec("INSERT INTO NomeRec VALUES(" & NomeRec_via!nome_primo_campo & ", " & NomeRec_via!secondo_primo_campo & ")")  
NEXT

Ciao.

Si, sicuramente così funziona, ma, salvo che la logica di Sqlite3 voglia sorprendermi ulteriormente, essendo "NomeRec_via" una stringa contenente tutto il record letto da "Tabella_bkp", credo che possa pari pari essere trasferito nella stringa "NomeRec", corrispondente al record da registrare in "Tabella_orig". Se così non é vuol dire che la mia logica é sbagliata, ma vuol dire anche che
Citazione
Sqlite3 é veramente modesto.

Mi dispiace solamente che in maniera standalone Gambas non sia in grado di agganciarsi ad altre strutture di "veri" DB. Purtroppo sono costretto ad utilizzare SQLite3 che sta portando via un bel pò del mio tempo senza che sia ancora riuscito a vedere funzionare la parte gestione archivi del mio progetto. Spero solamente di riuscirvi in questa vita.
Grazie comunque. Ciao.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #3 il: 12 Agosto 2009, 13:31:24 »
Secondo me stai sottovalutando sqlite. io lo uso sia per programmi scritti con gambas che sotto windows con VB NET, utilizzando il linguaggio sql. Poi se pensi che firefox lo utilizza, non credo proprio che sia un db poco performante. Io personalmente non ho ancora utilizzato altri db, quindi non sò dirti come ci si trovi ad utilizzarli. Secondo me dovresti insistere con sqlite, vedrai che ti darà soddisfazioni. Lascio la parola ai mastri gamberi, credo possano darti delle dritte!!! Ciao.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #4 il: 13 Agosto 2009, 10:25:41 »
Sai benissiomo che viviamo nella piena relatività, da quella familiare a quella sociale. Esite sempre un diverso modo di vedere le cose; se per te il bicchiere può essere mezzo pieno, per me é invece mezzo vuoto. Tornando ad SQLite3, tutto dipende dall'uso che ne devi fare, per costruire una rubrichetta telefonica, dove quello che conta é il nominativo da chiamare ed il suo numero di telefono, SQLite va benissimo, ma se cominci a considerare che il type dichiarato delle colonne componenti le tabelle di DB viene trasformato automaticanmente in formato stringa, l'impossibilità di tenere il contenuto di ciascuna tabella sempre ordinato rispetto alla primary key (sto citando le mie esperienze), SQLite comincia a manifestare i suoi limiti. Se fosse possibile, utilizzerei un altro motore di DB, ma purtroppo, visto che gli altri DB sono strutturati per lavorare in ambienti di tipo client-server, mentre io devo applicarlo ad un ambiente mono-pc, mio malgrado, dovrò utilizzare SQLite.

Come vedi, poi, i "mastri" non partecipano a questa discussione; e lo capisco, perché essi conoscono già il mio pensiero su SQLite e sanno benissimo che le soluzioni da me cercate in SQLite non esistono!
:ciao:  :ciao:
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #5 il: 13 Agosto 2009, 23:40:47 »
Nella spereanza di andare avanti col programma  ho modificasto l'istruzione
Citazione
NomeRec = NomeRec_via
con le seguenti:
Codice: [Seleziona]
NomeRec!NumVoce= NomeRec_via!NumVoce
NomeRec!NomeVoce= NomeRec_via!NomeVoce

Ebbene, mi viene restituito sempre l'errore  di "result is not availabe all'esecuzione della prima delle due istruzioni.
Pensando che potesse dare fastidio un trasferimento diretto fra gli elementi di Tabella ho inaseriro campi di transito intermedi:
Codice: [Seleziona]
DIM i_Numero AS Integer
DIM $_Nome AS String
i_Numero = NomeRec_via!NumVoce
$_Nome = NomeRec_via!NomeVoce
NomeRec!NumVoce = i_Numero
NomeRec!NomeVoce = $_Nome

Il risultato non é però cambiato. :cry:
Non so più che fare!!!  :fuso:

Ciao a tutti.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #6 il: 14 Agosto 2009, 13:09:36 »
Ciao, se puoi posta il progetto e vediamo se posso darti una mano. In alternativa posta la parte di codice dall'inizio dalla dichiarazione della connessione fino alla parte che ti dà l'errore.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #7 il: 14 Agosto 2009, 22:39:43 »
Secondo me non va perché stai usando la stessa connessione per 2 transazioni sullo stesso DB.

Prova aprendo 2 connessioni... tipo:

Codice: [Seleziona]

Dim Connessione As New Connection
Dim ConnessioneVia As New Connection
Dim Risultato As Result
Dim RisultatoVia As Result


Quando devo ricopiare dati tra due tabelle faccio in genere così, e non ho problemi.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #8 il: 15 Agosto 2009, 09:51:36 »
@ leo72
Se non ho capito male, applicando il tuo esempio al mio programma,  ho proceduto così:
Codice: [Seleziona]

PUBLIC DB_Connection AS Connection
PUBLIC DB_Conn2 AS Connection

PUBLIC SUB Form_Open()
  DIM DB_Connection AS NEW Connection
  DIM DB_Conn2 AS NEW Connection
  DIM DBname AS String
  DIM DB_path AS String
  DBname = "ContabFam.db"
  DB_path = Application.path & "/ContabFam_DB"  
  WITH DB_Connection
    .Type = "sqlite3"
    .Host = DB_path
    .Login = ""
    .Password = ""
    .Name = DBname
    .OPEN  
 END WITH
 WITH DB_Conn2
    .Type = "sqlite3"
    .Host = DB_path
    .Login = ""
    .Password = ""
    .Name = DBname
    .OPEN  
  END WITH
 
  DB_Conn2.Begin
  NomeRec_via = DB_Conn2.edit("piancont_via")  
  DB_Connection.Begin
  NomeRec = DB_Connection.edit("PianCont")  
  FOR EACH NomeRec_via
      [i]NomeRec!NumVoce = NomeRec_via!NumVoce[/i]
      NomeRec!NomeVoce = NomeRec_via!NomeVoce
     
      NomeRec.Update
  NEXT
  DB_Connection.Commit  'vorrei provare a farlo una volta sola, alla fine,
                        'per vedere se viene mantenuto ai record lo stesso
                        'ordine dell'input, o se SQLite3 tiene conto
                        'dell'ordine impostato con la Primary Key
  DB_Connection.CLOSE


Ebbene, in prova ricevo sempre il messaggio
Citazione
Result is not available

nell'esecuzione della prima riga di codice di trasferimento valori, cioé:
          NomeRec!NumVoce = NomeRec_via!NumVoce

Purtroppo continua a non funzionare !!! :evil:  :cry:

Ciao a tutti.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #9 il: 15 Agosto 2009, 10:18:24 »
Ciao, credo di aver capito dove sta l'errore.
Codice: [Seleziona]
NomeRec = DB_Connection.edit("PianCont")

sostituiscila con questa riga:
Codice: [Seleziona]
NomeRec = DB_Connection.Create("PianCont")


Il metodo edit non và bene per la tabella originale, dato che di fatto non contiene dati e quindi usa il create.
Poi non capisco perchè usi il metodo edit per leggere i dati della tabella backup.
Vai con un semplice .Exec("SELECT ecc..")
Cmq ti posto il codice che ho provato io e che mi ha funzionato:
Codice: [Seleziona]
PUBLIC SUB Button4_Click()
   DIM tab_originale AS Result
   DIM tab_backup AS Result
   tab_backup = myConnection.Exec("SELECT * FROM tlog")
   tab_originale = myConnection.Create("tlog2")
   FOR EACH tab_backup
     tab_originale!a = tab_backup!id
     tab_originale!b = tab_backup!line
     tab_originale!c = tab_backup!testata
     tab_originale!d = tab_backup!data
     tab_originale!e = tab_backup!importo
     tab_originale.Update()
   NEXT
   myConnection.Commit()
   myConnection.Close()
   Message("fine")
END

Se ho capito bene quello che vuoi ottenere, in questa maniera dovresti essere apposto. Cmq io ho usato una sola connessione.
Ciao.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #10 il: 17 Agosto 2009, 18:54:39 »
Citazione

Berserker79 ha scritto:
Ciao, credo di aver capito dove sta l'errore.
Codice: [Seleziona]
NomeRec = DB_Connection.edit("PianCont")

sostituiscila con questa riga:
Codice: [Seleziona]
NomeRec = DB_Connection.Create("PianCont")



Grazie. Non avevo mai usato il parametro ".create" nell'assegnazione della variabile Result. Effettivamente, con quella modifica e facendo riferimento ad un'unica connessione (DB_Connection) non ho più ricevuto errori. Non ho ottenuto però quello che volevo, perché in fase di scrittura i valori da me assegnati alla colonna definita come PrikmaryKey sono stati sostituiti da un progressivo di tipo ID. Perciò, alla fine della ricostruzione della tabella, mi sono ritrovato con valori assolutamente non significatovi nel colonna "NumVoce", definita nel Create della tabella come chiave primaria.
La conclusione é che apparentemenmte sono andato avanti, ma sono sempre più immerso nel pantano.
Lo vedi che SQLite é modesto!
Ho l'impressione, salvo diverso suggerimento da maestro, che l'unica soluzione palleativa sia quella di attribuire alle mie tabelle una colonna ID, oppure, definire tutte le tabelle senza chiave primaria. Qual'é la scelta più tranquillamente percorribile e, perciò, meno traumatica?  :-(  :-(  :-(
Ciao a tutti.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #11 il: 18 Agosto 2009, 00:49:10 »
Ti posso solo consigliare di usare la sintassi sql pura anzichè affidarsi a gambas tramite il result.update.
Ho fatto una prova, utilizzando la sintassi sql i valori della tabella di backup vengono riportati perfettamente nella tabella originale, mentre utilizzando il metodo update, il campo impostato come primary key mi veniva rimpiazzato con un indice progressivo che partiva da 1.
Prova in questa maniera e vedi se risolve il tuo problema.
Ciao, aspetto tue notizie.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #12 il: 20 Agosto 2009, 19:21:45 »
Citazione

Berserker79 ha scritto:
Ti posso solo consigliare di usare la sintassi sql pura anzichè affidarsi a gambas tramite il result.update.
Ho fatto una prova, utilizzando la sintassi sql i valori della tabella di backup vengono riportati perfettamente nella tabella originale, mentre utilizzando il metodo update, il campo impostato come primary key mi veniva rimpiazzato con un indice progressivo che partiva da 1.
Prova in questa maniera e vedi se risolve il tuo problema.
Ciao, aspetto tue notizie.


Provare con istruzioni SQL: ... bel problema! Ho imitato la sintassi utilizzata per il "Create" della tabella, seguendo anche lo schema riportato nella guida grafica del sito "/www.sqlite.org", però non ne vuol sapere: ricevo sempre il messaggio
 
Citazione
Query failed: SQL error or missing database
.
Riporto le istruzioni utizzate a partire dalla ctreazione della tabella da ripopolare:
Codice: [Seleziona]
DIM sql AS String 'serve per eseguire i comandi sul DB
  DIM sqltable AS Result
  DIM NomeRec AS Result
  DIM NomeRec_via AS Result
   
  DBname = "ContabFam.db"
  DB_path = Application.path & "/ContabFam_DB"
   WITH DB_Connection
    .Type = "sqlite3"
    .Host = DB_path
    .Login = ""
    .Password = ""
  END WITH
  'DB_Connection.Open    'Tento l'apertura del DB, se presente
    IF DB_Connection.Databases.Exist(DBname) THEN   'verifica l'esistenza del DB
        DB_Connection.CLOSE               'chiude il DB
  WITH
      DB_Connection
      .Name = DBname
      .OPEN    'Riapro il DB
  END WITH
 
  sql = "CREATE TABLE 'PianCont'  ("
  sql = sql & " 'NumVoce'  INTEGER PRIMARY KEY,"
  sql = sql & " 'NomeVoce' VARCHAR(50) DEFAULT NULL,"
  sql = sql & " 'ContrPartSiNo' CHAR(1) DEFAULT NULL,"
  sql = sql & " 'DtPrimoUso' INTEGER DEFAULT NULL"
  sql = sql & " );"                                        
  sqltable = DB_Connection.Exec(sql)
  DB_Connection.Begin
  NomeRec_via = DB_Connection.Edit("piancont_via")  
  NomeRec = DB_Connection.Create("PianCont")  
  FOR EACH NomeRec_via
      sql = "INSERT INTO 'PianCont' ('NumVoce', 'NomeVoce', 'ContrPartSiNo', 'DtPrimoUso')"
      sql = sql & " VALUES(NomeRec_via!NumVoce, NomeRec_via!NomeVoce, NomeRec_via!ContrPartSiNo, NomeRec_via!DtPrimoUso) ;"
[u]      NomeRec = DB_Connection.EXEC(sql)     [/u]     qui si determina l'errore
  NEXT
  DB_Connection.Commit()
  DB_Connection.CLOSE()

Ho guardato anche la miniguida di fsurfing, ma al riguardo riporta solo istruzioni non SQL. Ho provato in tanti modi, ad eliminare gli apici relativi al nome di tabella, poi solo quelli relativi alle colonne interne alla tabella, poi tutti gli apici, ma il risultato non é cambiato. Uffà !!! :noia:
 Non capiosco perché non vada, eppure non va. :ciao:

p.s.: ho verificato che la tabella esista ed ho constatato che é stata creata benissimo.
Ciao ancora.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #13 il: 22 Agosto 2009, 09:59:55 »
tuo codice:
Codice: [Seleziona]
sqltable = DB_Connection.Exec(sql)
DB_Connection.Begin
NomeRec_via = DB_Connection.Edit("piancont_via")
NomeRec = DB_Connection.Create("PianCont")
FOR EACH NomeRec_via
   sql = "INSERT INTO 'PianCont' ('NumVoce', 'NomeVoce', 'ContrPartSiNo', 'DtPrimoUso')"
   sql = sql & " VALUES(NomeRec_via!NumVoce, NomeRec_via!NomeVoce, NomeRec_via!ContrPartSiNo, NomeRec_via!DtPrimoUso) ;"
   NomeRec = DB_Connection.EXEC(sql)    
    qui si determina lerrore
NEXT
DB_Connection.Commit()
DB_Connection.CLOSE()


Modifica il codice in questo modo:
----------------------------------
NomeRec_via = DB_Connection.Exec("SELECT * FROM piancont_via")
NomeRec = DB_Connection.Create("PianCont") ' questa istruzione credo si posa omettere
FOR EACH NomeRec_via
     DB_Connection.EXEC("INSERT INTO 'PianCont' VALUES(" & NomeRec_via!NumVoce &
     ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', " & NomeRec_via!DtPrimoUso & ")")
NEXT
DB_Connection.Commit()
DB_Connection.CLOSE()
----------------------------------
Come vedi per popolare il result NomeRec_via uso il metodo .Exec che mi sembra più azzeccato del .Edit, dato che devi fare una ricerca dei record.
Poi la tua istruzione sql era errata nella parte dei VALUES, nel modo in cui l'avevi scritta tu i record da inserire non erano i valori del result NomeRec_via ma il testo NomeRec_via!NumVoce, NomeRec_via!NomeVoce ecc.
Poi ho tolto la parte relativa a l'ordine dei campi, basta semplicemente inserire i VALUES nell'ordine in cui sono stati creati i campi.
Come vedi per scrivere una istruzione lunga puoi andare tranquillamente a capo dopo & senza bisono di utilizzare come hai fatto tu:
Codice: [Seleziona]
sql = "CREATE TABLE 'PianCont'  ("
sql = sql & " 'NumVoce'  INTEGER PRIMARY KEY,"

Infine, per inserire i dati nella tabella PianCont vado direttamente con il metodo .Exec della connection, senza far riferimento al result NomeRec.
Non ho provato il codice ma dovrebbe esere ok. Fammi sapere se và bene, ciao.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #14 il: 23 Agosto 2009, 10:24:40 »
Citazione

Berserker79 ha scritto:
Modifica il codice in questo modo:
----------------------------------
NomeRec_via = DB_Connection.Exec("SELECT * FROM piancont_via")
NomeRec = DB_Connection.Create("PianCont") ' questa istruzione credo si posa omettere
FOR EACH NomeRec_via
     DB_Connection.EXEC("INSERT INTO 'PianCont' VALUES(" & NomeRec_via!NumVoce &
     ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', " & NomeRec_via!DtPrimoUso & ")")
NEXT
DB_Connection.Commit()
DB_Connection.CLOSE()
----------------------------------

Nn é importante come si scrivonno le istruzioni, ma il risultato che si ottiene, poi un metodo vale l'altro. Io scrivo le istruizioni così come te le ho riportate, allo scopo di renderle più leggibili a me stesso.
omunque ho modificato il codice così come mi hai suggerito e la conclusione non é cambiata. la riga
Citazione
DB_Connection.EXEC("INSERT INTO ..........

continua a dare il solito errore "Query failed: SQL error or missing database"

Per maggiore chiarezza riporto qui di seguito il codice così come l'ho eseguito:
Codice: [Seleziona]
WITH 
      DB_Connection
      .Name = DBname
      .OPEN    'Riapro il DB
  END WITH
 
  sql = "CREATE TABLE 'PianCont'  ("
  sql = sql & " 'NumVoce'  INTEGER PRIMARY KEY,"                        
  sql = sql & " 'NomeVoce' VARCHAR(50) DEFAULT NULL,"      
  sql = sql & " 'ContrPartSiNo' CHAR(1) DEFAULT NULL,"    
  sql = sql & " 'DtPrimoUso' INTEGER DEFAULT NULL"        
  sql = sql & " );"                                        
  sqltable = DB_Connection.Exec(sql)

  DB_Connection.Begin
  NomeRec_via = DB_Connection.Exec("SELECT * FROM piancont_via")
  NomeRec = DB_Connection.Create("PianCont")  '''lasciando o togliendo questa riga non cambia alcunché
  FOR EACH NomeRec_via
  DB_Connection.EXEC("INSERT INTO 'PianCont' VALUES(" & NomeRec_via!NumVoce & ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', " & NomeRec_via!DtPrimoUso & ")")
  NEXT
  DB_Connection.Commit()
  DB_Connection.CLOSE()

:oops:  Mi trovo veramente imbarazzato per l'impegno al quale involontariamente sto sottoponendo  la tua cortesissima disponibilità. Vedo che hai padronanza nell'uso delle istruzioni in SQL. Io conosco il linguaggio SQL da tantissimo tempo, ma non l'ho mai adoperato, quindi non é esperienza pratica.
Per Es.: non capisco come mai nelle istruzioni del "create table" la stringa la cui modalità ho copiato da una guida, termini con un crt. ";" e la successiva sqltable = DB_Connection.Exec(sql) funzuioni perfettamente, mentre nella riga SQL ".EXEC" che mi hai proposto non occorra il crt ";".
Intanto, oggi é una domenica del periodo di ferragosto ancora calda; quindi se puoi goditi un fresco marino o montanaro. Io, da questo punto di vista, sono ultra fortunato: abito in collina e posso scendere in mare in soli 8'.
Poi, se ti va di sopportarmi ancora, riprenderemo questo duro cammino verso la soluzione del ".EXEC".
 :-)  :-)  :ciao:  :ciao:
:ciao: