Jag försökte uppdatera två olika konto i samma tabell konto1 och konto2, men det uppdateras bara konto2 och inte konto1<br> Vet inte om du tänkt på detta men om du skriver ett negativt belopp kan du undertrakasera kontot du överför pengar till.<br>Uppdatering!!!!!!
<br>
hur ska jag rätta felet för att båda konton ska uppdateras på en knapp tryckning:<br>
<br>
Här är koden:<br>
<code>
Private Sub Command1_Click()
Dim SQL As String
Dim saldo1, saldo2, belopp As Integer
saldo1 = Text4
saldo2 = Text6
belopp = Text2
If Text1 = Text3 Then
MsgBox "Överföringen avbryts pga samma kontonummer", vbInformation, "Fixa det"
Exit Sub
End If
If Text4 < belopp Then
MsgBox "För stort belopp att överföra! Transaktionen avbryts.", vbInformation, "Fixa det"
Exit Sub
End If
saldo2 = saldo2 + belopp
saldo1 = saldo1 - belopp
'---------Konto1 uppdateras-------------
SQL = "UPDATE konto SET saldo ="
SQL = SQL & saldo1 & " WHERE kontonr="
SQL = SQL & Text1.Text & ""
MsgBox (SQL)
'---------Konto2 uppdateras-------------
SQL = "UPDATE konto SET saldo ="
SQL = SQL & saldo2 & " WHERE kontonr="
SQL = SQL & Text3.Text & ""
MsgBox (SQL)
On Error GoTo Couldnt_insert 'sätt på felhanteraren
'dbkoppling.BeginTrans
dbkoppling.Execute SQL
'dbkoppling.CommitTrans
On Error GoTo 0 'stäng av felhanteraren
Exit Sub
Couldnt_insert:
dbkoppling.RollbackTrans 'släpper låsningar om update
'har misslyckats
MsgBox ("Kunde inte uppdatera!")
Exit Sub
End Sub
</code>
MVH<br>
/Abbe<br>Sv: Uppdatering!!!!!!
<br>
Jag har kikat lite på din kod. Har gjort en egen variant på det du gör. Du kanske kan använda något av den. Så jag skickar med den:
<code>
Function SQLNumber(ByVal Value As Variant) As String
If IsNumeric(Value) Then
SQLNumber = Replace(CStr(Value), Format(0, "."), ".")
Else
SQLNumber = "Null"
End If
End Function
Public Function ExecuteTransaction(Conn As ADODB.Connection, ByVal Account1 As Long, ByVal Account2 As Long, ByVal Amount As Currency) As Boolean
Dim strSQL As String
Dim RecordsAffected As Long
On Error GoTo ExecuteTransaction_Err
Conn.BeginTrans
strSQL = "UPDATE konto SET saldo = saldo - " & SQLNumber(Amount) & vbCrLf & _
"WHERE kontonr = " & Account1 & " AND (saldo - " & SQLNumber(Amount) & ") > 0"
Conn.Execute strSQL, RecordsAffected
If RecordsAffected = 1 Then
strSQL = "UPDATE konto SET saldo = saldo + " & SQLNumber(Amount) & vbCrLf & _
"WHERE kontonr = " & Account2 & " AND (saldo + " & SQLNumber(Amount) & ") > 0"
Conn.Execute strSQL, RecordsAffected
If RecordsAffected = 1 Then
Conn.CommitTrans
ExecuteTransaction = True
Else
Conn.RollbackTrans
End If
Else
Conn.RollbackTrans
End If
ExecuteTransaction_Exit:
Exit Function
ExecuteTransaction_Err:
'släpper låsningar om fel inträffar
Conn.RollbackTrans
End Function
Private Sub Command1_Click()
Dim strSQL As String
Dim Konto1 As Long
Dim Konto2 As Long
Dim Saldo1 As Long
Dim Saldo2 As Long
Dim Belopp As Long
Konto1 = CLng(Text1.Text)
Konto2 = CLng(Text3.Text)
Saldo1 = CLng(Text4.Text)
Saldo2 = CLng(Text6.Text)
Belopp = CLng(Text2.Text)
If Konto1 = Konto2 Then
MsgBox "Överföringen avbryts pga samma kontonummer", vbInformation, "Fixa det"
'Undertrakasering kontrolleras med Andra vilkoret i Where satsen.
'ElseIf Belopp > Saldo1 Then
' MsgBox "För stort belopp att överföra! Transaktionen avbryts.", vbInformation, "Fixa det"
Else
If ExecuteTransaction(dbkoppling, Konto1, Konto2, Belopp) Then
'Uppdatera Text4 och Text6 med nytt saldo
Text4 = GetSaldo(Konto1)
Text6 = GetSaldo(Konto2)
Else
MsgBox "Transaction misslyckades!"
End If
End If
End Sub
Private Function GetSaldo(ByVal Konto As Long) As Currency
Dim rsTemp As ADODB.Recordset
Set rsTemp = New ADODB.Recordset
rsTemp.Open "SELECT saldo FROM konto WHERE kontonr=" & SQLNumber(Konto), dbkoppling
If rsTemp.EOF Then
ElseIf IsNull(rsTemp("saldo")) Then
Else
GetSaldo = rsTemp("saldo")
End If
rsTemp.Close
End Function
</code>