Jag gör något fel men jag kan inte komma på vad. När jag kör uppdateringskommandot som en sträng fungerar allt perfekt men när jag vill köra min lagrade procedur händer inget. Så fort jag hör ordet kan inte uppdatera/addera och är ett webb-gränssnitt och access så tänker jag att användaren guest måste tillåtas skriva till accessdatabasen. Du säger att det fungerar direkt i access - därmed styrkes detta antagande. Det fungerar när jag kör strängen (markerad i koden) som även den ligger i samma rutin på sidan! Jag hittade felet! Parametrarna måste ju såklart ligga i samma ordning som de efterfrågas i proceduren. JAg tycker du allt ska deklarera parametrarna i din SQL fråga. Så kan du besatäma ordning och datatyp för dem. Jag tackar, det tipset skall jag komma ihåg!Problem med att uppdatera Access via lagrad procedure
Min lagrade procedur i Access (är testad inne i Access):
<code>
UPDATE tblUserDetails SET tblUserDetails.FirstName = [@FirstName], tblUserDetails.LastName = [@LastName]
WHERE tblUserDetails.fkUserID=[@UserID];
</code>
Min subrutin på sidan
<code>
'--- kopplingssträng
Private objConn As New OleDbConnection(ConfigurationSettings.AppSettings("objDbConn"))
Sub UpdateUserDetails(Sender As Object, E As EventArgs)
Dim objCmd As New OleDbCommand()
Dim objParam As New OleDbParameter()
Dim recordsAffected As Integer
Dim intUserID As Integer = Session("intUserID")
Dim strFirstName As String = tbFirstName.Text
Dim strLastName As String = tbLastName.Text
'--- anropar en stored procedure
objCmd = New OleDbCommand("spUpdateUserDetails", objConn)
objCmd.CommandType = CommandType.StoredProcedure
*** NÄR JAG ANVÄNDER DENNA STRÄNG FUNGERAR DET ***
' objCmd = New OleDbCommand("UPDATE tblUserDetails SET FirstName='" & tbFirstName.Text & "',LastName='" & tbLastName.Text & "' WHERE fkUserID = " & Cint(Session("intUserID")), objConn)
***********************************************
'--- parametervärde
objParam = New OleDbParameter("@UserID", OleDbType.Integer)
objParam.Value = intUserID
objCmd.Parameters.Add(objParam)
'--- parametervärde
objParam = New OleDbParameter("@FirstName", OleDbType.Char)
objParam.Value = strFirstName
objCmd.Parameters.Add(objParam)
'--- parametervärde
objParam = New OleDbParameter("@LastName", OleDbType.Char)
objParam.Value = strLastname
objCmd.Parameters.Add(objParam)
'--- provar koppling, fråga
Try
objCmd.Connection.Open()
recordsAffected = objCmd.ExecuteNonQuery()
lblMessage.Text = intUserID & " " & strFirstName & " " & strLastName & "<br>" & recordsAffected.ToString & " uppdaterades!"
Catch Ex As OleDbException
Throw Ex
Finally
objCmd.Connection.Close()
End Try
End Sub
</code>Sv: Problem med att uppdatera Access via lagrad procedure
Sv: Problem med att uppdatera Access via lagrad procedure
Sv: Problem med att uppdatera Access via lagrad procedure
Exempel:
<code>
UPDATE tblUserDetails SET tblUserDetails.FirstName = [@FirstName], tblUserDetails.LastName = [@LastName]
WHERE tblUserDetails.fkUserID=[@UserID];
</code>
I mitt kodeexempel ovan så anger jag första parametern som @UserID och detta generar att:
<code>
UPDATE tblUserDetails SET tblUserDetails.FirstName = [@UserID], tblUserDetails.LastName = [@FirstName]
WHERE tblUserDetails.fkUserID=[@LastName];
</code>Sv: Problem med att uppdatera Access via lagrad procedure
<code>
PARAMETERS [@UserID] Long, [@FirstName] Text ( 255 ), [@LastName] Text ( 255 );
UPDATE tblUserDetails SET tblUserDetails.FirstName = [@FirstName], tblUserDetails.LastName = [@LastName]
WHERE tblUserDetails.fkUserID=[@UserID];
</code>
Detta är syntaxet för det i Access 2000.
Du kan deklarera parametrer i access frågedesigner. Under "Query"/"Parameters...". (Sorry har eng. version)Sv: Problem med att uppdatera Access via lagrad procedure