Respondida Buscar registro en sql

  • sábado, 06 de noviembre de 2010 6:50
     
     

    Hola...

    Tengo una aplicación corriendo en sql 2008 y visual studio 2010, tengo una tabla "Cliente" en la cual tengo columnas llamada "Codigo" y otra "Nombre". Como puedo hacer para que al ingresar solo el campo "Codigo" me registre un cliente nuevo de lo contrario si existe que me muestre en cajas de texto tanto el "Codigo" como el "nombre".

    Desde ya muchas gracias por su ayuda !

Respuestas

  • sábado, 06 de noviembre de 2010 20:48
    Moderador
     
     Respondida Tiene código
    Willy gracias por tu respuesta, pero si lo quiero guardar con un número de DNI (Documento Nacional de Idenficiación). Es por eso que tengo la duda como procedería a realizar en codigo.

    Ok, ahora si no estamos entendiendo. Puedes utilizar el mismo código que indico en el primer post, pero el procedimiento tendría las siguientes modificaciones:

    SQL Server:

     

    Create
    
     Procedure
    
     ingresaClientes
    (@Codigo NVARCHAR
    
    (50), 
     @Nombre NVARCHAR
    
    (100)
    )
    
    As
    
    
    
    Declare
    
     @resultado bit
    
    , @nombreActual NVARCHAR
    
    (100);
    
    If
    
     exists
    
    (Select
    
     * from
    
     Clientes Where
    
     Codigo = @Codigo )
    Begin
    
    
    
    Set
    
     @resultado = 1; --Código existe
    
    
    
    Set
    
     @nombreActual =
    (Select
    
     nombre from
    
     Clientes Where
    
     Codigo = @Codigo)
    
    End
    
    
    
    Else
    
    
     Begin
    
    
    
    Set
    
     @resultado = 0; --Código no existe, procede a insertar
    
    
    
    Insert
    
     into
    
     Clientes values
    
    (@Codigo, @nombre);
    
    End
    
    
    
    Select
    
     @resultado, @nombreActual As
     Nombre

    Código en Aplicación Visual Basic

    Using conexion As New SqlConnection("Data Source = <tu_servidor>; Initial Catalog = db_usuarios; User = <tu_usuario>; Password = <tu_password>;")
    
    conexion.Open()
    
    Dim resultado As bool
    
    Dim cmd As New SqlCommand("Exec [dbo].[ingresaClientes] @codigo, @nombre", conexion)
    
    cmd.Parameters.AddWithValue("@codigo", Me.textBox1.Text)
    cmd.Parameters.AddWithValue("@nombre", Me.textBox2.Text)
    
    /*Puedes sustituir textBox1 y textBox2 por los nombres que tienes como codigo y nombre en tus TextBox. */
    
    
    Dim reader As SqlDataReader = cmd.ExecuteReader
    
    Try 
    
    If
     (reader.HasRows) Then
    
     resultado = reader.GetBoolean(0)
     
     If resultado = True
    
     Then
    
      MsgBox("El código de cliente existe.")
    
      textBox2.Text = reader.GetString(1) 
    
    Else
     
    MsgBox("Cliente registrado satisfactoriamente")
    
    End If
    
    Catch ex As Exception
    
    End Try
    
    conexion.Close()
    
     End Using

    No tengo un IDE para probar el código, pero creo que esta bien, si tiene algun fallo, perdón. Creo que con eso tienes lo que tienes. El procedimiento almacenado lo que hara es retornarte el valor del nombre del Cliente en caso de que exista y segun el codigo de la respuesta el programa con el código que indico, interpretara que el cliente ya existe y pondra en el textBox2 el nombre del Cliente que retorna el procedimiento. En caso de que no exista, entonces el sistema registrara y la aplicación mostrara el mensaje de Cliente Registrado Satisfactoriamente.


    Espero que te sirva.


    Willy Taveras.-
    • Marcado como respuesta orlandotm lunes, 08 de noviembre de 2010 3:44
    •  

Todas las respuestas

  • sábado, 06 de noviembre de 2010 11:12
    Moderador
     
      Tiene código
    Saludos,

    No se entiende bien que es lo que quieres hacer. Primero porque para insertar
    el nombre del cliente debes ingresarlo o hacer un update luego utilizando el Cliente.
    Si lo que quieres es una columna calculada donde el código sea el mismo nombre
    Entonces ahí solo tienes que insertar el código. Pero la tabla estaría estructurada así:

    Create table Clientes
    ( Codigo <tipo_dato>,
    Nombre As Codigo
    )

    En caso de que lo que quieras es probar que el código no exista, te recomiendo usar
    un procedimiento almacenado que retorne un valor si fue registrado o otro si no lo
    seria algo como esto:

    Create Procedure validaCodigo
    (@Codigo <tipo_dato>, @Nombre <tipo_dato>)
    As
    Declare @resultado bit
    If exists(Select * from Clientes Where Codigo = @Codigo )
    Begin
    Set @resultado = 1; --true
    End
    Else
    Begin
    Set @resultado = 0; --false
    Insert into Clientes values(@Codigo, @nombre);
    End
    Select @resultado

    En tu programa, suponiendo que es C#, pones:
    SqlCommand cmd = new SqlCommand("Exec validaCodigo @codigo", conexion);
    cmd.Parameters.AddWithValue("@codigo", textBox1.Text);
    SqlDataReader reader = cmd.ExecuteReader();
    If(reader.Read())
    {
    If(reader.GetBoolean(0) == True)
    {
    MessageBox.Show("El código de cliente existe. Código: " + textBox1.Tex + " Nombre:
    + textBox2.Text + "); }
    Else {
    MessageBox("Cliente registrado satisfactoriamente"); }
    }

    Si no es esto lo que buscas, favor explicar maS detalladamente y con gusto te ayudamos


    Willy Taveras.-
  • sábado, 06 de noviembre de 2010 18:47
     
     

    Muchas gracias por la respuesta. Sino fui muy claro pido disculpas ante todo.

    Tengo una base de datos con nombre bd_usuarios, dentro de ello tengo solamente una tabla ya creada con nombre "clientes", en donde tengo basicamente 2 columnas que son: codigo y nombre; éstos son únicamente los datos que necesito.

    Ahora lo que quiero es que al ingresar algunos codigos éstos ya no se repitan porque es único de cada persona, y si ya existe ese código pues que me cargue el nombre en el mismo textbox donde esta en nombre. Y si no existe pues registrar en la base de datos.

    La aplicación está corriendo bajo visual basic (visual studio 2010) y SQL Server 2008.

    Gracias por las molestias ocasionadas y por sus respuestas.

  • sábado, 06 de noviembre de 2010 19:39
    Moderador
     
     Respuesta propuesta Tiene código
    Saludos,

    Para evitarte molestias validando si el código esta repetido, te recomiendo
    Que crees una tabla con el campo código tipo INT, y entonces lo pones IDENTITY(1,1)
    Esto significa que no tienes que preocuparte si existe o no, este nunca se repetira
    Para lograrlo, debes crear la tabla. De esta forma:

    Create Table Clientes
    ( Codigo Int IDENTITY(1,1),
    Nombre Varchar(100)
    )

    Con esto estas indicando que solo tendrás que poner el nombre en el insert
    El codigo se generara automaticamente, incrementando de 1 en 1. Con esta forma
    Te ahorras mas codigo en el programa, y evitas hacer cosas de mas.

    El insert seria: INSERT INTO Clientes VALUES('nombre_aqui');


    Willy Taveras.-
  • sábado, 06 de noviembre de 2010 20:20
     
     
    Willy gracias por tu respuesta, pero si lo quiero guardar con un número de DNI (Documento Nacional de Idenficiación). Es por eso que tengo la duda como procedería a realizar en codigo.
  • sábado, 06 de noviembre de 2010 20:48
    Moderador
     
     Respondida Tiene código
    Willy gracias por tu respuesta, pero si lo quiero guardar con un número de DNI (Documento Nacional de Idenficiación). Es por eso que tengo la duda como procedería a realizar en codigo.

    Ok, ahora si no estamos entendiendo. Puedes utilizar el mismo código que indico en el primer post, pero el procedimiento tendría las siguientes modificaciones:

    SQL Server:

     

    Create
    
     Procedure
    
     ingresaClientes
    (@Codigo NVARCHAR
    
    (50), 
     @Nombre NVARCHAR
    
    (100)
    )
    
    As
    
    
    
    Declare
    
     @resultado bit
    
    , @nombreActual NVARCHAR
    
    (100);
    
    If
    
     exists
    
    (Select
    
     * from
    
     Clientes Where
    
     Codigo = @Codigo )
    Begin
    
    
    
    Set
    
     @resultado = 1; --Código existe
    
    
    
    Set
    
     @nombreActual =
    (Select
    
     nombre from
    
     Clientes Where
    
     Codigo = @Codigo)
    
    End
    
    
    
    Else
    
    
     Begin
    
    
    
    Set
    
     @resultado = 0; --Código no existe, procede a insertar
    
    
    
    Insert
    
     into
    
     Clientes values
    
    (@Codigo, @nombre);
    
    End
    
    
    
    Select
    
     @resultado, @nombreActual As
     Nombre

    Código en Aplicación Visual Basic

    Using conexion As New SqlConnection("Data Source = <tu_servidor>; Initial Catalog = db_usuarios; User = <tu_usuario>; Password = <tu_password>;")
    
    conexion.Open()
    
    Dim resultado As bool
    
    Dim cmd As New SqlCommand("Exec [dbo].[ingresaClientes] @codigo, @nombre", conexion)
    
    cmd.Parameters.AddWithValue("@codigo", Me.textBox1.Text)
    cmd.Parameters.AddWithValue("@nombre", Me.textBox2.Text)
    
    /*Puedes sustituir textBox1 y textBox2 por los nombres que tienes como codigo y nombre en tus TextBox. */
    
    
    Dim reader As SqlDataReader = cmd.ExecuteReader
    
    Try 
    
    If
     (reader.HasRows) Then
    
     resultado = reader.GetBoolean(0)
     
     If resultado = True
    
     Then
    
      MsgBox("El código de cliente existe.")
    
      textBox2.Text = reader.GetString(1) 
    
    Else
     
    MsgBox("Cliente registrado satisfactoriamente")
    
    End If
    
    Catch ex As Exception
    
    End Try
    
    conexion.Close()
    
     End Using

    No tengo un IDE para probar el código, pero creo que esta bien, si tiene algun fallo, perdón. Creo que con eso tienes lo que tienes. El procedimiento almacenado lo que hara es retornarte el valor del nombre del Cliente en caso de que exista y segun el codigo de la respuesta el programa con el código que indico, interpretara que el cliente ya existe y pondra en el textBox2 el nombre del Cliente que retorna el procedimiento. En caso de que no exista, entonces el sistema registrara y la aplicación mostrara el mensaje de Cliente Registrado Satisfactoriamente.


    Espero que te sirva.


    Willy Taveras.-
    • Marcado como respuesta orlandotm lunes, 08 de noviembre de 2010 3:44
    •