.ldb

martedì 04 novembre 2008 - 11.41

toniovigi Profilo | Expert

Ciao ragazzi,
un piccolo aiutino,

ho creato nella mia pagina.aspx una gridview collegata ad un DB access,ho attivato la possibiltà di fare la modifca sui record della gridview,ora
non capisco perchè quando vado a fare modifica e aggiorna la modifica non mi viene accettata e il campo rimane quello di prima
Inoltre ho notato che nella cartella dove ho il database si è creato un file con un lucchettino che ha lo stesso nome del database con estensione
.ldb

come posso evitare cio?come posso far andare le "modifiche" sul mio db

Grazie

saluti

rossimarko Profilo | Guru

Ciao,

come hai impostato il datasource della griglia? Se usi l'AccessDataSource (http://msdn.microsoft.com/en-us/library/8e5545e1.aspx) devi impostare l'updatecommand per consentirgli di fare l'update. Se l'hai già fatto controlla che la query sia corretta e che ci sia una chiave primaria.


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

toniovigi Profilo | Expert

si l'update command "penso" di averlo messo, ho meglio,selezionato ,nella procedura guidata ho attivato Genera istruzioni di insert update e delete e poi usa concorrenza ottimistica

per quanto riguarda la chiave si , la chiave cè,
ma nada

faccio aggiorna ma nn m aggiorna nulla, nessun errore ma nn aggiorna

rossimarko Profilo | Guru

Puoi postare il codice della griglia e dell'accessdatasource che trovi nella pagina aspx?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

toniovigi Profilo | Expert

GRIGLIA:


<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False"
DataSourceID="AccessDataSource1" ForeColor="#0000CC" Height="190px" Width="1px">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" SortExpression="id" />
<asp:BoundField DataField="MATRICOLA" HeaderText="MATRICOLA" SortExpression="MATRICOLA" />
<asp:BoundField DataField="COGNOME" HeaderText="COGNOME" SortExpression="COGNOME" />
<asp:BoundField DataField="NOME" HeaderText="NOME" SortExpression="NOME" />
<asp:BoundField DataField="TELEFONO" HeaderText="TELEFONO" SortExpression="TELEFONO" />
<asp:BoundField DataField="STANZA" HeaderText="STANZA" SortExpression="STANZA" />
<asp:BoundField DataField="SERVIZIO" HeaderText="SERVIZIO" SortExpression="SERVIZIO" />
<asp:BoundField DataField="ASSET_TAG" HeaderText="ASSET_TAG" SortExpression="ASSET_TAG" />
</Columns>
</asp:GridView>

DATASOURCE:


<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/ipet.mdb"
SelectCommand="SELECT * FROM [utenti]" ConflictDetection="CompareAllValues" DeleteCommand="DELETE FROM [utenti] WHERE [id] = ? AND [MATRICOLA] = ? AND [COGNOME] = ? AND [NOME] = ? AND [TELEFONO] = ? AND [STANZA] = ? AND [SERVIZIO] = ? AND [ASSET_TAG] = ?" InsertCommand="INSERT INTO [utenti] ([id], [MATRICOLA], [COGNOME], [NOME], [TELEFONO], [STANZA], [SERVIZIO], [ASSET_TAG]) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" OldValuesParameterFormatString="original_{0}" UpdateCommand="UPDATE [utenti] SET [MATRICOLA] = ?, [COGNOME] = ?, [NOME] = ?, [TELEFONO] = ?, [STANZA] = ?, [SERVIZIO] = ?, [ASSET_TAG] = ? WHERE [id] = ? AND [MATRICOLA] = ? AND [COGNOME] = ? AND [NOME] = ? AND [TELEFONO] = ? AND [STANZA] = ? AND [SERVIZIO] = ? AND [ASSET_TAG] = ?">
<DeleteParameters>
<asp:Parameter Name="original_id" Type="Int32" />
<asp:Parameter Name="original_MATRICOLA" Type="String" />
<asp:Parameter Name="original_COGNOME" Type="String" />
<asp:Parameter Name="original_NOME" Type="String" />
<asp:Parameter Name="original_TELEFONO" Type="String" />
<asp:Parameter Name="original_STANZA" Type="String" />
<asp:Parameter Name="original_SERVIZIO" Type="String" />
<asp:Parameter Name="original_ASSET_TAG" Type="String" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="MATRICOLA" Type="String" />
<asp:Parameter Name="COGNOME" Type="String" />
<asp:Parameter Name="NOME" Type="String" />
<asp:Parameter Name="TELEFONO" Type="String" />
<asp:Parameter Name="STANZA" Type="String" />
<asp:Parameter Name="SERVIZIO" Type="String" />
<asp:Parameter Name="ASSET_TAG" Type="String" />
<asp:Parameter Name="original_id" Type="Int32" />
<asp:Parameter Name="original_MATRICOLA" Type="String" />
<asp:Parameter Name="original_COGNOME" Type="String" />
<asp:Parameter Name="original_NOME" Type="String" />
<asp:Parameter Name="original_TELEFONO" Type="String" />
<asp:Parameter Name="original_STANZA" Type="String" />
<asp:Parameter Name="original_SERVIZIO" Type="String" />
<asp:Parameter Name="original_ASSET_TAG" Type="String" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="id" Type="Int32" />
<asp:Parameter Name="MATRICOLA" Type="String" />
<asp:Parameter Name="COGNOME" Type="String" />
<asp:Parameter Name="NOME" Type="String" />
<asp:Parameter Name="TELEFONO" Type="String" />
<asp:Parameter Name="STANZA" Type="String" />
<asp:Parameter Name="SERVIZIO" Type="String" />
<asp:Parameter Name="ASSET_TAG" Type="String" />
</InsertParameters>
</asp:AccessDataSource>

rossimarko Profilo | Guru

Ciao,

se guardi la query generata direi che manca una chiave univoca che identifica il record quindi fa una where sui valori originali:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Tu hai una colonna che rappresenta la tua chiave univoca?
Per impostare una chiave devi modificare la query mettendo la where solo sui campi che ti interessano e poi devi specificare sulla gridview il campo chiave con la proprietà DataKeyNames (http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.gridview.datakeynames.aspx)
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

toniovigi Profilo | Expert

Marco scusa non capisco

io ho la mia tabella

Id->primary key
Matricola
Cognome
Nome
telefono
Stanza
servizio
Asset

ho controllato l'update che viene generato :

UPDATE [utenti] SET [MATRICOLA] = ?, [COGNOME] = ?, [NOME] = ?, [TELEFONO] = ?, [STANZA] = ?, [SERVIZIO] = ?, [ASSET_TAG] = ? WHERE [id] = ? AND [MATRICOLA] = ? AND [COGNOME] = ? AND [NOME] = ? AND [TELEFONO] = ? AND [STANZA] = ? AND [SERVIZIO] = ? AND [ASSET_TAG] = ?

ma nn va!

rossimarko Profilo | Guru

Se la tua primary key è l'id allora mi aspetto una query di update fatta così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

invece la tua controlla anche i valori originali:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

toniovigi Profilo | Expert

.......nn m torna marco..

ma mi sa che non hai capito il problema

io ho la gridview

ho attivado la possibilita di modificare
id Cognome Nome Servizio Stanza Asset
Modifca xx xxxx xxx xx xx xxx

quando clicco modifica i valori si possono modificare

ovviamente il campo id no perchè e chiave primaria

quando poi faccio aggiorna

non mi viene presa nessuna modifica!!!

Non capisco cosa devo fare sulla query,alla fine dallo Smart Tag della gridview viene generato tt automaticamente no???

rossimarko Profilo | Guru

Si il codice viene generato in automatico, ma quello che bisognerebbe capire è se la query di update non viene lanciata oppure se viene lanciata ma l'update non viene fatta perchè la where non soddisfa i criteri corretti.

Cerco di spiegarmi meglio. Il designer ti ha proposto una query di update che fa la where sull'id e sugli altri campi. Supponiamo ad esempio che tu abbia una tabella di Nome "Pippo" con una colonna "Campo".
Se tu lanci la tua pagina e modifichi il valore della colonna da "valoreOriginale" a "Valore" verrà eseguita questa query su access
UPDATE Pippo SET Campo="Valore" WHERE ID=2 AND Campo="ValoreOriginale"

Per cercare di capire perchè non va sarebbe più opportuno togliere dalla where i valori originali, lasciare solo l'id (UPDATE Pippo SET Campo="Valore" WHERE ID=2) e vedere se funziona. Potrebbe ad esempio non essere corretto il filtro della where e quindi non viene fatta l'update del record.

Ti consiglio inoltre di modificare i dati dalla pagina aspx senza wizard, perchè hai più controllo su quello che viene fatto. Qui trovi una spiegazione delle varie voci riportate: http://www.aspitalia.com/script/671/GridView-AccessDataSource-Accesso-Dati-ASP.NET-2.0.aspx


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

toniovigi Profilo | Expert

mmmmm



nn capisco cosa centra la where xo..

alla fine io faccio un update e basta, cioe la condizione nn la specifico

bho nn capisco..ho perso molti colpi..

rossimarko Profilo | Guru

>nn capisco cosa centra la where xo..
>
>alla fine io faccio un update e basta, cioe la condizione nn
>la specifico

La condizione invece è specificata, è nel codice che hai inviato tu:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Adesso bisogna capire come mai non vengano aggiornati i dati su access. Se tu fai una update su access e la where non ritorna nessun record, non viene fatta nessuna update, per quello dicevo di fare l'update specificando solo l'id, per semplificare un po' le cose.

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
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