Update di una intera tabella in Access tramite VB.Net

martedì 21 agosto 2007 - 19.45

amartya Profilo | Junior Member

Ciao Ragazzi, da giorni cerco di risolvere un problema, sento che ci sono vicino ma ancora non ho risolto.
In pratica devo fare l'Update di una tabella all'interno di un DB access, a tal fine ho utilizzato il dataset ed il dataadapter.
In sostanza aggiungo un record alla tabella1 riordino la tabella in funzione di un ordine decrescente e in questo specifico ordine vorrei salvarla.
Il codice è
:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Non capisco perchè il comando da.Update(ds1, "Tabella1")
avete qualche idea?
Grazie
Amartya

SSUPERPIPPO Profilo | Guru

Non ho ben capito dov'è il problema.!?!?

Ti dà errore? Non salva?

Ciao

Ale

amartya Profilo | Junior Member

Come vedete dall'orario è un problema che mi sta a cuore : - )
Si scusatemi se sono stato poco chiaro, in effetti il problema è che non fa l'update, cioè la tabella 1 quando vado su database non è stata salvata nel modo decrescente. Aggiungo inoltre che nella datagridview il dataset viene visualizzato in maniera corretta, segno che la query è stata fatta correttamente.
Quindi una volta riordinati i dati nella maniera prescelta vorrei salvarla in quel modo.
Deduco che poichè visualizzo correttamente il dataset riordinato nella dgv, il problema stia nell'update.
Grazie per i vosti eventuali aiuti (ne ho bisogno)
Amartya

lbenaglia Profilo | Guru

>Si scusatemi se sono stato poco chiaro, in effetti il problema
>è che non fa l'update, cioè la tabella 1 quando vado su database
>non è stata salvata nel modo decrescente.
In un RDBMS l'ordine delle righe di una tabella non ha alcun significato dato che il query processor potrebbe restituire un ordine differente in base a come decide di risolvere una query.
Se vuoi ottenere un determinato ordine in fase di interrogazione, devi specificare esplicitamente la clausola ORDER BY.

>Grazie per i vosti eventuali aiuti (ne ho bisogno)
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

SSUPERPIPPO Profilo | Guru

Conconrdo pienamente con il grande Benaglia!

Ciao

Ale

amartya Profilo | Junior Member

Ciao ragazzi e grazie della risposta, lo so che nel DataBase non è importante l'ordine.
Il fatto è che per me è necessario salvare i dati in quel preciso ordine, vi spiego perchè:
dopo che è stata salvata la tabella in quel preciso ordine, l'applicazione lancia un update dinamico (cioè aggiorna continuamente i valori delle celle della prima riga in funzione dei valori che un server remoto gli da, utilizando anche delle where clause dinamiche)oltre all'aggiornamento in simultanea un oggetto .dll costruito in Matlab esegue una interrogazione in modalità solo lettura alla medesima tabella e svolge complessi calcoli matematici, uno dei quali è un fit polinomiale per il quale l'ordine è conditio sine qua non.
Ora se ad interrogare la tabella del DB fosse solo l'applicazione VB.Net poco male, gestisco tutto all'interno del dataset attraverso un ORDER BY, ma quando ci sono diversi attori per me la strada più semplice è quella di ordinarli oltre che nel DataSet anche nello storage del database, cioè nella mia tabella oggetto della questione.
Aggiungo che già adesso eseguo una query con ORDER BY ed ottengo il risultato sperato, vorrei soltanto che lo stesso risultato mi si salvasse nel database e non avvenisse solo al livello del dataset.
Lo so che possono esserci diverse strade ma se questa è percorribile in pratica ho finito in pochissimo tempo.
Io credo che il metodo sia vicino a quello postato, ma non funziona
Spero possiate darmi una mano, grazie ancora.
Amartya

SSUPERPIPPO Profilo | Guru

Se vuoi che il database conservi l'ordinamento naturale di inserimento, dovresti ogni volta che apporti modifiche (inserimenti) svuotare la tabella di destinazione e salvare i dati nel nuovo ordine.
Diversamente, le operazioni di update o di inserimento, conservano l'ordine originale dei record.

Ciao

Alessandro

amartya Profilo | Junior Member

Ok, vedo la strada.
Saresti così gentile da dirmi come fare a svuotare la tabella al fine di inserire i dati secondo l'ordine (peraltro già stabilito nel dataset) nella tabella stessa.
Grazie mille
Amartya

amartya Profilo | Junior Member

Pensandoci potrei utilizzare il comando delete?
Come per esempio:
sql = "DELETE * FROM Tabella1"

Scusate l'ignoranza ma non sono un'esperto ed è la prima volta che utlizzo questo comando.
Amartya

lbenaglia Profilo | Guru

>Saresti così gentile da dirmi come fare a svuotare la tabella
>al fine di inserire i dati secondo l'ordine (peraltro già stabilito
>nel dataset) nella tabella stessa.
TRUNCATE TABLE nome_tabella;

Se poi ti limiti a fare una SELECT * FROM nome_tabella; allora probabilmente verrà eseguito un full table scan che ti restituirà effettivamente le righe nell'ordine di inserimento, mentre una qualunque altra query con JOIN, GROUP BY, ecc potrebbe restituirti le righe in un ordine arbitrario, quindi occhio

>Grazie mille
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

SSUPERPIPPO Profilo | Guru

Va bene come dice Benaglia per l'eliminazione dei record, oppure anche il comando DELETE.

Fai molta attenzione al rowstatus del tuo datatable prima di eseguire l'update.

Se tu carichi i dati in un DataTable questi normalmente assumono il rowstate=unchanged per cui se elimini i dati dalla tabella di origine e poi esegui un update del DataTable, non salva nulla.
Quando crei il datatable con il metodo Fill devi aver cura di impostare la proprietà del dataadapter AcceptChangesDuringFill=False. In questo modo tutte le riche assumono il rowstate=added e quindi quando effettui poi l'update vengono memorizzate come nuove righe.

Spero di essermi spiegato.

Ciao

Alessandro

amartya Profilo | Junior Member

Ragazzi vi ringrazio , cerco di mettere in pratica i vostri consigli.
Vi faccio sapere

amartya Profilo | Junior Member

Ciao Ragazzi per dovere di cronaca, vi dico che ho abbandonato quella strada la vedo molto complessa e piena di insidie.
Ho preferito puntare ad inseire nella where clause una condizione in più ( l'indicatore della riga dove effettuare l'update) così da slegarmi dalla necessità che l'update venga effettuato solo nella prima riga.
Eseguirò poi il riordino dei valori in ambito Matlab (Penso che le query siano uguali quindi spero di usare il classico ORDER BY).
Per quanto riguarda l'update comunque sono già riuscito ad inserire il codice corretto al fine di effttuare l'update nella riga desiderata.
Grazie vi farò sapere gli ulteriori sviluppi.
Amartya
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5