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:48Moderador
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 UsingNo 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:12Moderador
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:39Moderador
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.-- Propuesto como respuesta Willy TaverasModerator sábado, 06 de noviembre de 2010 19:41
-
sábado, 06 de noviembre de 2010 20:20Willy 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:48Moderador
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 UsingNo 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

