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

Busqueda por parametros en tablas

Estas en el tema de Busqueda por parametros en tablas en el foro de .NET en Foros del Web. Hola tengo un problema y no se como resolverlo, la cosa es que estoy haciendo un buscador parametrizados. Tengo 5 item proporcionados por un checkboxlist ...

  #1 (permalink)  
Antiguo 23/02/2005, 13:39
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Busqueda por parametros en tablas

Hola tengo un problema y no se como resolverlo, la cosa es que estoy haciendo un buscador parametrizados. Tengo 5 item proporcionados por un checkboxlist que muestra los servicios a seleccionar y tres dropdownlist dependientes entre si y enlazados a cada cual a una Tabla en una base de datos.

Hasta ahora me permite realizar busquedas en la tabla de acuerdo a lo que se seleccione en los drop, pero debo hacer que tome en cuenta el servicio seleccionado en el checkboxlist y no se como hacer eso.
  #2 (permalink)  
Antiguo 24/02/2005, 07:13
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Asi es como hago la busqueda en las tablas, pero solo toma en cuenta lo que se seleccione en el drop, tengo que hacer que busque en funcion del servicio que esta determinado por listitem en el checkboxlist

gracias de antemano


Sub Button1_Click(sender As Object, e As EventArgs)

Dim s As String = "Elementos seleccionados:<br>"
Dim i As Int32

For i = 0 to Check1.Items.Count-1

If not Check1.Items(i).Selected Then
Iblmessage.Text = "Es necesario que seleccione un servicio"

Else If Check1.Items(i).Selected Then

Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.Ubicac

ionID=" &DropDownList3.SelectedItem.Value


MyConnection = New SqlConnection("SERVER=MDS01; DATABASE=be; INTEGRATED SECURITY=false;PASSWORD=sa;USER=sa")
MyCommand = New SqlDataAdapter(strSql, MyConnection)

ds = new DataSet()
MyCommand.Fill(ds, "Agencia")

MyDataGrid.DataSource=ds.Tables("Agencia").Default View
MyDataGrid.DataBind()

End If
Next

End Sub
  #3 (permalink)  
Antiguo 24/02/2005, 07:27
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Y como kieres q te influya el checkboxlist en tu busqueda ya q tiene seleccion multiple,y podria elegir varios ala vez.....
  #4 (permalink)  
Antiguo 24/02/2005, 08:32
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
eso es lo mejor. El usuario puede marcar todas las opciones de servicios disponibles, se espera que cuando seleccione el (los) servicio (s), los resultados de la busqueda se desplieguen por coincidencias, respetando la seleccion geografica seleccionada, es decir si selecciona servicio 1, servicio 2, servicio 3 y marca algun estado, ciudad y ubicacion de los drop, los resultados de la busqueda seran aquellas agencias que se encuentre en estado x xiudad y y ubicacion z que presten los servicios 1, 2 ,3

Me comprendes o tadavia enredo?
  #5 (permalink)  
Antiguo 24/02/2005, 08:43
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
dependera de si hay un boton de busqueda o cada vez q haga un cambio en el checkboxlist automaticamente haga la busqueda

Suponiendo el boton de de busqueda

Asi recorreras el checkboxlist:
dim j as integer
For j = 0 To checkboxlist.Items.Count - 1
If checkboxlist.Items(j).Selected Then
' Entra si esta seleccionado
strSql +=
end if
Next

en strSql añadiras los servicios ,dependera como esten organizados los campos de los servicios en tu base de datos
  #6 (permalink)  
Antiguo 24/02/2005, 12:02
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
si, la aplicacion tendra un boton de busqueda, una vez que el usuario seleccione los servicios y los drop debe pulsar el boton buscar para activar la busqueda

En cuanto a las tablas, en el momento que las cree no me quedaba muy claro si crear una tabla para cada servicio, asi que hize una tabla en donde puse el campo el codigo, agencias, los servicios, direccion, telefono, estado, ciudad y ubicacion.

Pero realmente no se que sea mas conveniente para este tipo de buscador.
  #7 (permalink)  
Antiguo 25/02/2005, 02:50
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
dependera de del servicio, por ejemplo si tinee mas datos a guardar se utilizaria fijo otra tabla.

Puedes tener si son por ejemplo 5 servicios 5 campos booleanos,de esta manera te seria muy sencilla hacer la consulta utilizando lo que te he puesto en el anterior mensaje

Yo lo haria con otra tabla servicios ,para la consulta agencia cuyo codigo tal...
La consulta seria mas larga por q deberias comprobar por cada servicui q la agencia este en la tbla servicios con ese servicio

"where agenciaid in (select agenciaid from servicios where servicio= "& servivio.selected " & ") and agenciaid in (....) ...."

Dependera de los servicios q esten chequeados y esto lo haras con

dim j as integer
For j = 0 To checkboxlist.Items.Count - 1
If checkboxlist.Items(j).Selected Then
' Entra si esta seleccionado
strSql +="and agenciaid in(select agenciaid from servicios where servicio="& _ checkboxlist.Items(j).text" & ")
end if
Next

Haber si con esto puedes solucionar tus problemas
  #8 (permalink)  
Antiguo 25/02/2005, 12:49
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Hola Neivan, te pongo al corriente hable con mi profesor y me dijo que para efecto de la catedra el queria las agencias y los servicios en un tabla y los campos de estado, ciudad y ubicacion, direccion, telefono en fin creo que te lo mensione antes, la cosa es que bueno estructure la busqueda en un boton asi


Sub Button1_Click(sender As Object, e As EventArgs)

Dim s As String = "Elementos seleccionados:<br>"
Dim i As Int32

For i = 0 to Check1.Items.Count-1

If not Check1.Items(i).Selected Then
Iblmessage.Text = "Es necesario que seleccione un servicio"

Else If Check1.Items(0).Selected Then

Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Estacionamiento as Agencia_Estacionamiento, Agencia.Cajero_Automatico as Cajero_Automatico, Agencia.Autobanco as Autobanco, Agencia.Taquilla_Externa as Taquilla_Externa, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value



MyConnection = New SqlConnection("SERVER=MDS01; DATABASE=be; INTEGRATED SECURITY=false;PASSWORD=sa;USER=sa")
MyCommand = New SqlDataAdapter(strSql, MyConnection)

ds = new DataSet()
MyCommand.Fill(ds, "Agencia")

MyDataGrid.DataSource=ds.Tables("Agencia").Default View
MyDataGrid.DataBind()

Else If Check1.Items(1).Selected Then

Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Cajero_Automatico as Cajero_Automatico, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value



MyConnection = New SqlConnection("SERVER=MDS01; DATABASE=be; INTEGRATED SECURITY=false;PASSWORD=sa;USER=sa")
MyCommand = New SqlDataAdapter(strSql, MyConnection)

ds = new DataSet()
MyCommand.Fill(ds, "Agencia")

MyDataGrid.DataSource=ds.Tables("Agencia").Default View
MyDataGrid.DataBind()

Else If Check1.Items(2).Selected Then

Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Estacionamiento as Agencia_Estacionamiento, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value



MyConnection = New SqlConnection("SERVER=MDS01; DATABASE=be; INTEGRATED SECURITY=false;PASSWORD=sa;USER=sa")
MyCommand = New SqlDataAdapter(strSql, MyConnection)

ds = new DataSet()
MyCommand.Fill(ds, "Agencia")

MyDataGrid.DataSource=ds.Tables("Agencia").Default View
MyDataGrid.DataBind()

Else If Check1.Items(3).Selected Then

Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Autobanco as Autobanco, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value



MyConnection = New SqlConnection("SERVER=MDS01; DATABASE=be; INTEGRATED SECURITY=false;PASSWORD=sa;USER=sa")
MyCommand = New SqlDataAdapter(strSql, MyConnection)

ds = new DataSet()
MyCommand.Fill(ds, "Agencia")

MyDataGrid.DataSource=ds.Tables("Agencia").Default View
MyDataGrid.DataBind()

Else If Check1.Items(4).Selected Then

Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Taquilla_Externa as Taquilla_Externa , Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value



MyConnection = New SqlConnection("SERVER=MDS01; DATABASE=be; INTEGRATED SECURITY=false;PASSWORD=sa;USER=sa")
MyCommand = New SqlDataAdapter(strSql, MyConnection)

ds = new DataSet()
MyCommand.Fill(ds, "Agencia")

MyDataGrid.DataSource=ds.Tables("Agencia").Default View
MyDataGrid.DataBind()
End If
Next

End Sub


Y asi fino si selecciono individualmente los servicios , me muestra las agencia en esa ubicacion gegrafica que dispones de ese servicio, pero cuando intento buscar 2 o tres o todos los servicios a las vez solo me muestra el primer servcio que seleccione.

que puedo hacer

y gracias por todo
  #9 (permalink)  
Antiguo 25/02/2005, 14:50
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Hola Sayra, por lo que veo estas usando demasiado código que te hace lo mismo... creo que para empezar tu code podría quedar así:

Cita:
Sub Button1_Click(sender As Object, e As EventArgs)
Dim s As String = "Elementos seleccionados:<br>"
Dim i As Int32
'bandera para verificar si al menos selecciono un valor
Dim bln As Boolean = False

For i = 0 To check1.Items.Count - 1
If check1.Items(i).Selected Then
Iblmessage.Text = "Es necesario que seleccione al menos un servicio"
bln = True
Exit For
End If
bln = False
Next i
'selecciono al menos un servicio
If bln Then
For i = 0 To check1.Items.Count - 1
If check1.Items(i).Selected Then
GetData()
End If
Next
End If
End Sub

Private Sub GetData()
Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Estacionamiento as Agencia_Estacionamiento, Agencia.Cajero_Automatico as Cajero_Automatico, Agencia.Autobanco as Autobanco, Agencia.Taquilla_Externa as Taquilla_Externa, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" & DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" & DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" & DropDownList3.SelectedItem.Value



MyConnection = New SqlConnection("SERVER=MDS01; DATABASE=be; INTEGRATED SECURITY=false;PASSWORD=sa;USER=sa")
MyCommand = New SqlDataAdapter(strSql, MyConnection)

ds = New DataSet
MyCommand.Fill(ds, "Agencia")

myDataGrid.DataSource = ds.Tables("Agencia").DefaultView
myDataGrid.DataBind()
End Sub

Ahora, otra cosa que tienes que verificar es como estas validando tus servicios selecionado porque va a pasar por todos los items de tu checkbox pero no estas haciendo nada para pasarle ese argumento.

Checa bien tu code..

Cualquier cosa por aqui andamos..
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #10 (permalink)  
Antiguo 26/02/2005, 10:02
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
lo siento pero no termino de ver donde seleccionas o como el servivi
ejemplo:

Else If Check1.Items(1).Selected Then

Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Cajero_Automatico as Cajero_Automatico, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value

En la consulta no veo diferrencias con si chequa el servicio 1 o el 2 o el 3
Estoy con rootk en q repites mucho codigo.

Si quieres el codigo de como lo haria yo muestrame como esta almacenado servicio dentro de agencia
Es decir una agencia esta destinada a un unico servicio o puede tener varios.
Otra cosa si en tu codigo pones que si esta chekeado el servicio1 haga una consulta y la meta en el datagrid,y si entra aki ya no comprueba si esta el 2 el 3 el 4.... por q pones
if If Check1.Items(0).Selected Then
Else If Check1.Items(1).Selected Then
'Solo entrara aki si no entra en la anterior....
  #11 (permalink)  
Antiguo 28/02/2005, 08:52
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Bueno lo que me percate es que cuando digo
Check1.Items(0).Selected = se refiere a la seleccion del servicio 1 (Agencias)
Check1.Items(1).Selected = se refiere a la seleccion del servicio 2 (Cajeros Automaticos)
Check1.Items(2).Selected = se refiere a la seleccion del servicio 3 (Agencia con Estacionamiento)
Check1.Items(3).Selected = se refiere a la seleccion del servicio 4 (Autobanco)
Check1.Items(4).Selected = se refiere a la seleccion del servicio 5 (Taquilla Externa)

De esa forma es que veo yo que identifica el checkboxlist y muestra las agencias que por ubicacion regional disponen de ese servicio.

Una agencia pueden tener varios servicios, pero la idea es que muestre solamente como resultados de la busqueda las agencias que por ubicacion geografica tenga los servicos que seleccionados del checkboxlist

En la tabla sobre la cual realizo la busqueda tiene las agencias, los servicios, direción estado y ubicacion , y otros campos tales como telefono fax, direccion etc.

Claro de la manera que lo estoy haciendo solo reconoce un servicio seleccionado y la idea es que pueda reconocer mas de uno y en funcion de eso realizar la busqueda.
  #12 (permalink)  
Antiguo 28/02/2005, 12:01
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Cajero_Automatico as Cajero_Automatico, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value

For j = 0 To checkboxlist.Items.Count - 1
If checkboxlist.Items(j).Selected Then
' Entra si esta seleccionado
strSql +=""
end if
Next

el tema esta en que en este ultimo strSql hay que meter la parte correspondiente a cada servicio
Te pedi que me pusieras como estaba organizada tu bd pa saber si por ejemplo una agencia tendra tantos registros como servicios por ejemplo o pa saber como lo tienes organizado,si es asi
For j = 0 To checkboxlist.Items.Count - 1
If checkboxlist.Items(j).Selected Then
strSql +="And Agencia.Identificador in (select Identificador from"& _ "agencia where servicio =" & checkboxlist.Items(j).text)"
end if
Next

Asi cada cod.identificador es decir cada agencia tiene q tener todos los servicios q estan seleciondor
.....
Haber si con esto ya lo solucionamos
  #13 (permalink)  
Antiguo 28/02/2005, 14:25
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
bueno la estructura de la base en la vista de diseño es asi

3 CodigoID int 4 0
0 Identificador char 30 1
0 Direccion char 50 1
0 Codigo_Area numeric 9 1
0 Telefono char 50 1
0 Fax char 16 1
0 Horario datetime 8 1
0 EstadoID int 4 1
0 CiudadID int 4 1
0 UbicacionID int 4 0
0 Estacionamiento char 10 1
0 Cajero_Automatico char 10 1
0 Autobanco char 10 1
0 Taquilla_Externa char 10 1
  #14 (permalink)  
Antiguo 28/02/2005, 14:31
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
ups se me olvido esa tabla esta relacionada con otras tres llamada estados, ciudad y ubicacion.
  #15 (permalink)  
Antiguo 28/02/2005, 17:01
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
ya veo,tienes un campo para cada servicio

Entonces la solucion sera diferente

Consejo,si no me equivoco,cada linea q devolvera esa tabla sera una agencia.
Los campos servicios si simplemente nos interesa saber si estan activos en vez de char los pondria boolean.

Si son boolean seria simplemente por ejemplo en el check1 tener en cada linea el text que queramos pero el value el mismo q el nombre del campo en l bd asi hariammos esto:

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Cajero_Automatico as Cajero_Automatico, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value

For j = 0 To checkboxlist.Items.Count - 1
If checkboxlist.Items(j).Selected Then
' Entra si esta seleccionado
strSql +=" and " & checkboxlist.Items(j).value % " =true"
end if
Next

O ponerlo de tipo bit q coga el valor 0 o 1
strSql +=" and " & checkboxlist.Items(j).value % " =1"

Asi obligarias a que todas las agencias q te devuelva la consulta tengan todos los servicios que haya seleccionados.

Haber si ahora esto te sirve.
  #16 (permalink)  
Antiguo 01/03/2005, 08:03
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Hola Neivan muchas gracias
te consulto dos cosas
Cambie la opcion de char a bit en la porque no encontre boolean
cuando trato de correr la aplicacion me presenta el sigueinte error

Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: BC30037: El carácter no es válido.

Line 102:strSql += " AND " &Check1.Items(j).value % "=1"
  #17 (permalink)  
Antiguo 01/03/2005, 08:14
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
tienes razon,he mirao mis tablas,los campos q tengo de tipo bit,y las lineas de codigo q he metido apareden como VErdadero Falso

strSql += " AND " &Check1.Items(j).value % "=Verdadero"

O manten el char y q el char ese supongo q dentro tendra un si o un no
un true o false o verdadero...
La forma en la q lo tubieras puesto para saber q tiene ese servicio
Podrias incluso ponerlo de tipo int,cdo este servicio lo tenga q tenga de valor 1 y cdo no lo tenga q tenga de valor 0....

strSql += " AND " &Check1.Items(j).value % "= 'lo q tengas en el char para saber q este servicio lo tiene esta agencia "

Última edición por neivan; 01/03/2005 a las 08:16
  #18 (permalink)  
Antiguo 01/03/2005, 08:47
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Bueno lo deje tipo char y en tabal tiene si y no la cosa es que bueno aqui lo puse asiLine 102:strSql += " AND " &Check1.Items(j).value % "=si"

pero sigue dando el mismo error
  #19 (permalink)  
Antiguo 01/03/2005, 08:52
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
strSql += " AND " & Check1.Items(j).value & "=si"
  #20 (permalink)  
Antiguo 01/03/2005, 10:18
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Neivan ahora me da un error extraño por que reviso yo lo encuentro bien
la aplicacion se carga selecciono parametros y cuando le doy enviar surge el error

Línea 1: sintaxis incorrecta cerca de 'ANDAgencia'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Línea 1: sintaxis incorrecta cerca de 'ANDAgencia'.

Source Error:
Line 110: MyCommand.Fill(ds, "Agencia")

y bueno finalmente el codigo del boton quedo asi
Sub Button1_Click(sender As Object, e As EventArgs)

Dim s As String = "Elementos seleccionados:<br>"
Dim i As Int32
Dim j As Int32
For i = 0 to Check1.Items.Count-1

If not Check1.Items(i).Selected Then
Iblmessage.Text = "Es necesario que seleccione un servicio"

Else If Check1.Items(i).Selected Then

Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Cajero_Automatico as Cajero_Automatico, Agencia.Autobanco as Autobanco, Agencia.Taquilla_Externa as Taquilla_Externa, Agencia.Estacionamiento as Agencia_Estacionamiento, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value

For j = 0 To Check1.Items.Count - 1
If Check1.Items(j).Selected Then
' Entra si esta seleccionado
strSql += " AND" & Check1.Items(j).value & "=si"
end if
Next

MyConnection = New SqlConnection("SERVER=MDS01; DATABASE=be; INTEGRATED SECURITY=false;PASSWORD=sa;USER=sa")
MyCommand = New SqlDataAdapter(strSql, MyConnection)

ds = new DataSet()
MyCommand.Fill(ds, "Agencia")

MyDataGrid.DataSource=ds.Tables("Agencia").Default View
MyDataGrid.DataBind()

End If
Next

End Sub
  #21 (permalink)  
Antiguo 01/03/2005, 10:50
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Te falta darle un espacio a tu concatenación...

Cita:
...
..
For j = 0 To Check1.Items.Count - 1
If Check1.Items(j).Selected Then
' Entra si esta seleccionado
strSql += " AND " & Check1.Items(j).value & "=si"
end if
Next
  #22 (permalink)  
Antiguo 01/03/2005, 13:30
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Me esta generando unos errores mas extrños es como si fuera incompatible el nobre que tiene los item del checkboxlist con los que viene de la base de datos
vean por ustedes mismos

Checkboslist item agencia

El nombre de columna 'Agencia' no es válido.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: El nombre de columna 'Agencia' no es válido.

Line 110: MyCommand.Fill(ds, "Agencia")

Checkboslist item Cajero_Automatico

El nombre de columna 'Cajeros_automáticos' no es válido.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: El nombre de columna 'Cajeros_automáticos' no es válido.

Line 110: MyCommand.Fill(ds, "Agencia")



Checkboslist item Agencias con Estacionamiento

Línea 1: sintaxis incorrecta cerca de 'con'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Línea 1: sintaxis incorrecta cerca de 'con'.

Source Error:



Line 110: MyCommand.Fill(ds, "Agencia")






Checkboslist item Autobanco
El nombre de columna 'si' no es válido.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: El nombre de columna 'si' no es válido.

Source Error:

Line 110: MyCommand.Fill(ds, "Agencia")

Checkboslist item Taquilla Externa

Línea 1: sintaxis incorrecta cerca de 'externa'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Línea 1: sintaxis incorrecta cerca de 'externa'.

Source Error:

Line 110: MyCommand.Fill(ds, "Agencia")




El codigo de los checkboxlist

<asp:checkboxlist id="Check1" runat="server" repeatcolumns="3">
<asp:ListItem>Agencia</asp:ListItem>
<asp:ListItem>Cajeros_autom&aacute;ticos</asp:ListItem>
<asp:ListItem>Agencia con estacionamiento</asp:ListItem>
<asp:ListItem>Autobanco</asp:ListItem>
<asp:ListItem>Taquilla externa</asp:ListItem>
</asp:checkboxlist>
  #23 (permalink)  
Antiguo 02/03/2005, 03:26
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Haber,es muy importante que estes segura que lo que te devuelve
Check1.Items(j).value es exacataemnte en cada caso el nombre de la columna
Para eso


<asp:ListItem Value="">Cajeros_autom&aacute;ticos</asp:ListItem>

En value pon exactamente el nombre que tiene en la base datos tu servicio,es decir el nombre de la columna = "Cajero_Automatico"
Asi con todos Por q sino q por supuesto te va dar error
Entonces en el texto te aparecera cajeros_automáticos con tilde por q lo has definido asi entre etiquetas pero lo q te devuelve al llamar a Check1.Items(j).value sera lo q tengas en el value.


Para comprobar q te devuleve bien prueba a meterlo en un textbox para q veas q te esta devolviendo,y asi veras si es lo que te tiene q devolver para que la consulta sea correcta
  #24 (permalink)  
Antiguo 02/03/2005, 06:37
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Hola Neivan Gracias, por lo menos ahora no da ese error, sin embargo me esta dando este error, ¿eso tiene que ver conque en las columnas de servicios yo coloco si o no dependiendo de si la agencia tiene o no ese servicio?


El nombre de columna 'si' no es válido.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: El nombre de columna 'si' no es válido.

Line 111: MyCommand.Fill(ds, "Agencia")
  #25 (permalink)  
Antiguo 02/03/2005, 06:41
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
y otra cosas cuando me sugieres el uso del texbox es para captura el valor que tarae el check1.Check1.Items(j).value?
  #26 (permalink)  
Antiguo 02/03/2005, 06:42
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Prueba a poner el si entre comillas simple
"='si' " tb podrias probar "like 'si' "
Si esto no te soluciona asegurate de que la consulta este todo bien,los espcaios entre nombre y eso..
  #27 (permalink)  
Antiguo 02/03/2005, 06:53
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Si era eso ahora si funciona y hace la busqueda si selecciono uno a uno los servicios, pero si seleccion 2 o 3 o todos los servicios me devuelve la tabla de resultados vacia, ah y otra cosa cuando selecciono un servicio y hago la busque me muestra todos los resultados de los servicios que tiene esa agencia, y no solo por que pregunte.

La idea es que si seleeciono varios servicios me muestre si la agencia dispone de ellos o no de acuerdo a la ubicacion geografica.

Y si se selecciono uno me muestre solo ese servicio si lo tiene o no de acuerdo a la la seleccion geografica

Un milllon de gracias, en verdad muchas gracias
  #28 (permalink)  
Antiguo 02/03/2005, 07:07
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Joder,me parece q lo q te puse yo entonces no es lo que querias mostrar.
Vamos ave si nos aclaramos.
To quieres q te haga la busqueda por ubicaion geografica....
Y q cuando seleciono uno o varios servicios,muestre si esas agencias en esa ubicaion tiene esos servicios.no?????
Yo te puse pensando q solo querias ver las agencias q tubieran entre sus servicios los q selecione lla gente,esto es un filtro,por lo tanto no te mostrara las agencias sino tienen esos servicios.

Si lo que quiere ses q te muestra los servios q te seleccione haber si los tiene o no ,yo lo pondria asi:


Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT "

For j = 0 To Check1.Items.Count - 1
If Check1.Items(j).Selected Then
' Entra si esta seleccionado
strSql += " " & Check1.Items(j).value & ", "
end if
Next

strSql += " Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Agencia.Cajero_Automatico as Cajero_Automatico, Agencia.Autobanco as Autobanco, Agencia.Taquilla_Externa as Taquilla_Externa, Agencia.Estacionamiento as Agencia_Estacionamiento, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " AND Agencia.EstadoID=" &DropDownList1.SelectedItem.Value
strSql += " AND Agencia.CiudadID=" &DropDownList2.SelectedItem.Value
strSql += " AND Agencia.UbicacionID=" &DropDownList3.SelectedItem.Value

no se si entiendes la logica de lo q te he puesto ahora.
Esto te mostrara en el datagrid las columnas de los servicios q esten clicaos,q tu tienes si o no puesto en la bd....

No hace fallta poner "agencia. " delante por q no hay coincidencia de nombres con las otras tablas,no dara error

La cosa es q entiendas tb lo q t ehe puesto,por q te lo he puesto...

Última edición por neivan; 02/03/2005 a las 07:09
  #29 (permalink)  
Antiguo 03/03/2005, 07:03
Avatar de Sayra  
Fecha de Ingreso: diciembre-2004
Mensajes: 365
Antigüedad: 19 años, 5 meses
Puntos: 1
Neivan, ahora si nos entendimos , funciona como tenia que ser
Sin embargo si yo ahora quisiera que si el usuario no selecciona ningún valor para los campos de de estado ciudad y ubicación geográfica se desplegarán todas las coincidencias para el servicio seleccionado.

Se me ocurrio hacelo asi, que va por alli como que no es la cosa

Sub Button1_Click(sender As Object, e As EventArgs)

Dim s As String = "Elementos seleccionados:<br>"
Dim i As Int32
Dim j As Int32
For i = 0 to Check1.Items.Count-1

If not Check1.Items(i).Selected Then
Iblmessage.Text = "Es necesario que seleccione un servicio"

Else If Check1.Items(i).Selected Then
Iblmessage.Text=""
Dim ds As DataSet
Dim strSql As String
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter

strSql = " SELECT "

For j = 0 To Check1.Items.Count - 1
If Check1.Items(j).Selected Then
' Entra si esta seleccionado
strSql += " " & Check1.Items(j).value & ", "
end if
Next

strSql += " Agencia.Identificador as Agencia, Agencia.Direccion as Direccion, Agencia.Telefono as Telefono, Estado.Nombre_Estado as Estado, Ciudad.Nombre_Ciudad as Ciudad, Ubicacion.Descripcion as Ubicación From Agencia, Estado, Ciudad, Ubicacion "
strSql += " WHERE Agencia.EstadoID=Estado.EstadoID"
strSql += " AND Agencia.CiudadID=Ciudad.CiudadID"
strSql += " AND Agencia.UbicacionID=Ubicacion.UbicacionID"
strSql += " " & DropDownList1.SelectedItem.Value & ", "
strSql += " " & DropDownList2.SelectedItem.Value & ", "
strSql += " " & DropDownList3.SelectedItem.Value & ", "
MyConnection = New SqlConnection("SERVER=MDS01; DATABASE=be; INTEGRATED SECURITY=false;PASSWORD=sa;USER=sa")
MyCommand = New SqlDataAdapter(strSql, MyConnection)

ds = new DataSet()
MyCommand.Fill(ds, "Agencia")

MyDataGrid.DataSource=ds.Tables("Agencia").Default View
MyDataGrid.DataBind()

End If
Next

No se si me captas, si el usuario selleciona los combos de ubicaion, estado y ciudad debeb buscar los servicios por ubicacion regional pero si nolos selecciona dbeb buscar todas las coincidencias de servicio
  #30 (permalink)  
Antiguo 03/03/2005, 08:57
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 3 meses
Puntos: 1
Vamos a separar en 2 partes entoces

if ha seleccionado por ubicaicion cidad... then

lo que tenias antas q ya salia

else

la otra opcion

end if

para hacer este idf no se mu bien com otienes el codigo,y q es lo que obliga tu boton a hacer,pero te doy un consejo por ejemplo
Tener bien definido lo la ubicacion,es decir si elige un estado,ya obligatoriamente tiene que elegir ciudad y ubicacion???
Esto te lo digo para tenerlo bien organizado y definido y para ahora el if este definirlo bien
Por ejemplo teniendo una variable viewstate("buscar") (esta variable mantiene e valor hasta que se cierra la pagina)(buscar es un nombre q le he dao d ejemplo)
en el evento de elegir un estado ponerla viewstate("buscar")=si
en e lpage load cdo se carga la priemra vez tenerla definida como no

if viewstate("buscar")=si then
lo de antes
else
lo nuevo
Aqui definiras la otra cosulta,q es ddiferente y q supongo q sabras hacerla
end if

una ultima cosa

For i = 0 to Check1.Items.Count-1

If not Check1.Items(i).Selected Then
Iblmessage.Text = "Es necesario que seleccione un servicio"

le quieres obligar a q seleccioe todos???
si lo que quieres es saber si al menos a seleccionado uno pon esto al principio

if Check1.selectedindex=-1 then
Iblmessage.Text = "Es necesario que seleccione un servicio"
else
For i = 0 to Check1.Items.Count-1
.....
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 04:42.