Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Cambios en un DataSet

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Cambios en un DataSet Responder citando

Hola a todos.

Tengo un TDataSet, donde imaginemos que tenemos 3 campos.

Campo1, Campo2, Campo3

Voy a realizar un cambio solo en el Campo2 de la siguiente manera.

TDataSet->Edit();
TDataSet->FieldByName("Campo2")->Text="Hola";
TDataSet->Post();

Hay alguna forma antes de hacer el Post() de saber que campos voy a modificar y con que valores?

El problema es que este proceso es muy lento y hacerlo con una simple Query y un Insert o un Update es mucho más rapido, la idea es identificarlo antes y hacer una funciona que lo modifique, es para un programa antiguo y seria muchísimo trabajo hacer uno a uno el cambio.

Un saludo

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

No nos dices de donde sacas la información con que quieres actualizar esos campos. Si es a partir de un formulario yo hace mucho que cogí la costumbre de llamar a los elementos del mismo (TEdit, TRadioGroup, etc.) con los mismos nombres de los campos de la tabla; por ahí tengo puesto el código pero n o lo encuentro.

Me da lo mismo que uses un formulario con TEdit, por ejemplo, o sólo variables. Yo lo veo así: Cargas unas variables con los valores que haya ANTES de modificar y luego no tienes más que ir comprobar que valores han cambiado.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Angel escribió:
No nos dices de donde sacas la información con que quieres actualizar esos campos. Si es a partir de un formulario yo hace mucho que cogí la costumbre de llamar a los elementos del mismo (TEdit, TRadioGroup, etc.) con los mismos nombres de los campos de la tabla; por ahí tengo puesto el código pero n o lo encuentro.

Me da lo mismo que uses un formulario con TEdit, por ejemplo, o sólo variables. Yo lo veo así: Cargas unas variables con los valores que haya ANTES de modificar y luego no tienes más que ir comprobar que valores han cambiado.



Ya, la idea es no tocar codigo en cada sitio donde cojo los datos y hago el Post, por que unos son formularios, otros automaticos, otros calculados, etc...

Si puedo acceder al evento "BeforePost" cojo los datos, los convierto en una query tipo Update o Insert y cancelo el Post, asi consigo que vaya mil veces más rapido.

Es un poco complejo pero si lo consigo seria super facil cambiar todo el programa sin tocar practicamente nada salvo el "BeforePost"

Un saludo

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

En muchos casos y llamado "Mejores prácticas" es preferente realizar estas operaciones del lado del servidor de la base de datos.

Por mencionar un ejemplo, para actualizar o modificar un campo en una base de datos de Firebird, he creado un procedimiento de la siguiente manera.

Código:
CREATE OR ALTER PROCEDURE sp_actualiza_tablax (
    p_id_unico VARCHAR (150),
    p_campo1   VARCHAR (300))
AS
    DECLARE VARIABLE existe INTEGER;
BEGIN
    existe = 0;
    /*  Busco el registro por el campo unico y asigno el total a la variable existe */
    SELECT COUNT (p.id_unico) FROM tablaX p WHERE p.id_unico = :p_id_unico INTO existe;
    IF (existe > 0) THEN
    BEGIN
        /* Si el registro existe, entonces solo se actualiza */
        UPDATE tablaX p SET p.campo1 = :p_campo1 WHERE p.id_unico = :p_id_unico;
    END
    ELSE
    BEGIN
        /* Si el registro no existe entonces insertamos el registro */
        INSERT INTO tablaX ( campo1 )
        VALUES ( :p_campo1);
    END
END


Posteriormente puedes llamar a este procedimiento en el botón "guardar", pasando los parámetros correspondientes y el servidor de datos se encarga de realizar la operación correcta de actualizar si encuentra el registro o de insertar el dato en la tabla, cada vez que hagas una llamada a este procedimiento el servidor sabe que realizar.

Así evitas el estar realizando programación del lado del cliente y "todo" se hace en el servidor (que es lo correcto).
El cliente es solo una interfaz gráfica de lo que se realiza en el servidor. (o al menos así debería de ser...)

Saludos.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.