Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 23-06-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
por mas que le doi vuelta no se como resolver esto.

Explico un poco la razon por que lo quiero hacer asi.
Imaginense un usuario que se conecta de forma remota al servidor, y en ese momento tiene problemas de conección... que bueno sería que este usuario pudiera trabajar de forma local, realizar ordenes, etc. y cando volviera a tener conección se almacenara todo lo realizado en la BD central o TOTAL.

Gracias a este procedimiento almacenado no tendría problemas de correlativo en la BD central, ya que utilizaría un generador unico.

El problema es que el la BD local, el usuario podria tener mas de una orden de compra almacenada, y en el momento de subir todo a la BD central estas se cruzaria.

Una solución podría ser que solo permitiera una sola orden en la BD local, pero creo que esto no es muy practico.

Cualquier idea es bienvenida.

Gracias
Responder Con Cita
  #22  
Antiguo 23-06-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.107
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Para hacer lo que quieres tendrías que pensar mejor en un sistema de replicación. Mira este hilo.
Responder Con Cita
  #23  
Antiguo 23-06-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Creo tener logicamente resuelto mi problema, pero sigo con un un detalle que no puedo resolver.

Me conecto a la BD general, y ejecuto este procedimiento, el cual funciona bien.

Código SQL [-]
create or alter procedure TAM
as
declare variable OC integer;
declare variable C3 varchar(10);
declare variable C4 varchar(10);
begin
OC = gen_id(NOC,1);
FOR
EXECUTE STATEMENT
'select FIRST 1 proveedor, aval from compras c
inner join tareas t on c.noc = t.id and t.tarea = 1 order by noc'
ON EXTERNAL DATA SOURCE '192.168.0.1:c:\LOCAL.fdb'
AS USER 'SYSDBA' PASSWORD 'masterkey'
INTO :C3, :C4
DO
INSERT INTO COMPRAS (NOC, PROVEEDOR, AVAL) VALUES (:OC, :C3, :C4);
end

Cuando asigno la IP exacta funciona bien (p.e. 192.168.0.1), ahora bien, si escribo "localhost", este no me funciona, siendo que la IP exacta es la IP del servidor.

En estos procedimiento siempre voy apuntar al mismo PC en donde se está trabajando, el problema surge cuando lo distribuya, que no puedo saber de ante mano todas la IP de los PC en los cuales se va a instalar.

Tambien he probado con la IP 127.0.0.1, sin resultados positivos.

Alguna idea?

Saludos.
Responder Con Cita
  #24  
Antiguo 12-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
hola, retomando este tema, les cuento que aún no puedo resolverlo.

Les explico mejor lo que quiero hacer. Utilizo Delphi 2006 y Firebird 2.5.

Una aplicación cliente servidor, quiero k el cliente trabaje directamente sobre una BD instalada en su propio equipo.

Por ejemplo, el cliente desea generar una nueva orden, lo cual se registra en 2 tablas (maestro-detalle) en la BD de su equipo (temporal).

Al momento de presionar el button de emitir, el programa se conecte al servidor principal, copie los datos de las tablas temporales, le asigne un correlativo unico (generador) manteniendo la estructura de relación, y además borre estos registros de la tabla temporal.

Pense hacerlo como expongo mas arriba pero no me ha resultado.

Alguna idea?
Responder Con Cita
  #25  
Antiguo 12-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
como puedo solucionar esto...

Código SQL [-]
create or alter procedure NEW_PROCEDURE (
    DATA varchar(20))
as
declare variable C1 integer;
declare variable PRO varchar(10);
declare variable AVAL varchar(10);
begin
EXECUTE STATEMENT
'SELECT gen_id(NOC,1) AS CODIGO
FROM RDB$DATABASE'
ON EXTERNAL DATA SOURCE ATA||':C:\LOCAL.FDB'
AS USER 'SYSDBA' PASSWORD 'masterkey'
INTO :C1;
select proveedor, aval from compras where noc = 1 into ro, :AVAL;
EXECUTE STATEMENT
'INSERT INTO compras (noc, proveedor, aval)'||
' values ('||:c1||','||cast(ro as varchar(10))||','||cast(:aval as varchar(10))||')'
ON EXTERNAL DATA SOURCE ATA||':C:\LOCAL.FDB'
AS USER 'SYSDBA' PASSWORD 'masterkey';

end

Este código está bien, no me arroja problemas de sintaxis. El problema es que las variables pro y aval son varchar y al momento se insertarlas necesito que esten entre comillas ("), pero si en el código las pongo entre comillas, no me las toma como variables sino como texto.

estas es la linea con problema, cosas que he probado.

Código SQL [-]
' values ('||:c1||','||:PRO||','||:AVAL||')'

Código SQL [-]
' values ('||:c1||','||cast(ro as varchar(10))||','||cast(:aval as varchar(10))||')'

Espero me puedan ayudar, gracias
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
Reporte Maestro/Detalle/Detalle de 4 Tablas jovehe Impresión 2 23-03-2005 01:25:02
Total en Encabezado Detalle pache Conexión con bases de datos 1 12-10-2004 18:15:24
Tablas Maestro-Detalle silviodp Conexión con bases de datos 13 07-06-2004 22:55:22
tablas maestro/detalle vetustas Conexión con bases de datos 7 09-11-2003 22:56:21
insertar en tablas maestro detalle mnorza Conexión con bases de datos 6 25-10-2003 02:28:19


La franja horaria es GMT +2. Ahora son las 10:27:54.


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