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 01-08-2019
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 20
juniorSoft Va por buen camino
Cita:
pues si se me quedan onclick sin enlazar en tiempo de diseño luego no hace nada el control en run time.
Puedes hacerlo en runtime definiendo un método con un parámetro sender y colocar tu código en dicho método y luego en el evento show del formulario recorrer todos los controles del form con un ciclo preguntando si el control es un dbcheckbox asignarle al evento click el método previamente mencionado.

Saludos,
Responder Con Cita
  #2  
Antiguo 01-08-2019
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 20
juniorSoft Va por buen camino
Quizás Otra alternativa mas exótica seria utilizar un Helper para redefinir el evento onclick del componente si este lo permite definiendo tu código de la manera siguiente:

Código:
TFDQuery(TDBCheckBox(Sender).datasource.dataset).ApplyUpdates(0);
Responder Con Cita
  #3  
Antiguo 02-08-2019
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Si esa idea del helper esta buena. pero todavía esto que hice no está funcionando muy eficiente, porque que sucede realmente :
Para que no esté mandando la consulta de update constantemente a MySQL con cada click , porque a lo mejor el usuario marca y desmarca y vuelve a marcar y vuelve a desmarcar, debo comprobar primero que si esta modify el FDQuery y creo que lo mejor es hacer el update en el onmouselive cuando el mause abandona el control,
Porque también sucede otra cosa que nunca había comprobado en Delphi, si das un solo click arriba de un control DB conectado a datos cuando chequeas en el fdquery si esta modify no lo está todavía, al parecer en el evento onclick de un control conectado a datos el dataset no se ha refrescado aun cuando ocurre el evento onclick del DBCheckbox.

Si das click en varios DBCheckbox si se cambia la propiedad Modify del FDQuery pero si das click en un solo DBCheckbox no se cambia Modify, entonces creo que voy a hacerlo en el onmouselive y lo que hago es poner una variable global que me guarde el nombre del componente DBCheckbox donde fue hecho el click y en el onmouselive chequeo primero que este el mouse saliendo del control que previmente di clcik para mandar a hacer el Update porque de lo contrario se ejecutaría el update en cada onmouselive de cada control , entonces con esa variable global voy a forzar a hacer un update correctoen el click que se ejecuto previo, no se si me explique. el problema nuevo que me encontre que no sabia que existia es ese que explique antes que cuando tocas con un solo click un control conectado a datos y chequeas el dataset este no ha refrescado los cambios, no encontre ninguna propiedad que cambiara, ni en el datasourse tampoco. pruebenlo y me dicen si les sucede igual.
Responder Con Cita
  #4  
Antiguo 02-08-2019
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Amigos esto es lo mas funcional pero cochino que he encontrado, funciona muy bien y hace lo que quiero que en resumen es que el usuario cada vez que toque algun control conectado a datos este se actualiza sin preguntar ni interactuar con el usuario me quedo asi, lo veo on poco feo pero no encuentro otra manera de hacerlo.


este esta ya hecho para varios controles DB cada uno tiene asociado el evento onclick o de lo contrario el evento OnChange a el procedimiento onClickControl y estan conectados a FDQuery 's cada FDQuery hay que ponerle la propiedad CachedUpdates a true:



Código Delphi [-]
procedure TForm1.onClickControl(Sender: TObject);
begin
 if Sender is TDBCheckBox then
    ControlClicked :=  (Sender as TDBCheckBox).Name;
  if Sender is TDBRadioGroup then
    ControlClicked :=  (Sender as TDBRadioGroup).Name;
   if Sender is TDBedit then
    ControlClicked :=  (Sender as TDBedit).Name;
end;

procedure TForm1.onMouseLeaveControl(Sender: TObject);
begin
  if Sender is TDBCheckBox then
  if (sender as TDBCheckBox).Name = ControlClicked then
   begin
    ControlClicked := '';
    TFDQuery(TDBCheckBox(Sender).datasource.dataset).ApplyUpdates(0);
   end;

  if Sender is TDBRadioGroup then
  if (sender as TDBRadioGroup).Name = ControlClicked then
   begin
    ControlClicked := '';
    TFDQuery(TDBRadioGroup(Sender).datasource.dataset).ApplyUpdates(0);
   end;

   if Sender is TDBedit then
  if (sender as TDBedit).Name = ControlClicked then
   begin
    ControlClicked := '';
    TFDQuery(TDBedit(Sender).datasource.dataset).ApplyUpdates(0);
   end;
end;
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
MySQL con Firedac muli Desarrollo en Delphi para Android 4 17-05-2018 19:35:19
FireDac+OldValue Luis M. Conexión con bases de datos 3 15-02-2016 02:07:24
Uso de Firedac jafera Conexión con bases de datos 2 12-11-2014 12:46:25
Problema con FireDac darkamerico Conexión con bases de datos 2 04-11-2014 14:05:16
Firedac Aldo Conexión con bases de datos 2 16-12-2013 22:26:07


La franja horaria es GMT +2. Ahora son las 04:05:39.


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