Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   No Regreso en el DbGrid (https://www.clubdelphi.com/foros/showthread.php?t=45703)

Gangster 11-07-2007 21:15:21

No Regreso en el DbGrid
 
Hola a todos, Tengo una forma con un dbgrid, entonces en este dbgrid hago el cobro de tickets, pero lo que no quiero que pase, es que en el dbgrid se puedan regresar hacia arriba, no se como decirle al dbgrid que no se haga eso, si ya se cobro y paso de renglon, ya no regresarse ni a borrar ni nada, siempre hacia enfrente es que si ya lo cobro y paso de renglon estara impreso en el ticket de pago, entonces por eso no quiero que se pueda ir para arriba, agradeceria alguna idea o solucion, Saludos y Bye.

ElDioni 12-07-2007 16:17:49

No se como funciona tu programa, si, por ejemplo, lee los artículos con un lector de codigo de barras y se van añadiendo así las lineas en el dbgrid, o si el dbgrid esta enganchado a algún datasource que está a su vez enganchado con un adoquery y desde este insertas los nuevos registros; quiero decir que tu explicación se me hace un poco corta para darte una solución concreta, así a bote pronto te puedo decir que poniendo:
Código Delphi [-]
dbgrid1.enabled:=false;
así no podras moverte ni arriba, ni abajo, ni modificarlo, ni nada, espero te sirva de algo.

Gangster 12-07-2007 21:02:40

Respuesta a mejor Idea de lo que busco
 
Cita:

Empezado por ElDioni
No se como funciona tu programa, si, por ejemplo, lee los artículos con un lector de codigo de barras y se van añadiendo así las lineas en el dbgrid, o si el dbgrid esta enganchado a algún datasource que está a su vez enganchado con un adoquery y desde este insertas los nuevos registros; quiero decir que tu explicación se me hace un poco corta para darte una solución concreta, así a bote pronto te puedo decir que poniendo:
Código Delphi [-]dbgrid1.enabled:=false;

así no podras moverte ni arriba, ni abajo, ni modificarlo, ni nada, espero te sirva de algo.

Hola Dioni, Mira Mi programa esta ligado a un ttable por un datasource, todavia no leemos de un hardware para codigo de barras solo lo que quiero es que no se vaya para arriba dentro del dbgrid, osea producto ya vendido (Significa que ya paso de Renglon en el dbGRID) pues no devolverse para nada arriba es lo que busco y no tengo idea, no tengo nada con ADO,ni con un Query, solo un dbgrid en una forma con un datasource ligado a un ttable, es todo, no se si con esto se entienda mas lo que en si busco y no lo he encontrado o no tengo idea, con lo que me dices pues deshabilito totalmente el dbgrid, creo que no me serviria eso.
Gracias por tu idea Saludos y Bye.

maxvera 12-07-2007 21:36:24

¿Cómo identificas los registros de esa tabla? ¿Tienes un campo autoincremental para la clave primaria o algún id para el registro?

Si es así, dímelo y te discurro algo sencillo.

Gangster 12-07-2007 21:46:04

Respuesta de que uso en DBGRID
 
Cita:

Empezado por maxvera
¿Cómo identificas los registros de esa tabla? ¿Tienes un campo autoincremental para la clave primaria o algún id para el registro?

Si es así, dímelo y te discurro algo sencillo.

Hola Maxvera mira, tengo ligado al dbgrid una tabla tipo detail con dos llaves primarias, entonces una con el id que tenga el master table, y la otra llave es porque si se venden muchos productos no se repita el renglon entonces voy incrementando el renglon despues de cada post (Qe seria cada vez que pase del renglon), la identificacion de los renglones pues es un id, igual a como se graba el numero de ticket en el master table, eso es la ligacion que tengo en las dos tablas.

maxvera 12-07-2007 21:49:04

Bien.

No sé si me paso de listo (por la sencillez de la respuesta), pero esto debería funcionar:

Código Delphi [-]
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
  if Table1.RecNo < Table1.RecordCount then Table1.Last;
end;

Donde, evidentemente, Table1 hace referencia al DataSet ligado al DataSource del DBGrid.

En cualquier caso, deberías deshabilitar el procedimiento cuando edites o insertes un registro.

Espero que vayan por ahí los tiros.

Gangster 12-07-2007 22:27:33

Que Pasara no em Salio
 
Cita:

Empezado por maxvera
Bien.

No sé si me paso de listo (por la sencillez de la respuesta), pero esto debería funcionar:

Código Delphi [-]procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin if Table1.RecNo < Table1.RecordCount then Table1.Last;
end;

Hola MaxVera Pero lo puse asi tal y como me dices pero entonces escribo un renglon en el dbgrid pero al dar la tecla tab no me deja pasar de renglon, y no puedo seguir escribiendo en le grid se queda ahi,como que dice estoy en el ultimo renglon y no me deja escribir otro lo toma ese renglon como el ultimo en la tabla, alguna otra sugerencia o idea, o que error este cometiendo este es mi codigo.

recdetail es mi tabla.

le puse el recordcount = 1, porque sin el ni me deja escribir en el primer renglon. siempre estaria en el ultimo

procedure TASEcom.tbRecDetailAfterScroll(DataSet: TDataSet);
begin
if(ASEcom.tbRecDetail.RecordCount = 1)then
begin
if (ASEcom.tbRecDetail.RecNo < ASEcom.tbRecDetail.RecordCount) then
ASEcom.tbRecDetail.Last;
end;
end;

maxvera 12-07-2007 22:59:38

Prueba esto (con las modificaciones adecuadas a tu código):

Código Delphi [-]
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
  if (not Table1.State in [dsEdit, dsInsert])
  and (Table1.RecNo < Table1.RecordCount)
  then Table1.Last;
end;

Arturo_ 12-07-2007 23:12:02

DBGrid
 
Mira lo que tienes que hacer es:
En este codigo si es primer registro no inserta nada, pero si la tabla contiene registros inserta uno nuevo ok.

if (Table1.RecountdCount <> 0) then
Table1.Append
Table1.Edit;
Table1.FieldByNAme('Nombre').AsString := 'Hello';
Table1.Post;

ElDioni 13-07-2007 11:42:11

¿No has pensado en meterlo en una caja de texto el artículo en vez de directamente en el grid?.
Me explico:
Creo que lo que haces es añadir directamente en el grid, si desabilitaras el grid con lo que te dije enabled:=false y metieras el codigo del artículo en una caja de texto y al pulsar el intro lo añadieras al objeto table, aparecería en el grid ya que esta ligado con el datasource y no podrías manipularlo, cuando dieras de alta el artículo vaciarías la caja de texto y esperaría a que le metieras otro.
No se si te estaré liando más o te servirá para algo, ya me contarás.

Gangster 13-07-2007 18:46:42

Buena Idea esa Pero......
 
Cita:

Empezado por ElDioni
¿No has pensado en meterlo en una caja de texto el artículo en vez de directamente en el grid?.
Me explico:
Creo que lo que haces es añadir directamente en el grid, si desabilitaras el grid con lo que te dije enabled:=false y metieras el codigo del artículo en una caja de texto y al pulsar el intro lo añadieras al objeto table, aparecería en el grid ya que esta ligado con el datasource y no podrías manipularlo, cuando dieras de alta el artículo vaciarías la caja de texto y esperaría a que le metieras otro.
No se si te estaré liando más o te servirá para algo, ya me contarás.


Hola dioni suena bien la idea pero lo que no entiendo que es una caja de texto. es mi unica duda esa si me dices que objeto es ese en ingles para buscarlo dentro de delphi lo agradeceria. Saludos y Bye.

Gangster 14-07-2007 20:26:07

Solucionado
 
En el Evento del KeyUp del dbgrid, atrape la variable de la tecla de la flecha para arriba, la puse dentro de un if, entonces cuando el usuario teclee esa tecla, entonces entra al if que esta en el evento, y entonces lo mando al ultimo de la tabla enlazada al dataset del dbgrid (Le hago un .LAST a la tabla esa), y por ultimo le hago a esa misma tabla un append, entonces si le da para arriba en el dbgrid, pero por el evento, lo manda hacia abajo pero con el append hace un renglon nuevo en el dbgrid y el apuntador del dbgrid a la tabla se va hasta el renglon nuevo hecho dentro del DBGrid, Gracias a todos los que me ayudaron Respondiendome, Gracias por todo Saludos y Bye.


La franja horaria es GMT +2. Ahora son las 10:07:19.

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