Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda a completar una busqueda (https://www.clubdelphi.com/foros/showthread.php?t=21132)

salvanano 07-05-2005 22:43:17

Ayuda a completar una busqueda
 
No se si esta duda va en este hiloo no asiq si es asi pido disculpas, es que soy novato.
Bueno mi duda es que tengo un form con un query, un dbgrid y un datasource con su edit y dos button. Lo que tengo hasta ahora es que el introducir un caracter en el edit en el dbgrid me muestre todos lo campos que coinciden con ese caracter, pues bien, ahora mi duda es como puedo hacer (si se puede) que cuando tenga los campos en el dbgrid, seleccionarlo y al pulsar el boton aceptar, los datos se me pasen a otro form que me gestiona la tabla de la base de datos.
Gracias de antemanos.
PD: Os doy la enorabuena a todos los que formais esta pagina y foro, haceis una labor muy grande.

marcoszorrilla 08-05-2005 10:53:42

Si con eso quieres decir dar un registro de alta, no tienes más que hacer:
Código Delphi [-]
  MiTabla.Append;
  MiTablaMicampo.Value:=Edit1.Text;
  MiTablaMiCampo.Value:=StrToInt(Edit1.Text);
  .....
 MiTable.Post;
 MiTable.FlushBuffers;

Un Saludo.

Lepe 08-05-2005 19:08:47

pues yo he entendido otra cosa distinta, y como esto es un foro para opinar.... pues opino ;)

Yo lo que haría es guardar la clave primaria del registro del grid, y pasar ese valor de una ventana a otra.

Normalmente eso se hace con ventanas modales, es decir, la ventana del grid la muestras con:

Código Delphi [-]
if ventana.showmodal = mrOk then
begin
  tabla.locate('nombreCampo', ventana.Elegido,[]);
  // operar con las tablas
end;
FreeAndNil(ventana) ; //liberamos la ventana;

Y ahora en la ventana del Grid ponemos dos BitBtn, uno de aceptar con su propiedad ModalResult a mrOk y otro bitBtn de cancelar con mrCancel (por ejemplo)

Por supuesto necesitas una variable 'Elegido' de tipo String, o del valor que sea la clave primaria de tu tabla. En el evento Onclick del boton aceptar pones:

Código Delphi [-]
  Elegido := DatasetDelGrid.FieldByName('NombreCampo').AsString;

Un saludo

salvanano 08-05-2005 21:17:30

Tiene razon Lepe, Muchas Gracias

salvanano 09-05-2005 03:39:25

Me surge un problema al hacer esto, y es que al realizar una busqueda no me lo agrega al primer formulario, y al volver a realizar otra busqueda el dbgrid a desaparecido.

Lepe 09-05-2005 09:50:46

Vayamos por partes...
Cita:

Empezado por salvanano
Me surge un problema al hacer esto, y es que al realizar una busqueda no me lo agrega al primer formulario,

la variable Elegido está para hacer "de puente" entre las 2 ventanas, comprueba el valor (con un showmessage) al hacer clic en el boton aceptar y en la otra ventana justo antes del tabla.locate

Quizás sea problema del Grid, ten en cuenta que al hacer clic sobre el boton aceptar, el grid pierde el foco, En las Options del grid, debe tener dgAlwaysShowSelections a true

Cita:

Empezado por salvanano
al volver a realizar otra busqueda el dbgrid a desaparecido.

¿han puesto una denuncia por él?

En principio, puede ser a causa del FreeAndNil, ya que la lógica normal de un programa es crear las ventanas cuando se necesiten, y despues de usarlas, liberarlas de memoria. Pero ahora me surge a mi una duda, ¿como creas las 2 ventanas y cuando las destruyes?

si te parece oportuno, pon algo de código

Un saludo

salvanano 09-05-2005 13:21:52

La cuestion es que no quiero destruir las ventanas, ya que es una busqueda a la que quiero acceder siempre que necesite. el problema esta en que cuando yo pongo
procedure TForm1.Button1Click(Sender: TObject);
begin
if Form2.showmodal = mrOk then
begin
Table1.Locate('Nombre', Form1.Elegido,[]);
// operar con las tablas
end;
En este caso la variable elegido me la da como inexistente, pero la tengo declarada, y si solo pongo Elegido, me la da por buena, pero el programa no me funciona correctamente.
Podrias ayudarme a ayar el problema?
Gracias

Lepe 10-05-2005 09:52:02

Si el Form2 es el de busqueda, la variable elegido debería estar en esa misma ventana.

Por supuesto deberá estar declarada en la zona public de Form2.

ya me contarás si fue un fallo de escritura...

Un saludo

salvanano 17-05-2005 21:31:03

todo correcto pero no funciona
 
Tengo todo correcto, pero no me funciona, creo que es porque utilizo la misma tabla en el dbgrid como en la que quiero que se muestren los datos, pero no estoy seguro. La cuestion es que porque no me deja, tengo declarada la variable 'Elegido', y puesto todo en su sitio, pero al darle a aceptar no me hace nada, tan solo vuelve a la ventan principal, y deja todos los campos como estaban anteriormente.

Lepe 18-05-2005 18:21:53

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
if Form2.showmodal = mrOk then
begin
if Table1.Locate('Nombre', Form1.Elegido,[]) then
  ShowMessage('si encontrado')
else
  ShowMessage('no encontrado');
// operar con las tablas
end;

Con esto ya sabes si lo encuentra o no. Debería encontrarlo por fuerza

Pon un breakpoint (punto de ruptura) en el table1.locate, y mira por donde vá.

Que significa "operar con las tablas"

Un saludo

salvanano 20-05-2005 20:06:56

Solucion Muy Facil
 
He encontrado una solucion muy facil, y es en la tabla del form1 en la opcion MasterSource porner Form2.Datasource1. De esta forma automaticamente pasa los datos seleccionados a la ventana inicial.
Es un poco cutre pero funciona perfetamente, es simple y no me complico tanto la vida.
Un saludo y muchas gracias por ayudarme.


La franja horaria es GMT +2. Ahora son las 09:46:55.

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