PDA

Ver la Versión Completa : Enviar datos de un dbgrid a dbedit o a otro dbgrid


The Cid James
03-11-2017, 09:04:53
Anteriormente enviaba los datos de un form a otro facilmente con

procedure TfListadoCliente.bModificarClick(Sender: TObject);
begin
fmodulo.tCliente.Active := true;
if fmodulo.tCliente.Locate('id_cliente',
fmodulo.qCliente['id_cliente'], [])
then
begin
fmodulo.tCliente.Edit;
fcliente := Tfcliente.Create(Self);
try
fcliente.ShowModal;
finally
fcliente.Free;
end;
end;
fmodulo.tCliente.Active := false;
fmodulo.qCliente.Refresh;
end;
Esto funcionaba bien pero terminaba trabajando con demasiados formularios abiertos para hacer solo una edicion de datos asi que cambie el entorno para hacer todo en un solo form como se muestra en la imagen

https://image.prntscr.com/image/cADRvM12RV_h0hXJJz4VHQ.png

Pero no logro mandar los datos a los dbedit

procedure TfListadoCliente.bModificarClick(Sender: TObject);
begin
if fmodulo.tCliente.Locate('id_cliente', fmodulo.qCliente['id_cliente'], [])
then
begin
fcliente := Tfcliente.Create(Self);
end;
fmodulo.qCliente.Refresh;
end;


Tambien tenia pensado usar un dbgroipbox y filtrar datos en el dbgrid alguna sugerencia al respecto?

Casimiro Notevi
03-11-2017, 10:05:38
Creo que ya te hemos recomendado el libro La cara oculta de Delphi (http://terawiki.clubdelphi.com/Delphi/Manuales/?download=La_Cara_Oculta_De_Delphi_4_pdf_.zip), si no es así, léelo. "Verás la luz".
Tu problema es que no sabes cómo funcionan los componentes dbloquesea.

The Cid James
03-11-2017, 10:37:55
Creo que ya te hemos recomendado el libro La cara oculta de Delphi (http://terawiki.clubdelphi.com/Delphi/Manuales/?download=La_Cara_Oculta_De_Delphi_4_pdf_.zip), si no es así, léelo. "Verás la luz".
Tu problema es que no sabes cómo funcionan los componentes dbloquesea.

No solo los componentes de db sino todos, y me complica la existencia a la hora de elegir que componente para cada cosa. No soy usuario de windows tampoco pero como la materia que me pide que si o si sea en delphi ni modo, si me interesa la programación pero no orientada a objetos y mucho menos si tengo que usar windows. De echo todo lo que tenga que ver con la teoría de esto lo tengo echo y aprobado. Ahora al pasarlo a delphi es otro tema :(

Y si estoy terminando la unidad 6 de el lado oscuro 4, también descargue los demás y voy avanzando en mis ratos libres con el material. Tengo trabajo y mas materias que estudiar sino tuviera un plazo no preguntaría y seguiría avanzando en mis tiempos. Tampoco pretendo perder el tiempo de los que colaboraron antes con mis dudas, antes de preguntar algo siempre busco en Internet y en el foro (ya vi los demás post del tema y no aclararon mis dudas) y tampoco pretendo que me hagan el código o algo por el estilo no me sirve sino aprendo por si alguna otra vez tengo que volver a usar el IDE, solo pido que me remarquen los errores de lógica o en el uso de componentes.

Casimiro Notevi
03-11-2017, 10:49:53
La asociación es:
Componente DBxxxxxxx -> DataSource -> DataSet (el dataset es un query, table, etc. o cualquier componente enlazado a una base de datos).
Así que un componente DBedit, DBcheckbox, DBgrid, etc. es solamente "una ventana" a la base de datos, que muestra los registros que tiene el DataSet.
Por lo que para cambiar lo que hay en el DBxxxxx lo que tienes que hacer es modificar el DataSet, no el DBxxxxxx
Si el DataSet tiene "select codigo, nombre from tbClientes", en el dbgrid verás:1...Pepe
2...Juan
3...AnaSi el Dataset tiene "select codigo, nombre from tbClientes order by nombre", en el dbgrid verás:
3...Ana
2...Juan
1...PepeEs lo mismo para todos los DBxxxxx. No modificas el dbgrid, dbedit, dbxxx, sino el dataset que accede a la base de datos.

The Cid James
03-11-2017, 11:10:59
Eso ya lo tengo echo, en la captura de pantalla esta en vista de diseño pero puedo guardar clientes nuevos refrescar y demas el dbgrid, ahora lo que intento hacer es que en este caso "la edicion" del cliente con datos ya guardados. Al presionar el botón seteo la tabla en modo edit pero no consigo enviar los datos de la query de clientes a los valores de la tdbedit (que trabaja con la tabla clientes)en tiempo de ejecución para poder editarlos (por corrección de datos cambio de domicilio mail etc). Cuando estaba trabajando con dos forms con el codigo que pase enviaba todos los datos directamente al form y los datos del cliente pasaban automáticamente a los tdbedit, pero terminaba con muchas ventanas activas por eso quise hacerlo con un solo form y me estanque.

Para tratar de ser mas claro intento pasar los datos de dbgrid (query) a los tbedit de la tabla para poder editar los datos en tiempo de ejecución. Y creo que para esto no necesito modificar los dataset o las query :confused:

The Cid James
03-11-2017, 12:06:34
Me complique la vida yo solo, con solo una linea de código lo enviaba automáticamente

procedure Tfcliente.BCeditClick(Sender: TObject);
begin
if fmodulo.tCliente.Locate('id_cliente', fmodulo.qCliente['id_cliente'], [])
then
begin
fmodulo.tCliente.Edit;
end;
fmodulo.qCliente.Refresh;
end;

Gracias :D