Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Firebird remoto - Modificar registros (https://www.clubdelphi.com/foros/showthread.php?t=95128)

Gregorio Cíber 21-03-2021 21:45:22

Firebird remoto - Modificar registros
 
¡Hola amigos!

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

Código Delphi [-]
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:

Código Delphi [-]
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):

Código SQL [-]
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

Cita:

Empezado por Casimiro Notevi (Mensaje 540394)
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

Cita:

Empezado por Casimiro Notevi (Mensaje 540398)
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 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

^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 04:31:34.

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