Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Método Alternativo
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Método Alternativo 
 
Buenas de nuevo

Tengo lo siguiente, que funciona bien:


PUBLIC SUB Button10_Click()

IF TextBox9.Text = "" THEN
Message.Error("Introduzca un parámetro de búsqueda válido.")
ELSE
   Resultado = Conexion.Exec("Select * from datos where telefono OR movil OR nickname OR email OR nombre OR passwd=" "'" & TextBox9.Text & "'")
   IF Resultado.Available THEN
   TextBox1.Text = Resultado["nombre"]
   TextBox2.Text = Resultado["nickname"]
   TextBox3.Text = Resultado["passwd"]
   TextBox4.Text = Resultado["cargo"]
   TextBox5.Text = Resultado["area"]
   TextBox6.Text = Resultado["telefono"]
   TextBox7.Text = Resultado["movil"]
   TextBox8.Text = Resultado["email"]
   MuestraCampos
   ELSE
   Message.Error("No se han encontrado datos coincidentes")
   TextBox9.Clear
  END IF
END IF
END
 


¿Existe alguna forma de simplificar y/ o hacer mejor el código?
Me explicaron hace un par de días lo de usar filtros, pero no me queda muy claro.
Lo que quiero es realizar una búsqueda con un textbox en una tabla de SQLite y que me muestre los resultados en sus respectivos TextBox.Text
Ya leí un par de posts en este foro relacionados, pero la verdad no entiendo demasiado.
 



 
Ninfus - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Método Alternativo 
 
Ninfus: la solución es análoga a la que te dio Shordi en el otro hilo excepto que esta vez se trata de una consulta.

El primer problema con tu código es que no funciona bien. Si te pareció que sí, es porque no hiciste una cantidad mínima de pruebas que te mostraran que la consulta está mal construida o bien lo que querías era recuperar todos los datos de la tabla. En cualquier caso, debería ser algo así:

  'Recuperar todos los datos de la tabla:
  Resultado = Conexion.Exec("Select * from datos")

  'La misma consulta usando Find:
  Resultado = Conexion.Find("datos")
  
  'Recuperar todos los campos pero sólo de aquellas filas que cumplan con determinadas condiciones
  Resultado = Conexion.Exec("Select * from datos where nickname=&1 OR nombre=&2", txtNickName.Text, txtNombre.Text)
  
  'La misma consulta usando Find
  Resultado = Conexion.Find("datos", "nickname=&1 OR nombre=&2", txtNickName.Text, txtNombre.Text)
 


Si no te queda claro no dudes en preguntar. Pero trata de ser preciso indicando qué quieres hacer y cuál es la duda.

Saludos cordiales.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Método Alternativo 
 
Lo que te dice FabianFv es correcto. De todas formas si hay una forma de recorrer los campos y mover a los respectivos textboxes.No se si es muy funcional pero por decir que no quede

Deberías hacer un grupo con todos los textboxes y luego recorrer los campos de la tabla de este modo. En el ejemplo el grupo de textboxes se llama grupo

dim Campo as new tablefields, x as integer=0
for each Campo in Cn.table.fields
   txt[x].text=Campo.value
   inc x
next


Habría que elaborarlo algo mas pero la idea es que es posible hacer un bucle recorriendo los campos de una tabla y hacer algo con ellos
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Método Alternativo 
 
Hola, creo que con un poco de esfuerzo se puede hacer algo muy generico, para que te valga en todos los casos.
Yo ya lo tengo hecho para mi uso particular con una clase que llamo desde el formulario que maneja la tabla y para mostrar los datos tengo una función que recorre los controles (textbox, valuebox, etc.) que son susceptibles de mostrar datos y que en su propiedad tag lleva el nombre del campo que contiene. Es recursiva para poder recorrer los controles dentro de containers que contengan containers. El objeto primario que lo llama es el form por supuesto y si dentro de este existe/n otros contenedores (vbox, hbox, etc) los lee igualmente.
Este el esqueleto:

PUBLIC SUB show_fields(hobj AS Object)
  
  DIM hctl AS Control, hlbl AS Label
  DIM htxt AS TextBox, htxa AS TextArea, hcbo AS ComboBox
  DIM hspi AS SpinBox, hchk AS CheckBox, hval AS ValueBox
  DIM sField AS String[]
  DIM rsaux AS Result
  DIM sqry AS String

  FOR EACH hctl IN hobj.Children
    IF hctl IS Container THEN show_fields(hctl)
    IF hctl.Tag THEN

      SELECT CASE Object.Type(hctl)
        CASE "TextBox"
          htxt = hctl
          htxt.Text = rst[htxt.Tag]
        CASE "TextArea"
          htxa = hctl
          htxa.Text = rst[htxa.Tag]
        CASE "ValueBox"
          hval = hctl
          hval.Value = rst[hval.Tag]
        CASE "SpinBox"
          hspi = hctl
          hspi.Value = rst[hspi.Tag]
        CASE "CheckBox"
          hchk = hctl
          hchk.Value = rst[hchk.Tag]
        CASE "ComboBox"
          showCombo(hctl)
        CASE "Label"
          showLabel(hctl)
      END SELECT

    ENDIF  
  NEXT

  currentRec = rst[hkey]
  lastrec = rst.Index
  
END


No obstante, para el caso simple que mencionas, simplemente recortaríamos lo no necesario, así:

PUBLIC SUB show_fields()
  
  DIM hctl AS Control
  DIM htxt AS TextBox

  FOR EACH hctl IN ME.Controls
    IF hctl.Tag THEN
          htxt = hctl
          htxt.Text = rst[htxt.Tag]
    ENDIF  
  NEXT
  
END
 


Observa que estás perdiendo la posibilidad de usar la propiedad tag para otra cosa.
Esto es solo una idea y un esqueleto. Donde la quieres llevar depende de ti.

Un saludo

Antonio
xxx
 



 
ahtonio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Método Alternativo 
 
Muchas gracias a los tres por los comentarios.

Por un lado tenéis razón (FabianFV y Soplo) . El query de SQLIte está mal, pero me funciona en un form con 6 TextBox ¿Por qué? No lo se. La misma sintáxis para otro form con 36 TextBox, no funciona. Gracias a vuestra ayuda, ya está corregido.

Ahtonio, muchas gracias. Como no tengo prisa por avanzarle a la aplicación, voy a probar tu método, ya que me resulta por demás, interesante. Te agradezco mucho.

Salu2 a todos.
 



 
Ninfus - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Manejador, Método Shell General 3 Jueves, 02 Octobre 2014, 00:25 Ver último mensaje
Shell
No hay nuevos mensajes Sobrescribir Un Método De Una Clase Shell General 7 Miercoles, 11 Abril 2018, 10:19 Ver último mensaje
Shell
No hay nuevos mensajes Paso De Parámetros A Un Método Guizans General 6 Jueves, 09 Agosto 2018, 00:43 Ver último mensaje
v3ctor
No hay nuevos mensajes Ayuda Método De Tanteo Luisgr95 Aplicaciones/Fragmentos de Código 4 Sabado, 20 Octobre 2018, 11:24 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron