Modifica tabella AS400

lunedì 11 aprile 2005 - 16.43

BiBi Profilo | Junior Member

Sto creando un'applicazione VB.NET che deve aggiornare delle tabelle su AS400.

Io ho una versione di Client Access 5.2.

Ho creato un DSN di sistema utilizzando il Driver Client Access ODBC.

Nella mia applicazione ho utilizzato come connessione la seguente istruzione:
Dim cn_AS400 As Odbc.OdbcConnection = New Odbc.OdbcConnection("DSN=nome_DSN;UID=mio_uid;PWD=mia_pwd;Driver={iSeries Access ODBC Driver};")

Quando vado a leggere le tabelle funziona tutto correttamente, mentre se cerco di aggiornare i dati mi dà questo errore: "Generazione SQL dinamica per UpdateCommand non supportata per un selectCommand che non restituisce colonne modificabili."

Se creo un database Access con le tabelle collegate utilizzando il DSN di cui sopra;
creo un nuovo DSN collegandolo a questo database Access;
collego la mia applicazione a questo nuovo DSN;
tutto funziona correttamente.

Dato che non volevo assolutamente appoggiarmi ad Access, volevo sapere che cosa ho sbagliato.

Grazie mille!!!

Cteniza Profilo | Guru

Mi sembra che l'errore sia chiarissimo.
Nel comando di select (Select ....) che hai utilizzato per generare il dataadapter hai inserito un join oppure un group by oppure estrai più di una tabella (ci sono di sicuro altri casi).
Sei in una situazione per la quale il wizard non riesce a creare un comando di update.
Anche quando apri una tabella senza chiave mi sembra che si possa incorrere nello sesso problema.
Per risolvere l'ambiguità devi estrarre una sola tabella che abbia una chiave primaria senza join o group by, ecc.
L'alternativa è di scrivere la tua query di update (e di insert / delete probabilmente) direttamente inserendo il comando ed i relativi parametri dove il commandbuilder non riesce ad arrivare e cioè i il commandtext dell'updatecommand/deletecommand/insertcommand del dataadapter.

BiBi Profilo | Junior Member

Ti ringrazione per la tua risposta.
Il DataAdapter contiene una sola tabella che ha una chiave primaria.
Ho anche provato ad effettuare l'aggiornamento utilizzando una query di UPDATE con un Command, ma l'errore mi si ripropone ugualmente.
Quello che non riesco a capire è perchè se attivo il DNS del database Access che ha collegate le stesse tabelle di AS400 il tutto mi funziona correttamente.

Cteniza Profilo | Guru

L'errore probabilmente allora è nella stringa di connessione

BiBi Profilo | Junior Member

La mia stringa di connessione è la seguente:
Dim cn_AS400 As Odbc.OdbcConnection = New Odbc.OdbcConnection("DSN=nome_DSN;UID=mio_uid;PWD=mia_pwd;Driver={iSeries Access ODBC Driver};")

è quella che ho trovato all'interno dei vari articoli trovati su internet.
Come devo configurarla?

Brainkiller Profilo | Guru

Prova ad utilizzare questa:
"Driver={Client Access ODBC Driver (32-bit)};System=NOME_SISTEMA;Uid=UTENTE;Pwd=PASSWORD"

ciao
david

BiBi Profilo | Junior Member

Ho provato, ma anche in questo modo mi restituisce lo stesso errore.
Ho però un dubbio: dato che riesco a leggere i dati sulla tabella, ma non riesco ad aggiornarla, non vorrei che l'ODBC non riesca a portarmi la chiave primaria della tabella, e così .NET mi restituisce l'errore.
E' possibile con VB.NET aggiornare delle tabelle senza una chiave primaria?

Grazie mille per le vostre risposte.

Ciao a tutti!!!

Cteniza Profilo | Guru

Evidentemente era quello che ti avevo detto.
Devi intervenire manualmente dopo la definizione del dataadapter
Il wizard andrà in errore, PRIMA di generare il dataset devi andare ad impostare sul dataadapter le proprietà di tutti i comandi select / insert / update / delete.
Per quanto riguarda update e delete devi fare in modo che sia aggiornato e cancellato un solo record.
Nel caso sulla datatable non siano importate le chiavi puoi intervenire tu mettendole uguali a quelle già impostate su as400

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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5