Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    4

    [VB .NET e Access] Problema con update di un record

    salve ragazzi, spero possiate darmi un mano. sto impostando la seguente stringa di update:

    Public Shared updateString As String = "UPDATE Company SET compFullName = @NAME, compPhoneNumber = @PHONE1, compPhoneNumber1 = @PHONE2, compFaxNumber = @FAX, compEmail1 = @MAIL1, compEmail2 = @MAIL2, compWebAddress = @WEB, idContact = @IDCONTACT, compEmailContacted = @MAILYESNO, compTelContacted = @PHONEYESNO, compNotes = @NOTES, compCreationDate = @CREATED, compLastModified = @MODIFIED WHERE idCompany = @ID"

    Costruisco tutti i parametri richiesti, con i tipi corretti e li inserisco in una list(of oledbparameter) che passo ad un metodo shared che li aggiunge alla collection di un command (oledbcommand.parameters)... tutto và dove deve andare (è giusto x rendere l'idea) col debugger ho controllato tutto, i parametri e i valori sono giusti. eseguo su tale oledbcommand una ExecuteNonQuery che (porco zio) mi ritorna SEMPRE 0!!!!

    la funzione che esegue la query è questa, è parte di un helper (DBHelper.ExecuteNonQuery):

    Public Shared Function ExecuteNonQuery(ByVal query As String, Optional ByVal params As List(Of OleDb.OleDbParameter) = Nothing) As Integer
    Dim q As OleDb.OleDbCommand
    Dim ret As Integer = 0

    Try
    q = New OleDb.OleDbCommand(query, mConnection) 'mConnection è un campo privato della classe in cui si trova il metodo

    If params IsNot Nothing Then
    If params.Count <> 0 Then
    For Each p As OleDb.OleDbParameter In params
    q.Parameters.Add(p)
    Next

    End If
    End If

    mConnection.Open()

    ret = q.ExecuteNonQuery

    mConnection.Close()

    etc...etc...

    dovrebbe andare, dato che non va, o sto sbagliando qualcosa di macroscopico che non riesco a vedere, oppure c'entra il motore db di access..... (e ti pareva) ho sentito che bisogna inserirli in ordine i parametri da passare al oledbcommand, ma io lo faccio.. per cui il problema non può essere quello.
    ho provato ad utilizzare la stessa funzione (dbhelper.executenonquery) scrivendomi la stringa di update a manina e non passando la lista di parametri, in questo modo funziona, quindi c'è qualcosa che non và nei parametri (ma nel debugger sono tutti giusti!!!), sono sicuro che sia access il colpevole, c'è da adottare qualche metodo particolare??

  2. #2
    Se esiste un record associato all'id @ID e quindi sei sicuro che la query è corretta, molto probabilmente c'è un errore nella denominazione dei parametri. Quando ho utilizzato access per l'ultima volta su progetti web (un anno fa ormai) avevo utilizzato "password = @password". Inutile dire che la query, sebbene corretta, non funzionava perchè dopo ricerche varie scoprì che password è una sorta di parola riservata e quindi non viene interpretata dal motore.
    Guardando a spanne la tua query, proverei innanzitutto a rinominare i parametri @CREATED e @MODIFIED perchè hanno nomi che mi puzzano un po'...
    In generale, almeno io, adotto come nome del parametro lo stesso nome del campo al fine di avere una identificazione chiara ed efficace durante la lettura della query anche a distanza di tempo.

    Prova un po'...e se puoi cerca di passare almeno a mysql

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    4
    Ti ringrazio x la risposta, ho provato a cambiare il nome dei parametri "sospetti" ma continua a non eseguire l'update, hai ragione x quanto riguarda access, ma é giusto provvisorio, il db sarà sql server e access converte nativamente in mdf (sarebbe stato meglio sql server ce, mi rendo conto...). Mi chiedevo, ma esiste un modo x verificare la query passata al motore jet con i valori dei parametri già valorizzati? Una query in formato string, vecchio stile insomma.

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Allora, in Access il nome dei parametri è ? ed è importante non il nome (che è sempre ?) ma l'ordine.
    Inoltre, il nome dei campi è bene racchiuderli con le parentesi quadre ([campo]) per evitare di incappare in parole riservate.
    Se continua a dare errore, io mi comporto così:
    scrivo la query un campo per volta, provando. E questo perchè è abbastanza difficile trovare un campo scritto male
    Pietro

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    4
    caro pietro, t ringrazio, ora funziona... ! ma com'è che con la funzione insert i parametri si inseriscono pure in formato sql server?? vabè, lo prendo per mistero della fede, va bene lo stesso:-P grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.