Foros del Web » Programación para mayores de 30 ;) » .NET »

No permitir gravar datos repetidos en tablas de SQL

Estas en el tema de No permitir gravar datos repetidos en tablas de SQL en el foro de .NET en Foros del Web. Hola amigos, en todos los temas me han ayudado bastante, ahora traigo una consulta mas... Tengo un formulario en VS que me guardar la hora ...
  #1 (permalink)  
Antiguo 08/10/2012, 07:13
 
Fecha de Ingreso: septiembre-2012
Ubicación: Diriamba-Carazo
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
No permitir gravar datos repetidos en tablas de SQL

Hola amigos, en todos los temas me han ayudado bastante, ahora traigo una consulta mas...

Tengo un formulario en VS que me guardar la hora de entrada de los empleados con solo digitarle el número de carné. pero necesito que si digitan dos veces el mismo # de carné no el programa no guarde la segunda marcada, hasta el dia siguiente, A?Yuda como hago...

de ante mano, muchas gracias.....


JLCRUZ
  #2 (permalink)  
Antiguo 08/10/2012, 09:29
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: No permitir gravar datos repetidos en tablas de SQL

Hola que tal, puedes poner un IF NOT EXISTS, donde valides si no existe el carnet lo inserte de lo contrario no haga nada.

Código SQL:
Ver original
  1. IF NOT EXISTS( SELECT carnet FROM Tabla_Carnet (NOLOCK) WHERE carnet = XXXXX )
  2. BEGIN
  3.         INSERT INTO Tabla_Carnet( carnet, fecha)
  4.         VALUES( carnet, GETDATE() )
  5. END

Te recomiendo un SP para esto.

Un saludo.

Última edición por drako_darpan; 08/10/2012 a las 09:41
  #3 (permalink)  
Antiguo 08/10/2012, 12:16
Avatar de cristiantorres  
Fecha de Ingreso: marzo-2012
Mensajes: 383
Antigüedad: 12 años, 1 mes
Puntos: 61
Respuesta: No permitir gravar datos repetidos en tablas de SQL

Podrías crearte un método que consulte la bd que valide si el dato ya existe o no en mi blog tengo un articulo donde explico como hacerlo.

Comprobar si Existe Registro en BD C# - VB.Net

Analiza el metodo Existe()


Código c#:
Ver original
  1. public bool Existe(int id)
  2. {
  3.             using (SqlConnection conn = new SqlConnection("CadenaConexion"))
  4.             {
  5.                 string query = "SELECT COUNT(*) FROM TABLA WHERE Campo=@Id";
  6.                 SqlCommand cmd = new SqlCommand(query, conn);
  7.                 cmd.Parameters.AddWithValue("Id", id);
  8.                 conn.Open();
  9.  
  10.                 int count = Convert.ToInt32(cmd.ExecuteScalar());
  11.                 if (count == 0)
  12.                     return false;
  13.                 else
  14.                     return true;
  15.             }
  16. }
El método devuelve true si el dato ya existe y false si no existe cuando hagas el insert llama el método pasale el parametro y valida si encuentra el dato o no.
__________________
Visita mi Blog C#, vb.net, asp.net, sql, java y mas...
Blog Cristian Torres
  #4 (permalink)  
Antiguo 08/10/2012, 15:05
 
Fecha de Ingreso: septiembre-2012
Ubicación: Diriamba-Carazo
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: No permitir gravar datos repetidos en tablas de SQL

OK LOS CODIGOS ESTAN BIEN, PERO YO NECESITO HACERLO EN VISUAL ESTUDIO, QUE VISUAL STUDIO ME VALIDE SI EL NUMERO DE CARNET EXISTE QUE NO LO INSERTE. ESTE ES EL CODIGO QUE ESTOY USANDO PARA GRABAR EN SQL

Private Sub txtNoEmpleado_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtNoEmpleado.KeyDown
If Me.txtNoEmpleado.Text = "" Then
'MsgBox("Debe ingresar su número de empleado", MsgBoxStyle.Information)
Me.txtNoEmpleado.Focus()

Exit Sub
End If
If e.KeyCode = Keys.Enter Then

Dim strSQL As String

Me.conexion.Open()
Dim drd_asistencia As SqlDataReader

strSQL = "SET DATEFORMAT DMY INSERT INTO ASISTENCIA "
strSQL = strSQL & "(NUMERO_EMPLEADO, FECHA, HORA_ENTRADA) "

strSQL = strSQL & "VALUES (" & "'" & txtNoEmpleado.Text & "',"
strSQL = strSQL & "'" & CDate(Me.lblFecha.Text) & "'" & ", " & "'" & lblHora.Text & "'" & ")"

Dim Cmd As New SqlCommand(strSQL, Me.conexion)

drd_asistencia = Cmd.ExecuteReader()

Me.txtNoEmpleado.Text = ""
'MsgBox("Bienvenido a sus Labores", MsgBoxStyle.Information)

Cmd.Dispose()
Me.conexion.Close()
End If
End Sub
  #5 (permalink)  
Antiguo 08/10/2012, 15:51
Avatar de cristiantorres  
Fecha de Ingreso: marzo-2012
Mensajes: 383
Antigüedad: 12 años, 1 mes
Puntos: 61
Respuesta: No permitir gravar datos repetidos en tablas de SQL

Cita:
Iniciado por jlcruz Ver Mensaje
OK LOS CODIGOS ESTAN BIEN, PERO YO NECESITO HACERLO EN VISUAL ESTUDIO, QUE VISUAL STUDIO ME VALIDE SI EL NUMERO DE CARNET EXISTE QUE NO LO INSERTE. ESTE ES EL CODIGO QUE ESTOY USANDO PARA GRABAR EN SQL

Private Sub txtNoEmpleado_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtNoEmpleado.KeyDown
If Me.txtNoEmpleado.Text = "" Then
'MsgBox("Debe ingresar su número de empleado", MsgBoxStyle.Information)
Me.txtNoEmpleado.Focus()

Exit Sub
End If
If e.KeyCode = Keys.Enter Then

Dim strSQL As String

Me.conexion.Open()
Dim drd_asistencia As SqlDataReader

strSQL = "SET DATEFORMAT DMY INSERT INTO ASISTENCIA "
strSQL = strSQL & "(NUMERO_EMPLEADO, FECHA, HORA_ENTRADA) "

strSQL = strSQL & "VALUES (" & "'" & txtNoEmpleado.Text & "',"
strSQL = strSQL & "'" & CDate(Me.lblFecha.Text) & "'" & ", " & "'" & lblHora.Text & "'" & ")"

Dim Cmd As New SqlCommand(strSQL, Me.conexion)

drd_asistencia = Cmd.ExecuteReader()

Me.txtNoEmpleado.Text = ""
'MsgBox("Bienvenido a sus Labores", MsgBoxStyle.Information)

Cmd.Dispose()
Me.conexion.Close()
End If
End Sub
Pero analizaste la respuesta que te di en el link que te deje puedes encontrar el codigo en vb.net también.

Código vb.net:
Ver original
  1. Public Function Existe(ByVal id As Integer) As Boolean
  2.     Using conn As New SqlConnection("CadenaConexion")
  3.         Dim query = "SELECT COUNT(*) FROM TABLA WHERE Campo=@Id"
  4.         Dim cmd As New SqlCommand(query, conn)
  5.         cmd.Parameters.AddWithValue("@Id", id)
  6.         conn.Open()
  7.  
  8.         Dim count As Integer = Convert.ToInt32(cmd.ExecuteScalar())
  9.         If count = 0 Then
  10.             Return False
  11.         Else
  12.             Return True
  13.         End If
  14.     End Using
  15. End Function

Entonces a la hora de hacer el insert arias.

Código vb.net:
Ver original
  1. If (Not Existe(Convert.ToInt32(txtid.Text))) Then
  2.     'aqui haces el insert
  3. Else
  4.    MessageBox.Show("Id Ya Existe...")
  5. End If

Nota: Visual estudio es el IDE lo que estas usando es el lenguaje vb.net.
__________________
Visita mi Blog C#, vb.net, asp.net, sql, java y mas...
Blog Cristian Torres
  #6 (permalink)  
Antiguo 08/10/2012, 16:42
 
Fecha de Ingreso: septiembre-2012
Ubicación: Diriamba-Carazo
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: No permitir gravar datos repetidos en tablas de SQL

muchas gracias cristiantorres, pero ese codigo trate de modificarlo pero no me funciona, cuando intento guardar en SQL me dice que la conexion esta abierta y como miras en mi codigo la conexion se cierra cada vez que entra datos en SQL..

Necesito ayuda.. porfa.....

JLCRUZ
  #7 (permalink)  
Antiguo 10/10/2012, 11:19
 
Fecha de Ingreso: septiembre-2012
Ubicación: Diriamba-Carazo
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: No permitir gravar datos repetidos en tablas de SQL

gracias amigo ya adapte tu codigo y funciono.....

lo unico ahora que yo necesito que valida la fecha tambien, porque el numero de empleado que marco hoy y no puede seguir marcando el resto dell dia, pero al dia siguiente si tiene que marcar

Voy a trabajar en eso

JLCRUZ
  #8 (permalink)  
Antiguo 10/10/2012, 11:24
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: No permitir gravar datos repetidos en tablas de SQL

Pero esto no es mas que cuestión de SQL, porque lo de Programación no tendria nada que ver ya que solamente se comprabaria que devolviera un resultado para validar que si existe

Select id from tutabla where carnet = 4 and fecha = '20120405'

Lo único que deberías hacer es enviar los parámetros correspondientes usando el


Dim query = "SELECT COUNT(*) FROM TABLA WHERE Campo=@Id And Fecha = @Fecha"
cmd.Parameters.AddWithValue("@Fecha", fecha)


Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #9 (permalink)  
Antiguo 10/10/2012, 11:44
 
Fecha de Ingreso: septiembre-2012
Ubicación: Diriamba-Carazo
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: No permitir gravar datos repetidos en tablas de SQL

gracias amigo ya adapte tu codigo y funciono.....

lo unico ahora que yo necesito que valida la fecha tambien, porque el numero de empleado que marco hoy y no puede seguir marcando el resto dell dia, pero al dia siguiente si tiene que marcar

Voy a trabajar en eso

JLCRUZ
  #10 (permalink)  
Antiguo 10/10/2012, 11:52
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 9 meses
Puntos: 267
Respuesta: No permitir gravar datos repetidos en tablas de SQL

?? no hagas spam. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #11 (permalink)  
Antiguo 10/10/2012, 12:18
 
Fecha de Ingreso: septiembre-2012
Ubicación: Diriamba-Carazo
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: No permitir gravar datos repetidos en tablas de SQL

Disculpa pero a que te refieres con spam?

JLCRUZ
  #12 (permalink)  
Antiguo 10/10/2012, 13:11
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 9 meses
Puntos: 267
Respuesta: No permitir gravar datos repetidos en tablas de SQL

has repetido 2 veces un mismo comentario :
Cita:
gracias amigo ya adapte tu codigo y funciono.....

lo unico ahora que yo necesito que valida la fecha tambien, porque el numero de empleado que marco hoy y no puede seguir marcando el resto dell dia, pero al dia siguiente si tiene que marcar

Voy a trabajar en eso

JLCRUZ
Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #13 (permalink)  
Antiguo 10/10/2012, 18:33
 
Fecha de Ingreso: septiembre-2012
Ubicación: Diriamba-Carazo
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: No permitir gravar datos repetidos en tablas de SQL

Ok, perdon no me di cuenta, le di click dos veces a enviar respuesta...

JLCRUZ
  #14 (permalink)  
Antiguo 10/10/2012, 20:19
 
Fecha de Ingreso: septiembre-2012
Ubicación: Diriamba-Carazo
Mensajes: 34
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: No permitir gravar datos repetidos en tablas de SQL

Ya, tengo todo resuelto, gracias a todos por ayudarme....


Desarrollo de Software

JLCRUZ
Nicaragua

Etiquetas: permitir, repetidos, sql, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:02.