Newsgroup: it.comp.lang.visual-basic
Titolo: Tabella spuria in un MDB

Vorrei sapere se qualcuno di voi ha avuto a che fare con uno stranissimo
inconveniente di creazione automatica di una tabella spuria in un file MDB.
Ho realizzato qualche mese fa un programma in VB6 SP3 che gestisce alcuni
file MDB residenti su un computer di una rete locale comprendente una
cinquantina di postazioni. La rete è Nowel (credo).
Uno di questo file MDB ("ARCOD.MDB") è a sua volta gestito da un programma,
non scritto da me, scritto in Access: io mi limito a leggerne una sola
tabella ("Arch_codici_Prodotto").
Il mio programma si occupa di altri due files MDB ciascuno dei quali ha
ovviamente alcune tabelle; i files si chiamano DVIEW.MDB e UTENTI.MDB.
Al lancio del mio programma creo, in DVIEW.MDB, un collegamento alla tabella
"Arch_codici_Prodotto" del file ARCOD.MDB. Riporto qui sotto il codice
utilizzato perchè credo che sia significativo.
============================================================================
========================
  Dim nn As Integer
   Dim catDB As ADOX.Catalog
   Dim tblLink As ADOX.Table
   Set catDB = New ADOX.Catalog
   ' Open a Catalog on the database in which to create the link.
   catDB.ActiveConnection = cnn
   Set tblLink = New ADOX.Table
   With tblLink
      ' Name the new Table and set its ParentCatalog property to the
      ' open Catalog to allow access to the Properties collection.
      .Name = "Arch_codici_Prodotto"
      Set .ParentCatalog = catDB
      ' Set the properties to create the link.
      .Properties("Jet OLEDB:Create Link") = True
      .Properties("Jet OLEDB:Link Datasource") = NomeArchivioDitta
      .Properties("Jet OLEDB:Remote Table Name") = "Arch_codici_Prodotto"
   End With
   ' Append the table to the Tables collection.
   catDB.Tables.Append tblLink
   Set catDB = Nothing
   Rs99ADO.Open "SELECT * FROM Arch_codici_Prodotto", cnn, adOpenKeyset,
adLockOptimistic, adCmdTableDirect
============================================================================
=======================
E' già successo due volte (2 sole volte !) a distanza di mesi che, senza
intervento da parte di nessuno, sia stata creata in DVIEW.MDB una tabella
collegata dallo stranissimo nome "TMP%#MAU@" che oltretutto ha tutte le
"Autorizzazioni utenti e gruppi" settate a False. Ne consegue che bisogna
manualmente modificare (da Access "Strumenti" - "Sicurezza" -
"Autorizzazioni utenti e gruppi") i vari permessi ("Lettura struttura",
"Modifica struttura", "Amministrazione", "Lettura dati", ecc. ecc.)  prima
di cancellarla fisicamente.
Se non si cancella questa tabella spuria il mio programma non può procedere
ed anzi appare il messaggio :
"Errore -
2147217857
. Oggetto 'Arch_codici_Prodotto' già esistente. E' stata
creata una tabella anomala.".
============================================================================
======================
   Case -
2147217857
         frmSplash.Visible = False
         MsgBox "Errore " + Str$(Err.Number) + vbCrLf + Err.Description +
vbCrLf + "E' stata creata una tabella anomala", vbCritical, "FINE
PROGRAMMA": End
============================================================================
=======================
Questo programma viene utilizzato quotidianamente da moltissime persone
connesse in rete senza altri problemi.
Qualcuna ha idea di come si sia creata questa tabella e, soprattutto, come
evitare che il fatto si ripeta ?
Grazie anticipatamente.
--
Ugo Bottari

creata una tabella anomala.".
...(...)...
L' errore e' proprio quello di duplicazione tabella.
Escludendo virus, manovre dell' utente ed altre cose strane, 
di primo acchito penserei:
1.
Terminazioni improvvise, seppur rare, del programma per qualche errore interno;
2.
Scollegamento della tabella fallito, ma non rilevato perche' magari
l' errore viene gestito da un' istruzione di Resume Next;
3.
Scollegamento della tabella non avvenuto perche' possono verificarsi
casi in cui il flusso del programma non passi di li'.
Avevo visto una storia simile in cui un certo scollegamento avveniva
in una routine tipo cmdEsci_click (invece di Form_Unload). 
Se la finestra veniva chiusa con ALT+F4 il codice non veniva eseguito, 
ma la finestra si chiudeva e il programma terminava, lasciando il
collegamento appeso.
4.
Doppio tentativo di creazione del link alla tabella a causa di 
una ricorsione indesiderata ed imprevista del codice.
Per adesso, non mi viene in mente altro.
Ciao
Aldo