PDA

Ver la Versión Completa : Firebird remoto - Modificar registros


Gregorio Cíber
21-03-2021, 21:45:22
¡Hola amigos!

Utilizando los antiguos componentes FIBPlus, conecto con una BD remota (Firebird 3.0) con el código siguiente:

Base.DBName := 'xxx.xxx.xxx.xxx:alias_bd';
Base.LibraryName := camino_aplicacion_local + 'fbclient.dll';
with Base do
begin
DBParams.Clear;
DBParams.Add('lc_ctype=ISO8859_1');
DBParams.Add('user_name=SYSDBA');
DBParams.Add('password=' + clave;
DBParams.Add('sql_role_name=' + rol;
Connected := True;
end;


La conexión se establece perfectamente, se pueden hacer consultas, ejecutar procedimientos almacenados que devuelvan valores, vistas, etc. Todo menos modificar registros de la BD. Por ejemplo, esto no funciona:

Base.tra_General.Active := True;
Base.tra_General.StartTransaction;
Base.qry_General.ExecProc;
Base.tra_General.Commit;
Base.ra_General.Active := False;


Siendo el código SQL del componente qry_General (TpFIBQuery):

update tbl_clientes
set nombre = nombre || ' algo'
where (cid_cliente = xxxx)

Esta tontada de código SQL es simplemente una prueba después de cansarme de ejecutar un procedimiento almacenado que debía crear un pedido y que no he conseguido hacer que funcione.

Alguna sugerencia. De todas formas, gracias.

Casimiro Notevi
21-03-2021, 23:25:04
Pregunta obvia: ¿existe el cliente xxxx?

Gregorio Cíber
22-03-2021, 00:21:42
Pregunta obvia: ¿existe el cliente xxxx?

Gracias por responder, Casimiro.

Sí, por supuesto.
Mediante IBExpert se accede a la BD y se mantiene exactamente igual que si fuera local, lo que me hace pesar que el problema no esté en el ordenador, router o firewall del servidor.

Casimiro Notevi
22-03-2021, 09:33:16
A ver si estás apuntando a otra BD en ese alias.

Gregorio Cíber
22-03-2021, 21:12:40
A ver si estás apuntando a otra BD en ese alias.

Gracias Casimiro.
No, todo en el procedimiento era correcto a excepción de lo que faltaba, que era un Close al final :eek:
Ya funciona perfecto. Gracias de nuevo.

Gregorio Cíber
23-03-2021, 20:47:58
¡Hola amigos!

Retomando este hilo quiero plantear una situación para ver qué solución veis más factible.

Desde Delphi, mediante un TTimmer, se chequea periódicamente una tabla de pedidos y se localizan los que hay que transmitir a un servidor remoto. Este es el procedimiento que no funcionaba por un error mío y objeto de este hilo. Ya va perfecto.

El periodo de tiempo lo estable el cliente a voluntad. Pueden ser pocos segundos, varios minutos incluso horas. Y aquí es dónde se plantea el problema.

Supongamos que el tiempo se estable en 60 segundos (para otra cantidad sería exactamente igual). Agotado este tiempo se hace una selección de los pedidos que están pendientes de enviar y se activa el proceso de envío. Esto, como ya dije antes, funciona bien.

Pero, ¿y si la selección empieza con pedidos que no están terminados? Es decir, ¿y si en uno a varios pedidos no se ha terminado de introducir todas las líneas?. Evidentemente estos pedidos serían seleccionados y enviados, sólo que con parte de las líneas de detalle que no componen, no todas.

He pensado en poner un botón para marcar el pedido una vez que se dé por terminado. Pero, ¿hay alguna otra solución más elegante? Esta me parece un poco 'cutre', no sé que pensáis vosotros.

Agradezco sugerencias. Gracias.

Casimiro Notevi
23-03-2021, 21:07:22
Debes crear un hilo nuevo para esa pregunta, porque aparte de que incumple las normas (https://www.clubdelphi.com/foros/guiaestilo.php) del foro, nadie va a entrar a leer esa pregunta porque van a ver en el título "Firebird remoto - Modificar registros", y no tiene nada que ver con tu pregunta, que puede ser respondida por personas que ya hayan pasado por ese problema.

Gregorio Cíber
23-03-2021, 21:32:35
Perdón. Así lo haré.

Casimiro Notevi
23-03-2021, 22:32:04
^\||/^\||/^\||/