Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Leer datos mientras se ingresan en un dbgrid

Hola, estoy desarrollando un sistema en el cual, en la celda de un dbgrid, se ingresa una palabra, que a medida que se va escribiendo, en un segundo dbgrid se va filtrando los registros de una tabla ado que inicien con la palabra que se esta ingresando. Lo he hecho con onkeydown sobre el primer dbgrid, capturo cada tecla presionada y voy formando una cadena que la uso para filtrar en la tabla ado. Pero quería saber si hay una forma mas sencilla o alguna función que capture lo que se ingresa en un dbgrid. Desde ya muchas gracias al que me pueda aportar algún dato.
Responder Con Cita
  #2  
Antiguo 28-10-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Quizá valdría la pena que explicaras un poco más la situación: por tu descripción, el filtro no parece ser una tarea adecuada para un dbgrid. Más bien poner un TEdit normal y filtrar con base a su contenido.

// Saludos
Responder Con Cita
  #3  
Antiguo 02-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Perdón Roman, estuve sin internet hasta hoy. Voy a tratar de ser mas claro. En un campo del primer dbgrid, el usuario escribe las primeras palabras de una descripción de mercadería, a medida que esta escribiendo, en el segundo dbgrid, aparecen los artículos de tabla 'artículos' que inician con las letras que esta ingresando. Ejemplo, en el primero escribe 'PAL' y en el segundo solo aparecen los artículos que inicien con 'PAL'. La idea es que no presione la tecla Enter para que filtre, sino, a medida que va escribiendo letra por letra, lo haga. Pero al NO presionar Enter, el valor que se ingresa,no esta actualizado en la tabla donde apunta el primer Dbgrid. Por eso leo letra por letra usando el OnkeyDown, voy pegando las letras y con ellas filtro en la segunda tabla. Espero haber sido claro.
Responder Con Cita
  #4  
Antiguo 02-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Por qué usas un dbgrid para que teclee el usuario el artículo que busca?
Responder Con Cita
  #5  
Antiguo 03-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Casimiro, te adjunte un .pdf, para mostrarte la interfaz de usuario que utilizo.
Imágenes Adjuntas
Tipo de Archivo: pdf Muestra.pdf (371,7 KB, 22 visitas)

Última edición por Casimiro Notevi fecha: 03-11-2015 a las 19:14:30.
Responder Con Cita
  #6  
Antiguo 03-11-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Sigo pensando que ingresando el texto en un edit es mejor que dos grid
Responder Con Cita
  #7  
Antiguo 03-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Agustinortu, estéticamente no me gusta que se ingrese la carga de una factura atraves de un edit. No pongo en discucion cual es la ideal, simplemente me parece mas amigable el poder navegar por cualquier fila y columna y modificar a "piacere", sin tener que ir a un edit para modificar algo. Pero solo es mi modesto punto de vista. Pero mas alla de cual es la mejor opcion, mi pregunta es si alguien puede aportarme información de como leer los datos de un dbgrid a medida que se ingresan sin tener que presionar "enter".

Última edición por aromigaret fecha: 03-11-2015 a las 21:55:51.
Responder Con Cita
  #8  
Antiguo 03-11-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Por favor acláreme esto:

El usuario escribe en el primer dbgrid las primeras letras del nombre de un producto. Con ello se filtra el listado del segundo dbgrid. Ok. ¿Y luego? ¿Qué se hace con ese filtrado? ¿Se selecciona un elemento del segundo dbgrid y se implanta en el primero? Pero entonces ¿ese primer dbgrid es, a la vez, fuente de datos y receptor de datos? O bien, ¿el filtrado es sólo para que el capturista sepa que escribir? Pero la factura debería tener el ID del producto y no todo el nombre.

Es por ello que te te pedimos que aclares y las sugerencias van más allá de una simple estética en la presentación de los datos.

Desde mi perspectiva, para dar de alta un elemento de una factura, lo más práctico para el capturista sería:
  1. Insertar un nuevo registro
  2. Para capturar el producto se abre una nueva ventana con dos elementos: un edit y un dbgrid. En el primero se escriben las primeras letras del producto y el segundo filtra según lo escrito.
  3. El capturista selecciona un elemento del debgrid filtrado en cuanto localice el producto.
  4. Oprime OK y se cierra la ventana auxiliar capturando el ID del producto seleccionado.
  5. El ID de producto se graba en el registro actual de la factura.

// Saludos
Responder Con Cita
  #9  
Antiguo 03-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Roman, el funcionamiento del primer dbgrid es así :
primer columna se ingresa cantidad a facturar al presionar "Enter" se pasa a la segunda columna donde se escriben las primeras letras de la descripción a buscar, al mismo instante en el segundo dbgrid, aparecen los artículos que inician con las letras introducidas. Luego hay varias opciones para el operador:
1- si el artículo es el primero de la lista, estando en el 1er dbgrid, presiona enter y se carga dicho artículo con su marca, precio y realiza el subtotal.
2 -si el articulo esta en otra posición, con el mouse o presionando la tecla "down", pasa al segundo dbgrid y escoge el o los artículos a cargar (ya que está habilitada la opción multiselect) y al presionar "enter" el o los artículos seleccionados se cargan en el primer dbgrid, haciendo más rápida la carga ya que solo resta poner cantidades. Hoy funciona bien capturando con el evento onkeydown, las teclas presionadas , pero en mi afán de perfeccionar el código quisiera saber si hay algún buffer o función que examinar en el dbrid para tomar lo que se carga y no una letra por letra
.
Responder Con Cita
  #10  
Antiguo 04-11-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aromigaret.
Cita:
Empezado por aromigaret Ver Mensaje
...quisiera saber si hay algún buffer o función que examinar en el dbrid para tomar lo que se carga y no una letra por letra
No voy a omitir opinión sobre el modo de ingreso y tampoco sé si esta opción es mejor que lo que has implementado. Pero respondiendo a tu consulta, creo que podrías usar el objeto TInplaceEdit de modo similar a este ejemplo :
Código Delphi [-]
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
  s : string;
begin
  if DBGrid1.EditorMode and (DBGrid1.SelectedField.FieldName = 'ARTICULO') then
  begin
    s   := TInPlaceEdit(DBGrid1.Controls[0]).Text;
    if Key in ['A'..'Z','Á','É','Í','Ú','Ñ'] then // (y demás caracteres que desees )
      s := s + Key
    else if Key = #8 then
      Delete(s, Length(s), 1);

    tuQuery.Close;
    tuQuery.SQL.Clear;
    tuQuery.SQL.Add('SELECT ARTICULO, STOCK, PRECIO, IVA FROM PRODUCTO');
    tuQuery.SQL.Add('WHERE ARTICULO LIKE :DET ORDER BY ARTICULO');
    tuQuery.ParamByName('DET').AsString :=  s + '%';
    tuQuery.Open;
  end;
end;
Salida:


De todos modos, recuerda que si estas trabajando en red, las búsquedas incrementales pueden tornar todo lento ya que aumentan el tráfico desde y hacia el servidor.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 04-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Poder: 13
aromigaret Va por buen camino
Muchas gracias ecfisa, eso me servirá.
Gracias por el comentario del trafico en red, pero este sistema lo hice para que mis clientes me envíen sus pedidos atraves del mismo, sin la necesidad de recordar los códigos de la mercadería.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizar form mientras se reciben datos por sockets JMGR Internet 3 23-12-2011 21:47:27
¿Cómo ir filtrando los datos de un dbgrid mientras voy escribiendo en un edit? Master23 Varios 7 30-06-2010 22:01:45
Progreso mientras carga datos... jarlos Conexión con bases de datos 7 18-10-2007 16:39:45
Problema al leer un campo del dbgrid lejia Conexión con bases de datos 3 10-10-2007 15:30:47
Saber cuando ingresan a tu PC genius Varios 4 11-12-2006 14:47:52


La franja horaria es GMT +2. Ahora son las 09:40:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi