Dies ist wahrscheinlich eine einfache Sache zu tun, aber ich mache nur mein erstes vb-Projekt, so bin ich mir nicht sicher, wie dies zu 100% zu tun, so entschuldigt, wenn das folgende Problem ist eigentlich sehr einfach.Return maximale ID-Nummer aus einer Datenbank
Grundsätzlich, was ich tun muss, wenn ich eine Datenbanktabelle in ein Ultraregid lade, muss ich die maximale Ganzzahl, die in einem Feld gespeichert ist, abrufen.
Um dies deutlicher zu erklären, hat jeder Datensatz in der Datenbank seine eigene ID-Nummer, daher muss ich jeden Datensatz durchlaufen und den mit der höchsten ID-Nummer finden und die ID zurückgeben, damit diese verwendet werden kann in anderen Berechnungen.
Ich weiß, dass ich SQL = SELECT MAX(supportID) FROM tblIncidents
zum Beispiel verwenden kann, um die höchste ID-Nummer in dieser Tabelle abzurufen.
Also, wie gehe ich über Deklaration das Ergebnis davon (also, die höchste ID-Nummer) als Variable, so dass ich es zuerst in einer Nachricht anzeigen kann, um mir zu beweisen, dass die Abfrage funktioniert hat, und zweitens so Ich kann die Variable verwenden, um die ID in meinem Code zu verwenden?
Ein Beispiel; Dies ist der Code zum Speichern eines neuen Datensatzes in der Tabelle tblIncidents.
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Dim incidentSolved As Boolean = False
If cboxSolved.Checked Then
incidentSolved = True
End If
If txtClientSave.Text = "" Then
MsgBox("Client name cannot be blank")
ElseIf rtbProblem.Text = "" Then
MsgBox("Problem cannot be blank")
ElseIf cboxSolved.Checked = True And rtbSolution.Text = "" Then
MsgBox("Please enter solution")
Else
database.SaveNewIncident(txtClientSave.Text, dtpStart.Value, dtpEnd.Value, rtbProblem.Text, dtpStartTime.Value, dtpEndTime.Value, cboxSolved.Checked, rtbSolution.Text, _con)
txtClientSave.Text = ""
rtbProblem.Text = ""
rtbSolution.Text = ""
dtpStart.Value = Date.Today
dtpEnd.Value = Date.Today
dtpStartTime.Value = DateTime.Now
dtpEndTime.Value = DateTime.Now
cboxSolved.Checked = False
End If
End Sub
Datenbank-Funktion, die
Public Shared Function SaveNewIncident(ByVal clientName As String, dateStart As Date, dateEnd As Date, ByVal incidentProblem As String, ByVal timeStart As String, ByVal timeEnd As String,
ByVal incidentSolved As Boolean, ByVal incidentSolution As String, _Con As OleDbConnection)
Dim tr As OleDbTransaction = Nothing
Try
tr = _Con.BeginTransaction()
Dim Dc As New OleDbCommand
Dc.Connection = _Con
Dc.CommandType = CommandType.Text
Dc.CommandText = "INSERT INTO dbo.tblIncidents VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"
Dc.Transaction = tr
Dc.Parameters.Add("@clientName", OleDbType.VarChar).Value = clientName
Dc.Parameters.Add("@dateStart", OleDbType.Date).Value = dateStart
Dc.Parameters.Add("@dateEnd", OleDbType.Date).Value = dateEnd
Dc.Parameters.Add("@incidentProblem", OleDbType.LongVarChar).Value = incidentProblem
Dc.Parameters.Add("@timeStart", OleDbType.VarChar).Value = timeStart
Dc.Parameters.Add("@timeEnd", OleDbType.VarChar).Value = timeEnd
Dc.Parameters.Add("@incidentSolved", OleDbType.Boolean).Value = incidentSolved
Dc.Parameters.Add("@incidentSolution", OleDbType.LongVarChar).Value = incidentSolution
Dc.ExecuteNonQuery()
tr.Commit()
MsgBox("Save successful")
Catch ex As Exception
mdInit.errorLog(ex.Message, ex.StackTrace)
MsgBox("Failed to save data, refer to error log")
tr.Rollback()
End Try
End Function
Was Sie bisher versucht haben? Außerdem ist diese Art von Logik oft kein guter Ansatz, denn was passiert, wenn ein neuer von jemand anderem eingefügt wird, nachdem Sie diesen Wert abgerufen haben? –
@SeanLange Hallo Sean, diese Anwendung wird nur von 1 Person verwendet, so dass die Insertion Verwirrung nicht passieren wird. Der Grund dafür ist, dass ich eine Importfunktion in das Programm geschrieben habe, um eine vorhandene Datenbank durch eine neue zu überschreiben, was jedoch bedeutete, Identity_Insert in SQL Server zu deaktivieren. Also jetzt auf meiner Schaltfläche Speichern, muss ich die höchste aktuelle ID abrufen und erhöhen, um den Wert zu bestimmen, der in die ID-Spalte –
Warum nicht die Zeile einfügen und die OUTPUT-Klausel verwenden? Auf diese Weise müssen Sie nicht hoffen, dass Ihr Wert derselbe ist. –