Variables en SQL

23/12/2006 - 00:55 por Joan Carles | Informe spam
Hola , soy novato y ando algo perdido , necesito mediante una consulta SQL
que me devuelva una serie de registros en un grid ( tableadapter )pero de los
nombres ( del campo nombre ) que empiecen por un carácter que estará en un
text box.

Solo me funciona si le meto en el LIKE un valor fijo y no veo la manera de
decirle que coja esa valor de la variable.

PD. Estoy usando Visual 2005 y la DB es de Access.

Muchas gracias

Preguntas similare

Leer las respuestas

#1 SoftJaén
23/12/2006 - 09:32 | Informe spam
"Joan Carles" escribió:

necesito mediante una consulta SQL que me devuelva una serie
de registros en un grid ( tableadapter )pero de los nombres
( del campo nombre ) que empiecen por un carácter que estará en un
text box.



Hola, Joan Carles:

Si por ejemplo deseas recuperar los registros cuyo campo «Nombre» comiencen
por los caracteres incluidos en el control TextBox, con independencia de
aquellos otros que se encuentren incluidos en el valor de dicho campo, al
valor del control TextBox deberás de añadirle el carácter comodín %, todo
ello encerrado entre comillas simples.

La siguiente consulta SQL recuperará todos los registros cuyo campo Nombre
empiece por los caracteres «Jo», como Joan, José, Joaquín, etc.:

TextBox1.Text = "Jo"

Dim sql As String = _
"SELECT * FROM Tabla1 " & _
"WHERE Nombre LIKE '" & TextBox1.Text & "%'"

Un saludo y ¡Feliz Navidad!

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#2 Joan Carles
23/12/2006 - 12:58 | Informe spam
Hola Enrique muchas gracias pero no soy capaz de adaptar lo que me dices.

Te cuento como lo hago :

Tengo un dataset un bindingadpter y un table adapter , la idea es que de
entrada en el table adapter se vean todos los clientes pero si en un textbox
pones una inicial o parte de un nombre en el grid ( tableadapter ) se vean
solo esos registros.

Cuando estoy en el dataset y veo todas las tablas , le doy a la tabla que me
interesa la opcion de crear consulta , en el asistente escojo todos los
campos y cuando intento hacer lo que me dices de esta manera me sale error :

SELECT CodCliente, etccccc
FROM Clientes
WHERE NComercial LIKE '"&TB_Buscar.text&"%'"

Si hay otra manera para hacerlo y que se muestre en el tableadapter te lo
agradecería infinitamente.

Un saludo

"SoftJaén" wrote:

"Joan Carles" escribió:

> necesito mediante una consulta SQL que me devuelva una serie
> de registros en un grid ( tableadapter )pero de los nombres
> ( del campo nombre ) que empiecen por un carácter que estará en un
> text box.

Hola, Joan Carles:

Si por ejemplo deseas recuperar los registros cuyo campo «Nombre» comiencen
por los caracteres incluidos en el control TextBox, con independencia de
aquellos otros que se encuentren incluidos en el valor de dicho campo, al
valor del control TextBox deberás de añadirle el carácter comodín %, todo
ello encerrado entre comillas simples.

La siguiente consulta SQL recuperará todos los registros cuyo campo Nombre
empiece por los caracteres «Jo», como Joan, José, Joaquín, etc.:

TextBox1.Text = "Jo"

Dim sql As String = _
"SELECT * FROM Tabla1 " & _
"WHERE Nombre LIKE '" & TextBox1.Text & "%'"

Un saludo y ¡Feliz Navidad!

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.




Respuesta Responder a este mensaje
#3 SoftJaén
23/12/2006 - 15:36 | Informe spam
"Joan Carles" escribió:

Tengo un dataset un bindingadpter y un table adapter , la idea es que de
entrada en el table adapter se vean todos los clientes pero si en un
textbox pones una inicial o parte de un nombre en el grid
( tableadapter ) se vean solo esos registros.



Lo que debes de hacer es «filtrar» los datos del objeto DataTable, en el
ejemplo, una supuesta tabla de «Clientes» incluida en un objeto DataSet.

Imagina que tienes un control DataGridView donde deseas ver los datos de los
clientes, y un control TextBox donde escribes las iniciales del nombre de
los clientes. Pues bien, filtrarías los datos de la siguiente manera:

' Creamos un objeto DataView
'
Dim view As New DataView

' Le asignamos el objeto DataTable llamado «Clientes».
'
view.Table = objetoDataSet.Tables("Clientes")

' Filtramos las filas con el contenido existente en el
' control TextBox.
'
view.RowFilter = "Nombre LIKE '" & TextBox1.Text & "%'"

' El nuevo origen del control DataGridView será
' el objeto DataView creado
'
DataGridView1.DataSource = view

' Actualizamos el control DataGridView
'
DataGridView1.Update()

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#4 SoftJaén
02/01/2007 - 15:16 | Informe spam
"Joan Carles" escribió:

... pero en la form donde está el grid hay un montón de texbox ligados a
los campos de esa tabla y la idea era que al seleccionar uno de ellos del
grid se mostraran el resto de los datos en la form pero estoy viendo que
con lo del filtrado si bien solo muestra lo que tecleamos tal y como
quería no se actualiza el puntero en la base de datos ya que el resto de
los campos en el form no se actualiza acorde con lo que sale en el grid.

Ya se que es abusar un poco pero cómo puedo solucionar eso ??



Una vez que conozcas la fila seleccionada en el control Grid, asígnale
directamente los valores de las columnas del Grid a los controles TextBox.

Por ejemplo, tienes dos controles TextBox que muestran el Nombre y el
Domicilio de los clientes. Suponiendo que una vez filtrado el objeto
DataTable, el usuario selecciona el cliente que aparece en la segunda fila
del control Grid, por lo que los controles de texto los rellenarías de la
siguiente manera:

' Para obtener el número de la fila actual del control
' DataGridView, creamos un objeto DataGridViewRow
'
Dim row As DataGridViewRow

' Obtenemos la fila actual
'
row = DataGridView1.CurrentRow
Dim index As Int32 = row.Index

' Mostramos en los controles de texto correspondientes,
' los valores de las columnas Nombre y Domicilio del
' control Grid.
'
txtNombre.Text = _
DataGridView1.Rows(index).Cells("Nombre").Value.ToString

txtDomicilio.Text = _
DataGridView1.Rows(index).Cells("Domicilio").Value.ToString

Este código lo puedes ejecutar después de aplicar el filtro, es decir,
después de ejecutar el código que te indiqué en mi anterior mensaje.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#5 SoftJaén
03/01/2007 - 15:32 | Informe spam
"Joan Carles" escribió:

tambien he probado lo siguiente como alternativa a tu solucion

Me.ClientesBindingSource.DataSource = View

es decir , en vez de apuntar el datasource a la tabla en cuestion apunta a
tu filtro y al igual que tu solucion funciona correctamente.

que opinas de esta alternativa ??



Pues que es lo mismo que yo te indiqué, pero que en lugar de asignar el
objeto DataView a la propiedad DataSource del control DataGridView
(DataGridView1.DataSource = view), se lo has asignado a la misma propiedad
de un objeto ClientesBindingSource.

Por regla general, la propiedad «DataSource» de los distintos objetos que la
implementan en su interfaz, especifica el origen de los datos al cual se
encuentra enlazado el objeto o control, como bien pudiera ser un objeto
DataSet o DataView, que es el que yo he utilizado en el ejemplo.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida