 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 23 May, 2019 5:47 pm Asunto: Cambios en un DataSet |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 24 May, 2019 12:34 pm Asunto: |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Vie 24 May, 2019 12:37 pm Asunto: |
|
|
| 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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 15 Jun, 2019 4:29 pm Asunto: |
|
|
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. _________________
 |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|