Condición para evitar id duplicada

Estoy haciendo uns sistema en tres capas en la que la clave o id no es autonumérico, entonces si yo ingreso registros con la misma id, se guarda eb la base de datos sql hice una consulta antes de guardar para verificar si existía ese id en la bd, si existe manda un mnesaje que ya exioste el id sino lo guarda. Pero no se como hacer que si la caapa de datos encontró un valor lo mande a la capa de presentación.
Capa de presentación
objPuesto.Clave = Convert.ToString(TxtClave.Text.Trim())
objPuesto.NombrePuesto = Convert.ToString(TxtPuesto.Text.Trim())
objPuesto.ChecarID() \\ este linea manda a la capa de negocio.
If chec > 0 Then \\ aqui no se como hacer la condicion si encotro mayor a cero
MsgBox("La clave ya existe")
Else
objPuesto.Guardar()
If Not objPuesto.BlnError Then
Actualizar()
MsgBox("xito al guardar", MsgBoxStyle.Information, "GUARDAR REGISTROS")
Else
MsgBox("No se pudo guardar el registro" + vbCrLf & "Intentelo de nuevo", MsgBoxStyle.Critical, "ERROR AL GUARDAR")
Exit Sub
End If
End If
capa de negocio
Public Sub ChecarID()
objPersPuesto.ChecarID(a)
BlnError = objPersPuesto.BlnError
capa de datos
Public Sub ChecarID(ByVal clave As String)
Dim strSQl As String
strSQl = ""
strSQl = "select count(*) from Puesto where IdPuesto = " & clave
objBD.Ejecutar(strSQl)
BlnError = objBD.BlnError
End Sub
En esta parte no se como hacer para que mande el resultado a la capa de presentación.
Respuesta
1
Cuando yo requiero validar este tipo de cosas uso el siguiente código:
Set rs = New ADODB.Recordset
rs.LockType = adLockOptimistic
rs.CursorType = adOpenKeyset
rs.Source = ("select OrderId from TBLorders WHERE OrderID = '" & textbox & "' ")
rs.ActiveConnection = cn
rs.Open //De este modo el RecordCount será mayor a 0 si el ID ya existe.
If rs.RecordCount > 0 Then
  msgbox "El ID ya existe"
Else
  Msgbox "El ID esta disponible" 
End If 
Sin embargo la práctica de solicitar el ID al usuario no es recomendable, lo ideal es que esto sea un autonumérico en la base o si no se puede de esta forma, al menos tu código revise cual es el código mayor en la base de datos y asigne el inmediatamente disponible. Esto lo podrías hacer así:
Set rs = New ADODB.Recordset
rs.LockType = adLockOptimistic
rs.CursorType = adOpenKeyset
rs.Source = ("select OrderId from TBLorders ORDER BY OrderID DESC ")
rs.ActiveConnection = cn
rs.Open //De este modo el primer registro del recorsource será el ID mayor que ya existe.
If rs.RecordCount > 0 Then
 rs.moveFirst
 IDdisponible = rs("OrderId")+1 // asigna el siguiente ID disponible a la variable IDdisponible
Else
 IDdisponible=1 // por si no hay IDs en la base
End If
Me cuentas si te sirve la ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas