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 26-02-2005
Ricsato Ricsato is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mexicali, Mexico
Posts: 72
Poder: 21
Ricsato Va por buen camino
como me ubico en la posicion de un registro buscado en un tsdbgrid

Hola, me gustaria que alguien me pudiera ayudar respecto a como mostrar la informacion en un renglon de un tsdbgrid.

tengo un query (QDetalle) y un datasource (DSDetalle) donde tengo la informacion que muestra mi componente tsdbgrid, en mi primer columna, tengo mi codigo de producto que seria mi llave primaria, entonces cuando tecleo un codigo de producto que ya existe hago la siguiente instruccion:

If QDetalle.locate('Pro_Codigo', vlpcodigo, [locaseinsensitive]) then
....

con esta instruccion el apuntador del grid se va a hacia donde esta el registro que introduje y ahi se posiciona, pero el problema es cuando son muchos registros que no se ven en una sola pantalla, este apuntador se va hasta el inicio (por ejemplo) y en mi pantalla yo sigo viendo mi ultimo registro en donde estaba tecleando el codigo y no puedo ver hasta donde se fue el apuntador, hasta que lo busque con el boton avance de pagina.

La pregunta es, como puedo hacerle para que cuando se vaya el apuntador del grid a posicionarse a la ubicacion de un codigo que este repetido, pueda tambien moverse mi pantalla y mostrarme los datos de ese renglon, sin tener que ir yo a buscar hasta donde se fue mi apuntador?

De antemano, gracias por sus opiniones.

Saludos desde Mexicali, B.C., Mexico.
Ricardo.
Responder Con Cita
  #2  
Antiguo 26-02-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
El tsGrid no lo conozco, pero mira si tiene una proiedad o método llamado:

- MakeVisible, MakeSelectionVisible
- TopRow

Suerte.
Responder Con Cita
  #3  
Antiguo 27-02-2005
Ricsato Ricsato is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mexicali, Mexico
Posts: 72
Poder: 21
Ricsato Va por buen camino
Hola, fijate que este componente no tiene ninguna propiedad o metodo make, si trae la propiedad TopRow, pero no funciono a lo que ando buscando.
gracias.
Responder Con Cita
  #4  
Antiguo 27-02-2005
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
Cita:
Hola, fijate que este componente no tiene ninguna propiedad o metodo make, si trae la propiedad TopRow, pero no funciono a lo que ando buscando.
Ummm, yo tampoco conozco ese grid, pero si tiene una propiedad TopRow, y no hace lo que se espera, para que sirve ese TopRow???

Yo creo que toprow si funciona, pero quizas no le estas pasando el valor correcto. Tienes que pasarle el valor (Longint) de la primera fila que quieres mostrar.

Mira la ayuda acerca de TopRow, creo que te sera util.
Y comprueba tambien la ayuda de la propiedad RecNo de los TDataset.

Y debajo de esto:
Cita:
If QDetalle.locate('Pro_Codigo', vlpcodigo, [locaseinsensitive]) then
Prueba a poner esto:
Código:
tsdbgrid.toprow:= QDetalle.dataset.recno;
Responder Con Cita
  #5  
Antiguo 28-02-2005
Ricsato Ricsato is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mexicali, Mexico
Posts: 72
Poder: 21
Ricsato Va por buen camino
Hola!

Hola, hice lo que me indicaste, poniendo esto:
tsdbgrid.toprow:= QDetalle.dataset.recno;

pero me marca error en el datset, dice que es deconocido, lo cambie a esto:
tsdbgrid.toprow:= QDetalle.DataSource.DataSet.RecNo;
pero me marca un desbordamiento de memoria y que ese modulo no esta en memoria.

Encontre esta instruccion:
dbgDetalle.MoveBy(-50);
donde el numero del parentesis indica las posiciones a regresarse en el tsdbgrid, y funciona con ese numero fijo!!, ahora el problema es como saber en que posicion esta mi apuntador, con la siguiente instruccion:

Qdetalle.RecNo;

se supone que me regresa un entero con el numero de la posicion de mi registro, pero no me explico por que siempre me regresa un -1, alguien sabe por que? o si existe otra forma de como saber en que posicion se encuentra mi apuntador en la tabla?

lo que estoy haciendo es esto:

If QDetalle.locate('Pro_Codigo', vlpcodigo, [locaseinsensitive]) then
dbgDetalle.MoveBy(Qdetalle.RecNo);

pero como me regresa un -1 el Qdetalle.Recno, solo me avanza una posicion hacia atras y mi apuntador se encuentra en otra parte.

ejecuto aparte Qdetalle.RecNo; para ver que numero muestra, y siempre me trae un -1, siendo que tengo 187 registros.

Gracias por su ayuda.
Saludos.
Responder Con Cita
  #6  
Antiguo 01-03-2005
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
Hola,

Sigo sin saber que grid utilizas , ni tampoco se que es dbgdetalle ??

Cita:
Hola, hice lo que me indicaste, poniendo esto:
tsdbgrid.toprow:= QDetalle.dataset.recno;

pero me marca error en el datset, dice que es deconocido, lo cambie a esto:
tsdbgrid.toprow:= QDetalle.DataSource.DataSet.RecNo;
pero me marca un desbordamiento de memoria y que ese modulo no esta en memoria.
Sigo pensando que toprow es lo mas apropiado, has probado a poner ???tsdbgrid.toprow:=15 (u otro valor)

Tendras un datasource que enlaza el query con el grid, verdad??
Pues utiliza:
datasource.dataset.recno;
en lugar de
query.recno;

Yo nunca uso locate, asi que no se porque no cambia el recno de tu query, quizas alguien más pueda ayudarte en eso.

Saludos
Responder Con Cita
  #7  
Antiguo 01-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Recno funciona en tablas paradox, En IB, Firebird, no está implementada esa propiedad, por eso devuelve -1 siempre.

Si necesitas conocer el número de filas, tienes que hacer un sql con count(*) y el mismo ORDER BY.

He mirado los fuentes y veo que las propiedades Col y Row, las tiene comentadas en la seccion Published, podrías quitarles los comentarios y recompilar los fuentes.

teniendo esas 2 propiedades sería facil hacer lo que pides. Aunque no sé si el componente se desestabilizará.

Saludos
Responder Con Cita
  #8  
Antiguo 01-03-2005
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
Pensaba que eran tablas de paradox !!!!

Cita:
Si necesitas conocer el número de filas, tienes que hacer un sql con count(*) y el mismo ORDER BY.
Creo que no necesita conocer el numero de filas, sino en que fila esta en ese momento.
Si se tratase de ir al ultimo registro, un query.last (ojo, si estas en una red y la cantidad de datos es grande esto seria un desastre) seria suficiente.

Hay otra forma de obtener las propiedades col y row sin recompilar las fuentes.

Precisamente ayer estuve leyendo este articulo de Ian:
http://www.marteens.com/trick48.htm

.....Por desgracia, no de forma directa. Si se tratase de un TDrawGrid o un TStringGrid podríamos calcular el número de fila y columna de la celda que se encuentra bajo el ratón. Tratándose de un TDBGrid, en cambio, no existen métodos públicos (al menos que yo conozca) que identifiquen el registro que se está mostrando en determinada fila. Por suerte existe un truco que, combinando varios métodos protegidos de TDBGrid permiten seleccionar una fila dada partiendo de unas coordenadas del ratón. Primero tenemos que ganar acceso a la sección protegida de TDBGrid, y la forma indicada consiste en definir una clase en la misma unidad donde programaremos la función de localización:

type
TGridHack = class(TDBGrid);

Existe una regla en Delphi que permite el acceso a la sección protegido de cualquier clase definida dentro de la misma unidad. TDBGrid está definida en otra unidad, pero nuestro invento, TGridHack, tiene la misma estructura que su ancestro y sí compartirá unidad con nuestro código. Por lo tanto, tenemos acceso a sus declaraciones protegidas, que lógicamente son las mismas heredades de TDBGrid, su ancestro inmediato.

Bueno, yo no lo he utilizado para el ejemplo que indican en esa web, más bien lo que buscaba era otra propiedad, pero funcionaba bien y sencillo.

Saludos
Responder Con Cita
  #9  
Antiguo 02-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Sick boy
Hay otra forma de obtener las propiedades col y row sin recompilar las fuentes.
Hombre, creo que es cuestion de gustos, yo prefiero tener 1 solo componente bueno en la paleta de componentes, que tener el TsmDBGrid y el TsmGridHack.

Cuando andas con prisas, es mejor tener 1 solo componente

Saludos
Responder Con Cita
  #10  
Antiguo 03-03-2005
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
Cita:
Hombre, creo que es cuestion de gustos, yo prefiero tener 1 solo componente bueno en la paleta de componentes, que tener el TsmDBGrid y el TsmGridHack.
Sigo sin saber que es un TsmDBGrid.

Yo he utilizado el truco anterior para conocer las propiedas row y col, y no he necesitado añadir otro componente a la paleta, ya que todo se puede hacer desde el codigo.

Por otro lado, dudo que exista "1 solo componente bueno", unos iran mejor para unas cosas y otros para otras.
Responder Con Cita
  #11  
Antiguo 04-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Sick Boy dale una visual a scalabium web en el apartado de Freeware, tienes el componenete en cuestion.

Cita:
Empezado por Sick Boy
[...] y no he necesitado añadir otro componente a la paleta
De acuerdo, es una opción, pero cada vez que necesites saber la columna y la fila (en otros programas) tendrás que crear la función de localización para cada programa, o copiar el código.

La modificación a realizar es quitar 2 comentarios en los fuentes e instalarlo de nuevo. (otra cosa es que funcione.... que no lo he probado). Si está comentado ... por algo será.

Saludos.
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


La franja horaria es GMT +2. Ahora son las 08:05:20.


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