SQL Db & ComboBox (Filtro)

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
Buen día comunidad!

Primero que nada pido disculpas si he posteado en la sección que no es, soy nuevo y apenas me estoy acomodando al foro.

Bueno, y ahora si quisiera acudir a su ayuda, soy algo novato en todo esto y no entiendo muy bien como funciona todo.

La pregunta es: "¿Como puedo Vincular una DB, a un Combobox?"

Bueno lo que quiero hacer es lo siguiente:

Tengo un Directorio telefónico con aprox 7 Input vinculados a Un Listbox vinculado a una database SQL.
Dando doble click a un item del ListBox, se llenan los Input con su respectivo dato. Exactamente como el
tutorial de Agotaras https://www.youtube.com/watch?v=NfDIvqGAOy4 que por cierto me ha ayudado mucho.
y logré este diseño o algo parecido:

Imagen

Pero mi duda es la siguiente: Quiero agregar 2 ComboBox nuevos que Filtren la informacion.
por ejemplo tengo mi directorio normal con todos los datos, clickeo en El ComboBox1 y selecciono "Ciudad"
entonces el ComboBox2 se actualizará con las ciudades añadidas a la tabla segun la database, y si selecciono
alguna ciudad(de ese ComboBox2) el ListBox(la derecha en mi imagen) se actualice y solo me muestre las personas de esa ciudad.

es como un enlace de 2 Combobox y una ListBox, pero no se como, he intentado cargar los datos pero no encuentro
como hacer aquello. Alguna Script, o Un ejemplo?

Me podrían ayudar?

Enserio lo agradeceria.
Muchas Gracias, Salu2.
Dann.
kauster72 escribió:Eso es fácil se trata de llenar los combobox con datos de la consulta a la bd , y luego según selección rellenar los otros objetos con consultas a la bd también , deberías dar mas datos de tu base de datos ,estructura y código que usas para ayudarte , de todas formas te dejo un ejemplo para que veas algo parecido.

HIDE: ON
Hidebb Message Hidden Description
Hola amigo, Gracias por tu respuesta lo veré ahora mismo,
mira acabo de subir el Apz, depronto me puedas pasar el código si no es mucha molestia.

No se como poner un link para que no sea oculto, por no lo agregue, algunos foros lo tienen por defecto
https://mega.nz/#!UVJBwDLY!ErmaAT0a-_3r ... T9AHsRRX-Y

Editado: Amigo acabo de abrir el archivo y bueno tiene Virus.
enfin, si importa bien la DB pero no veo que los combobox cambien segun el modelo,etc.
de por si puedes pasarme el codigo? es que trato de hacer lo mismo pero no se como poner la condicion.
si selecciono una categoria de el combobox 1, osea, primero que todo cual es el codigo para importar datos de mi db pero
condicionalmente, osea Si selecciono "Ciudad" en el Combobox1, que se llene el ComboBox2 con la informacion de la DB sobre ciudades posibles.

Db= Clientes
RecordID
Campos= Nombre,Telefono,CC,Direccion,Ciudad,Correo,Notas.

Te lo agradezco! :D
Bueno para hacer oculto un enlace usa en el editor la etiqueta "HIDE" para tu codigo del enlace .

Me bajo el archivo y miro...
Bueno aquí esta el ejemplo modificado solo los combobox de filtro.

HIDE: ON
Hidebb Message Hidden Description


Por cierto tu apz también tiene algún archivo sospechoso , como "virus.dat" XD
Muchas gracias!
Apenas llegue lo pruebo.
"Virus.dat "es un notepad y le cambie el nombre y la extensión, nada que temer jaja.

Era para evitar que los usuarios entrarán a esta carpeta y copiaran la DB, aunque revisando los tutorials toda la tarde la puedo encriptar.

Una vez más gracias, respondo mis dudas.
No cierren el tema, soy nuevo en esto.
rafaxplayer escribió:Bueno aquí esta el ejemplo modificado solo los combobox de filtro.

HIDE: ON
Hidebb Message Hidden Description


Por cierto tu apz también tiene algún archivo sospechoso , como "virus.dat" XD
Gracias amigo, me funcionó a la perfección!
Disculpa el Doble Post, tengo una duda, como puedo llevar a cabo lo del ListBox?
Perdón por abusar de tu confianza pero tienes alguna guía que me pases para eso?
osea ya teniendo los 2 Filtros que tu muy amablemente me editaste, quisiera que después del segundo filtro
se actualizara la listbox respecto al ultimo combobox, pero no se como referenciar esto, o por donde empiezo?
el script del segundo filtro o el script de la listbox?

Muchas gracias de nuevo rafax!
espero tu respuesta :)
Haber si al final es todo lo mismo , no te has parado a ver el código , leer mas sobre sqlite en ams y nada, no te has fijado en que el código esta en onselect del primer combo? pues ahora en on select del segundo haces lo mismo para rellenar el listbox , pero claro, cambiando parámetros y demás.
rafaxplayer escribió:Haber si al final es todo lo mismo , no te has parado a ver el código , leer mas sobre sqlite en ams y nada, no te has fijado en que el código esta en onselect del primer combo? pues ahora en on select del segundo haces lo mismo para rellenar el listbox , pero claro, cambiando parámetros y demás.
Lo siento no pude leerlo completo ya que andaba corto de tiempo, igual ya verifique el código.

a ver si entendí, este código lo hice para actualizar los datos del ListBox(guiándome de tu código) pero cada que selecciono.
me agrega el Dato como tal del ComboFiltro, pero no entiendo como hacer que solo me cargue el nombre y solamente los datos que
coincidan con el dato de la tabla, osea si es Washington, solo me muestre los de Washington y no los demás.

Soy un poco noob ten paciencia :grumpycat-1414026366: :crying:

Código: Seleccionar todo

campo = ComboBox.GetItemText("ComboFiltro", e_Selection);
tSeleccion = SQLite.QueryToTable(db, "SELECT "..campo.." FROM Clientes");
	nLastError = Application.GetLastError();
	if nLastError ~= SQLite.OK then
		Dialog.Message("Error", SQLite.GetLastErrorString());
	end
	if nLastError == SQLite.OK then
		for nRow = 1, tSeleccion.Rows do
			nRecordID = tSeleccion.Data[nRow]["RecordID"];
			sNombre = tSeleccion.Data[nRow][campo];
			sTelefono = tSeleccion.Data[nRow][campo];
	
	ListBox.DeleteItem("Listado", -1)	
			ListBox.AddItem("Listado", sNombre, nRow);
		end
		ListBox.SelectItem("Listado", 1)
	end
end	
De nuevo gracias por tu ayuda,
que pena si pregunto mucho, es que llevo poco usando este programa.
Salu2
En tu código hay errores como vaciar el listbox dentro del bucle , esto significa que te limpiara la lista con cada resultado y al final solo mostrara uno.
Después el tema esta en consulta a la base de datos si no la haces bien ,no obtienes lo que quieres , con el código siguiente te muestra en la listbox el nombre del individuo que coincida con el campo (combo1) y valor(combofiltro) seleccionado.


data = ComboBox.GetItemText(this, e_Selection);
campo = ComboBox.GetItemText("Combo1", ComboBox.GetSelected("Combo1"));

Debug.Print("SELECT Nombre FROM Clientes WHERE "..campo.." = "..data);
tSeleccion = SQLite.QueryToTable(db, "SELECT Nombre FROM Clientes WHERE "..campo.." = '"..data.."'");

nLastError = Application.GetLastError();
   if nLastError ~= SQLite.OK then
      Dialog.Message("Error", SQLite.GetLastErrorString());
   end
   
   if nLastError == SQLite.OK then
   		ListBox.DeleteItem("Listado", LB_ALLITEMS);
      for nRow = 1, tSeleccion.Rows do
         nRecordID = tSeleccion.Data[nRow]["RecordID"];
         sNombre = tSeleccion.Data[nRow]["Nombre"];
         ListBox.AddItem("Listado", sNombre, tostring(nRecordID));
      end
      ListBox.SelectItem("Listado", 1)
   end


Nota : este codigo esta en el evento OnSelect de comBoFiltro como es lógico.
rafaxplayer escribió:En tu código hay errores como vaciar el listbox dentro del bucle , esto significa que te limpiara la lista con cada resultado y al final solo mostrara uno.
Después el tema esta en consulta a la base de datos si no la haces bien ,no obtienes lo que quieres , con el código siguiente te muestra en la listbox el nombre del individuo que coincida con el campo (combo1) y valor(combofiltro) seleccionado.


data = ComboBox.GetItemText(this, e_Selection);
campo = ComboBox.GetItemText("Combo1", ComboBox.GetSelected("Combo1"));

Debug.Print("SELECT Nombre FROM Clientes WHERE "..campo.." = "..data);
tSeleccion = SQLite.QueryToTable(db, "SELECT Nombre FROM Clientes WHERE "..campo.." = '"..data.."'");

nLastError = Application.GetLastError();
   if nLastError ~= SQLite.OK then
      Dialog.Message("Error", SQLite.GetLastErrorString());
   end
   
   if nLastError == SQLite.OK then
   		ListBox.DeleteItem("Listado", LB_ALLITEMS);
      for nRow = 1, tSeleccion.Rows do
         nRecordID = tSeleccion.Data[nRow]["RecordID"];
         sNombre = tSeleccion.Data[nRow]["Nombre"];
         ListBox.AddItem("Listado", sNombre, tostring(nRecordID));
      end
      ListBox.SelectItem("Listado", 1)
   end


Nota : este codigo esta en el evento OnSelect de comBoFiltro como es lógico.
Muchas gracias rafax! Me funciono de lujo!
Otra cosa, ya para finalizar este tema, tengo un problema muy simple diría yo con la opción DialogEx.Print
quiero imprimir el dialogo aparte exactamente en las dimensiones que asigne al dialogo(verticales), pero cuando
le doy el botón de imprimir me sale por defecto en horizontal , ya probé con otro proyecto de dimensiones verticales
y sale lo mismo, no se que hacer. hay alguna forma de rotar los elementos 90 grados o definir la orientación de mi proyecto
cuando le doy Print?

Gracias una vez mas.
Perdón por el doblepost, Acá pongo un ejemplo de lo que quisiera cambiar, en vez de "Horizontal" que salga por defecto "Vertical",
ya que pues, hago uso de impresoras en las que tiene muchos paneles adicionales lo que sería complicado para el uso de una secretaria o alguien que poco sabe como modificar la pagina.

Imagen

Imagen
También voy a mirar esto ya que me interesa mucho este tema. Muchas gracias a todos.
Me lo he descargado para mirar porque aún no he conseguido que ninguna base de datos me funcione correctamente, y tengo el mismo problema que me ocurre en las mías.
al intentar comprobar o grabar un dato en la db me sale

Error: attemtp to concatenate global 'nRecordID' ( a nil value)
Stack Treaceback:
1[Admin -> BotonEditar -> On Click] Line: 11 in main chuck


Es el mismo error que me sale a mí contínuamente. Alguién sabe a que se debe esto, si me dejo algo por activar?????

Gracias.
Dann escribió:Perdón por el doblepost, Acá pongo un ejemplo de lo que quisiera cambiar, en vez de "Horizontal" que salga por defecto "Vertical",
ya que pues, hago uso de impresoras en las que tiene muchos paneles adicionales lo que sería complicado para el uso de una secretaria o alguien que poco sabe como modificar la pagina.

Imagen

Imagen
Pues es un tema que no entiendo , ya que nunca lo he usado .

indywey escribió:Me lo he descargado para mirar porque aún no he conseguido que ninguna base de datos me funcione correctamente, y tengo el mismo problema que me ocurre en las mías.
al intentar comprobar o grabar un dato en la db me sale

Error: attemtp to concatenate global 'nRecordID' ( a nil value)
Stack Treaceback:
1[Admin -> BotonEditar -> On Click] Line: 11 in main chuck


Es el mismo error que me sale a mí contínuamente. Alguién sabe a que se debe esto, si me dejo algo por activar?????

Gracias.
Estamos en lo de siempre , a simple vista podria ser que crearas mal el campo en la bd , que no sea esa la variable , mil cosas...

MOSTRAR CÓDIGO , NO SOMOS ADIVINOS! :normas: :awesome-1417754492: :awesome-1417754492:
Gracias...
شكرا لتقاسم :friends:
graças
Veamos la APZ :beta: :beta: :beta: :beta:
Muchas gracias!
bonsoir

je me sent intéresser moi aussi