Ceci est probablement une chose facile à faire, mais je ne fais que faire mon premier projet vb donc je ne suis pas sûr comment faire 100%, donc des excuses à l'avance si le problème suivant est en fait très simple.Retour nombre maximum d'identification à partir d'une base de données
Fondamentalement, ce que je dois faire est, lors du chargement d'une table de base de données dans un UltraGrid, je dois récupérer l'entier maximal qui est stocké dans un champ. Pour expliquer cela plus clairement, chaque enregistrement dans la base de données a son propre numéro d'identification, donc j'ai besoin d'itérer chaque enregistrement et de trouver celui avec le numéro d'identification le plus élevé, et retourner l'ID, de sorte que cela peut alors être utilisé dans d'autres calculs.
Je sais que je peux utiliser SQL = SELECT MAX(supportID) FROM tblIncidents
par exemple pour récupérer le plus grand nombre d'ID stocké dans ce tableau. Alors, comment dois-je déclarer le résultat de ceci (donc, le numéro d'identification le plus élevé) comme variable de sorte que je puisse d'abord l'afficher dans un messagebox pour me prouver que la requête a fonctionné, et deuxièmement Je peux utiliser la variable comme moyen d'utiliser l'identifiant dans tout mon code?
Un exemple; C'est le code pour enregistrer un nouvel enregistrement dans la table 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
fonction de base de données qui est appelée
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
Qu'avez-vous essayé jusqu'à présent? En outre, ce type de logique n'est souvent pas une bonne approche car que se passe-t-il si une fois que vous récupérez cette valeur, une nouvelle est insérée par quelqu'un d'autre? –
@SeanLange Bonjour Sean, cette application ne va être utilisée que par 1 personne, donc la confusion d'insertion ne se produira pas. La raison pour laquelle je dois faire ceci, est parce que j'ai écrit une fonction d'importation au programme pour écraser une base de données existante avec un nouveau, mais cela signifiait éteindre Identity_Insert dans SQL Server. Alors maintenant sur mon bouton Enregistrer, je dois récupérer l'ID courant le plus élevé et incrémenter pour déterminer la valeur d'utilité dans la colonne ID –
Pourquoi ne pas insérer la ligne et utiliser la clause SORTIE? De cette façon, vous n'avez pas à espérer que votre valeur est la même. –