13 messaggi dal 27 giugno 2002
Buogiorno a tutti.

Sto scrivendo un applicazione con Visual Basic 2005 Express Edition su
un db Access.

Scrivo questo codice:

Dim objConn As New OleDbConnection
objConn.ConnectionString = My.Settings.OleDBConnString

Dim strSQL As String = "DELETE * FROM NomeTabella"

Dim objCmd As OleDbCommand = New OleDbCommand

With objCmd
.Connection = objConn
.CommandType = CommandType.Text
.CommandText = strSQL
End With

Try
objConn.Open()
objCmd.ExecuteNonQuery()
Catch ex As Exception
Throw ex
Finally
objConn.Close()
End Try

Ma non elimina nessuna riga... dove sbaglio?
Grazie e saluti.
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

E la connection string com'è valorizzata? Il codice sembra corretto e forse la mancata eliminazione dei record potrebbe dipendere da qualcosa legato al filesystem o al database (es. aperto in sola lettura per qualche ragione). Il codice è usato in una applicazione Web?

.:. Marcello Rutter .:.
13 messaggi dal 27 giugno 2002
Al filesystem ci avevo già pensato...
Per tagliare la testa al toro ho dato full control a Everyone sulla cartella Data

Questa è la sezione del file di configurazione app.config:
<connectionStrings>
<add name="Net_Inventory.My.MySettings.OleDBConnString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=|DataDirectory|\Data\NetInventory.mdb" providerName="System.Data.OleDb" /> </connectionStrings>

E' un applicativo Winforms che sto provando a scrivere il VB 2005 Express Edition.

La cosa che non riesco a capire è che lo stesso codice lo utilizzo in Asp.NET (che uso da un po'...) e non mi da nessun problema...

Ciao.
501 messaggi dal 09 giugno 2006
Contributi
Sì, ad essere sinceri fosse stato un problema di FS avresti dovuto perlomeno ricevere qualche eccezione così come se ci fosse qualche altro errore a livello di JetEngine o provider OleDb.

A questo punto mi verrebbe da pensare (e chiedo scusa per la banalità) che tu stia controllando un database diverso da quello che credi di modificare (magari per qualche altro parametro di configurazione). Oppure nel tuo file di configurazione tu abbia più di un elmento "<add name=..." (nell'esempio che hai postato non è così ma a volte si posta codice diverso da quello realmente impiegato.

Sicuramente il codice VB che hai scritto è corretto e funzionante così come la sintassi T-SQL. Proverei anche a controllare, via debug, il valore di My.Settings.OleDBConnString.

Ciao.

.:. Marcello Rutter .:.
501 messaggi dal 09 giugno 2006
Contributi
Dimenticavo di scriverti una cosa. Siccome dalla sezione di configurazione che hai postato sembra che la connection string sia stata creata utilizzando il Data Source Configuration Wizard, esiste la possibilità che sia attiva la copia del database originale. Questo significa che tutto funziona ma quando avvii il programma, il database viene sempre sovrascritto con quella indicato originariamente. Forse questo è il tuo caso!

Ciao.

.:. Marcello Rutter .:.
13 messaggi dal 27 giugno 2002
Non ci voglio credere!!!
Ho sostituito |DataDirectory| con il percorso reale del file system e adesso funziona tutto!
Ma allora |DataDirectory| che significato ha?!??!!? Dove se lo copia il db?????

Quando ho fatto la stringa di connessione al db mi sono fidato della proceura guidata di VB 2005 e, come spesso succede, ho fatto malissimo!!!

E' due giorni che ci sbatto la testa!
Quanto è più bello il NotePad...!!!!

Grazie mille e scusate il post stupido!
501 messaggi dal 09 giugno 2006
Contributi
Cosa dire: tutto è bene quel che finisce bene!

Vediamo però cosa è successo. Semplicemente, durante la creazione guidata del datasource, hai confermato la copia dinamica del database nella directory dati. Accade pertanto quanto segue: il tuo database .mdb è stato copiato all'interno del tuo progetto come un normale file tant'è che dovresti trovarlo tra i file del Solution Explorer/Project Explorer (e questa operazione viene eseguita una sola volta). Se selezioni tale oggetto noterai che la proprietà "Copy to Output Directory" è attiva e questo provoca l'effetto "indesiderato".

A questo punto, ogni volta che esegui l'applicazione dall'interno dell'IDE, il file viene copiato nella directory di compilazione del programma (bin/Debug o bin/Release a seconda della compilazione eseguita) che, per applicazioni Windows Forms, rappresenta anche la directory dei dati (appunto |DataDirectory|).

|DataDirectory| (nuovo in .NET 2.0) è una stringa di sostituzione risolta in fase di esecuzione (run-time) con la directory dei dati del tuo programma e, per alcuni aspetti, questa tecnica è interessante perché evita di dover memorizzare il percorso assoluto del database cosa difficile da gestire quando distribuisci il programma (nota: la risoluzione della stringa avviene nel provider dei dati non a livello di parametri di configurazione tantè che se leggi il valore di My.Settings.MiaStringaDiConnessione troverai ancora il token |DataDirectory|).

Chiaramente se hai modificato la stringa di connessione inserendo un percorso assoluto ora punti sempre allo stesso DB e tutto funziona. C'è però da osservare che il database .mdb continua ad essere copiato nella directory dell'eseguibile. Inoltre l'uso di |DataDirectory| prescinde dal problema della copia del file.

La soluzione definitiva potrebbe essere continuare ad usare |DataDirectory| ma disattivare la copia del file .MDB nella directory di output.

Riferimenti utili su MSDN:
http://msdn2.microsoft.com/en-us/library/ms254500(VS.80).aspx

Ciao.

.:. Marcello Rutter .:.
13 messaggi dal 27 giugno 2002
Grazie mille!
Sei stato gentilissimo!
Ciao.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.