[VS2005] Inserimento unico record su Access

mercoledì 16 luglio 2008 - 10.04

gdlcore Profilo | Junior Member

Ciao a tutti, ho un problema quando scrivo su Access:
ho un form di inserimento anagrafica Azienda che va compilato con i dati dell'azienda che utilizza il software. Questi dati vengono salvati in una tabella Access con un tasto "Salva".
Ora vorrei che se dovessi andare a modificare in un altro momento uno o più dati inseriti precedentemente mi andasse a sovrascrivere quelli vecchi. Quindi dovrei bloccare il salvataggio sulla tabella ad un unico record..qualcuno mi potrebbe aiutare? Grazie mille..

alexmed Profilo | Guru

Ciao
Anche a me servirà la stessa funzione, quindi, premesso che non l'ho ancora sperimentata, avrei questa idea:

Nella tabella andrei a mettere dei dati di default (tipo nella colonna Ragione Sociale scriverei : "Inserire il nome della Società") dopodichè andrei semplicemente, con il pulsante Salva, a fare l'UPDATE del record n. 1


Ciao

gdlcore Profilo | Junior Member

Esatto bisognerebbe fare una cosa del genere..ma come?A livello di codice..

alexmed Profilo | Guru

Ciao

Si.
Nell'evento click del tasto Salva ci saranno le istruzioni per connetterti al DB Access

Dim connectionString As OleDbConnection = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\myDbAccess.mdb"

Vedi:
http://msdn.microsoft.com/it-it/library/system.data.oledb.oledbconnection.connectionstring(VS.80).aspx

e la query di aggiornamento:

Dim queryString As String = "UPDATE Nome_Tabella SET Descrizione = Nuovo_Valore WHERE ID_Azienda= 1"

Dim connection As New OleDbConnection(connectionString)
Dim command As New OleDbCommand(queryString, connection)

connection.Open()

Dim reader As OleDbDataReader = command.ExecuteReader()

connection.Close()


Ciao
PS
Stò uscendo.

Apple Profilo | Newbie

Un'altra possibile soluzione è quella di visualizzare l'anagrafica in varie textbox.
Se non viene implementato un sistema di .MoveNext viene reso accessibile solo il primo record.

TOPOAMORE Profilo | Expert

Ciao
visto che la riga e una dovete fare una cosa del genere

AvvioForm_load
Carico il Dataset:

DataAdapter.Fill(Dataset)

Visto che il record e unico:

me.txtNome1.text = Dataset.Tabella(0).Rows(0).items("Nome")
me.txtCognome1.text=dataset.tabella(0).ROws(0).items("Cognome")
ecc...

Una volta modificato il tutto

con il tasto salva andate solomente a aggiornare i nuovi valori e il gioco e fatto

DataAdapter.Update(DataSet)

Ciao Ciaoooo

gdlcore Profilo | Junior Member

Sono allo stesso punto di prima..non sono riuscito a risolvere, non riesco ad aggiornare quella riga del db..
il mio codice è questo:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Mi da errore nella riga:
Result = cmdModArt.ExecuteNonQuery
Nessun valore specificato per alcuni parametri necessari.

Non so per quale motivo..
Devo fare in modo di modificare la riga del database..non si riesce..
Aspetto vostro aiuto grazie..

alexmed Profilo | Guru

Prova così:

Using ConnEl As New OleDb.OleDbConnection(strConn)
ConnEl.Open()
querystring = "UPDATE Anagrafica SET RagioneSociale = Ragio WHERE ID = 1"
Dim cmdModArt As New OleDb.OleDbCommand(queryString, ConnEl)

cmdModArt.ExecuteNonQuery
End Using

Ciao

Una altra cosuccia:

querystring = "UPDATE Anagrafica SET RagioneSociale = N'" & Ragio & "' WHERE ID = 1"

Ok, adesso dovrebbe funzionare

TOPOAMORE Profilo | Expert

ciao
con il dato nuovo di Ragio devi ripopolare la stessa colonna/riga del Dataset:
Es. Dataset.Table(0).Row(0).Item("Ragio")=me.textboxRagio.text

ora aggiorni il dataset

DataAdapter.Update(Dataset.Table(0))

Da dire che gli oggetti usati in questo esempio devono avere il nome dei tuoi che usi nella Class

oltretutto la tua stringa Update e errata in quanto tu hai scritto:
querystring = "UPDATE Anagrafica SET RagioneSociale = Ragio WHERE ID = 1" Dim cmdModArt As New OleDb.OleDbCommand(queryString, ConnEl)

mentre deve essere in questo modo:

querystring = "UPDATE Anagrafica SET RagioneSociale = ? WHERE ID = ?" Dim cmdModArt As New OleDb.OleDbCommand(queryString, ConnEl) With cmdModArt.Parameters .add("RagioneSociale",oletype.text,50,"RagioneSociale") .add("Id",oletype.int,0,"id").suorceVersion=original end with

Fammi sapere

Ciaooooo

gdlcore Profilo | Junior Member

Grazie innanzitutto delee risposte, Topoamore io non dovrei aver bisogno di scrivere nel dataset ma direttamente sul db.
Invece la soluzione di alexmed credo che si avvicini molto a quella giusta ma continua a darmi errore..
Questo è il codice:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Per la riga:
cmdModArt.ExecuteNonQuery()
Questo errore:
Nessun valore specificato per alcuni parametri necessari.

Come mai..gia mi era capitato ed era il percorso del file,ora cos'è?

alexmed Profilo | Guru

Ciao
Due cose:

nella "querystring " devi togliere la N ma tra l'uguale e il doppio apice (") ci deve essere un'apostrofo ('); idem tra il doppio apice (") e la W di WHERE
oltre agli spazi, quindi copia questo:

querystring = "UPDATE Anagrafica SET RagioneSociale = '" & Ragio & "' WHERE ID = 1"

Poi per quanto riguarda "WHERE ID = 1"

Come si chiama la colonna primaria della tabella?
IDRagioneSociale?
id_Ragio?
pippo?

devi sostituire ID con la tua colonna dove andrà a cercare il numero 1

quindi ad esempio: "UPDATE ... WHERE pippo = 1"

Io ho provato su un DB Access che avevo e funziona; al limite passami una copia del tuo DB con solo la tabella Anagrafica.

Ciao

gdlcore Profilo | Junior Member

L'avevo già sostituito, la colonna si chiama proprio ID, l'ho messa per dargli un riferimento di unica riga.
Ho aggiunto quegli apici che mi hai detto e sempre in quella riga mi da errore, ma è diverso da prima.
L'errore è:
Tipi di dati non corrispondenti nell'espressione criterio.
Nella riga:
cmdModArt.ExecuteNonQuery()


Dimmi tu..

alexmed Profilo | Guru

Ciao,
prova a mandarmi il db con solo la tabella Anagrafica.

gdlcore Profilo | Junior Member

Prova a vedere se riesci a fare qualcosa..grazie mille..

alexmed Profilo | Guru

Ok ... risolto!
Il campo ID è impostato di tipo "String", generalmente si dichiara di tipo Integer in quanto trattasi di contatore.
Detto questo hai 2 strade:
Quella più corretta
1. Modifichi la colonna ID da tipo String a tipo Integer
e quella meno
2. Modifichi la queryString mettendo 1 tra i famosi apici '1'
querystring = "UPDATE Anagrafica SET RagioneSociale = '" & Ragio & "' WHERE ID = '1'"


Speriamo!!!



gdlcore Profilo | Junior Member

Funziona!!Incredibile per 2 apici..assurdo!Complimenti,sei stato proprio bravo!Spero che se ho ancora qualche problema mi verrai in aiuto..

Grazie, ti ho accettato la risposta perchè è proprio quella esatta!

DomA Profilo | Expert


solo x gdlcore
6 un grande?
come mai non hai continuato sull'altro thread dal momento che ti ho postato il codice?!?
Lo ricordi ancora?
http://www.dotnethell.it/forum/messages.aspx?ThreadID=23925


Domenico Mancina

gdlcore Profilo | Junior Member

Perchè mi ha detto un mio amico che non potevo continuare a postare nello stesso thread se avevo altri problemi diversi dal titolo, e quindi ho dovuto farne uno nuovo con titolo adeguato.
E poi è un grande perchè è riuscito a risolvermi il problema trovandomi una soluzione valida, non ci sarei mai arrivato che c'era da cambiare il tipo del campo nel database..
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5