PDA

Ver la Versión Completa : Copiar DataSnap server a otra PC


Carlos Lopez
25-09-2018, 04:59:36
Hola gente. Estoy desrrollando una app que usa una base de datos firebird, conectado con datasnap. En la PC donde fue desarrollada la aplicacion anda perfectamente. Pero me sucede que al intentar correr el archivo "DNserver.exe" en otra computadora no conecta con la base de datos. Podrian guiarme por donde puede estar el error, o lo que tengo que hacer?
Estube leyendo sobre agregas las dll. a la pc destino, pero a pesar de mis intentos no hubo exito.

Casimiro Notevi
25-09-2018, 09:09:29
Te aconsejo nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), saludos.

Carlos Lopez
25-09-2018, 23:12:43
mis disculpas si no supe preguntar o es confuso.
si es por duplicar, he buscado el tema y no existe, al menos como he hecho las busquedas.

manelb
26-09-2018, 07:21:55
Podrías decirnos que error te sale exactamente ???

Podría ser el antivirus ?? o el cortafuegos ?? Algún problema con el puerto ??

Saludos

Neftali [Germán.Estévez]
26-09-2018, 09:19:24
Estaría saber qué DLL's has copiado.
¿Has probado a connectar desde el PC usando algunas de las herramientas para Firebird? Para saber si el único que no conecta es el Server o no conecta nadie.
El error que te da, tal como comentan los compañeros, también estaría bien saberlo.

Carlos Lopez
26-09-2018, 18:49:18
Muchas gracias por responder... con sus respuestas me guian para seguir probando.


las dos computadoras (32 bits) tienen el mismo servidor firebird 2.5. instalado y corriendo.

las aplicaciones "VCL form 32 bits" conectan a la misma base de datos sin problemas desde ambas PC.
el problema lo tengo al conectar el movil con el servidor datasnap (copiado a la pc sin delphi instalado)
y no me da ningun error y es lo que me llama la atención


recuerden que no puedo correr el debug ya que en la pc (con delphi) si funciona.



bien, inicia correcto el DSserver (agregue unos label para que me indique por donde pasa...).
creo que el error esta en el TSQLconnection (server method) por que agregue un contador en el evento beforeconnect y hace los intentos pero no se envia datos al celular.
y nunca llega al evento after connect tambien cargue unos labels.

agregue en uses todos las librerias que encontre en la web. midas, las de dbexpress y las winapi

agregue unos dll (en la carpeta del exe, en system 32 y wow64) (me falta en la papelera de reciclaje :') :') :') ) que tambien estuve leyendo: midas, fbclient, dbxfb.

antivirus y firewall desactivados.

de nuevo agradezco mucho su ayuda...

Casimiro Notevi
26-09-2018, 19:14:57
agregue en uses todos las librerias que encontre en la web. midas, las de dbexpress y las winapi
agregue unos dll (en la carpeta del exe, en system 32 y wow64) (me falta en la papelera de reciclaje :') :') :') ) que tambien estuve leyendo: midas, fbclient, dbxfb.
Es que así no se hacen las cosas, hay que ir paso a paso, uno a uno, anotando lo que se hace, el resultado que da. Dejarlo como estaba si no funciona. Y volver a empezar con otro paso...
De esa forma puedes hacer miles de cosas distintas y jamás vas a saber cuál es el problema, suponiendo que se solucione por casualidad.

Carlos Lopez
26-09-2018, 19:40:44
buenas tardes casimiro muchas gracias por responder.


todas las modificaciones fueron hechas paso a paso, segun las fui encontrando en la red.
De hecho creo versiones de cada una en carpetas deferentes por si se rompe todo.



appmovil_v1 - midas
appmovil_v2 - dbexpress
appmovil_v3 - las dos anterioes combinadas.
y asi... hasta la v17 que estoy ahora

todos los dll y uses que fui agregando llegaban las mismo punto

entrar al beforeconnect del sqlconnection
y nunca llega al afterconnect

llegue a un comentario que habla de las versiones de las librerias dbclient, y dbxfb.
voy a verificar y ver si es eso (aunque usé el mismo instaldor de firebird server para ambas computadoras)

Casimiro Notevi
26-09-2018, 19:46:37
Bien hecho, entonces.
Yo probaría a hacer un proyecto simple de pruebas, un simple botón que conecte y punto. A ver si así funciona.

Carlos Lopez
27-09-2018, 05:02:16
Buenas.
Hice una app que me de alguna señal de vida al iniciar el servicio dsserver

Al iniciar el componente indi responde al IP del servidor y funciona bien.
Pero necesito que funcione con la base de datos y ahí estoy perdido.



No se o no entiendo que hace delphi con su ejecutable.

Que hace que no funcione en otra pc.


No puede ser que tenga que instalar delphi en todos los servidores

Casimiro Notevi
27-09-2018, 10:06:30
El problema, al igual que te han preguntado otros compañeros, es que no sabemos exactamente qué haces ni qué problema tienes, errores, código, etc...
Falta información clara.

Carlos Lopez
02-10-2018, 21:09:37
buenas tardes. gracias a todos los colaboran con el problema que tengo,

agrego el codigo de la aplicacion servidor, a ver si se ilumina el caino.


como dije antes en la app del celular ni en la aplicacion, no me figura ningun error, solo no muestra nada en la grilla del celular.



unit ServerMethodsUnit1;

interface

uses System.SysUtils, System.Classes, System.Json,
DataSnap.DSProviderDataModuleAdapter,
Datasnap.DSServer, Datasnap.DSAuth, Data.DBXFirebird, Data.FMTBcd,
Datasnap.Provider, Data.DB, Data.SqlExpr,
// librerias de testeo
winapi.windows, datasnap.dsconnect, datasnap.dbclient, midaslib, midas;

type
TServerMethods1 = class(TDSServerModule)
coneccion: TSQLConnection;
itemactivo: TSQLDataSet;
itemactivoDSP: TDataSetProvider;
procedure coneccionBeforeConnect(Sender: TObject);
procedure coneccionAfterConnect(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function EchoString(Value: string): string;
function ReverseString(Value: string): string;
function editarconecciontype(): integer;
end;

var

implementation

{$R *.dfm}

uses System.StrUtils, principalfrmdn;

function TServerMethods1.EchoString(Value: string): string;
begin
Result := Value;
end;

function TServerMethods1.ReverseString(Value: string): string;
begin
Result := System.StrUtils.ReverseString(Value);
end;

// ----------------------- mis agregados ------------------------------

procedure TServerMethods1.coneccionAfterConnect(Sender: TObject);
begin
principal.labelestado.Caption := principal.labelestado.Caption + ' - OK';
end;

procedure TServerMethods1.coneccionBeforeConnect(Sender: TObject);
begin
editarconecciontype;
end;

function TServerMethods1.editarconecciontype() :integer;
begin
inc(contador);
principal.pathbd.Caption := coneccion.Params.Values['Database']+' -> '+ IntToStr(contador);
end;

end.


unit ServerContainerUnit1;

interface

uses System.SysUtils, System.Classes,
Datasnap.DSTCPServerTransport,
Datasnap.DSServer, Datasnap.DSCommonServer,
IPPeerServer, IPPeerAPI, Datasnap.DSAuth,
// librerias de testeo
winapi.windows, Data.SqlExpr, Datasnap.Provider, datasnap.dsconnect, datasnap.dbclient, midaslib, midas;

type
TServerContainer1 = class(TDataModule)
DSServer1: TDSServer;
DSTCPServerTransport1: TDSTCPServerTransport;
DSServerClass1: TDSServerClass;
procedure DSServerClass1GetClass(DSServerClass: TDSServerClass;
var PersistentClass: TPersistentClass);
private
{ Private declarations }
public
end;

var
ServerContainer1: TServerContainer1;

implementation

{$R *.dfm}

uses
ServerMethodsUnit1;

procedure TServerContainer1.DSServerClass1GetClass(
DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass);
begin
PersistentClass := ServerMethodsUnit1.TServerMethods1;
end;

end.





unit principalfrmdn;

interface

uses Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, WinSock, Data.DB, Data.SqlExpr, Vcl.ExtCtrls,
// librerias de testeo
winapi.windows, Datasnap.Provider, datasnap.dsconnect, datasnap.dbclient, midaslib, midas;

type
Tprincipal = class(TForm)
labeltitulo: TLabel;
labelestado:TLabel;
pathbd: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;

var
principal: Tprincipal;
contador : integer;

implementation

uses ServerMethodsunit1, servercontainerunit1;

{$R *.dfm}

end.




itemactivoDSP.DataSet = itemactivo


itemactivo.SQLConnection = coneccion
itemactivo.CommandText = 'Select * From item where item.activo like 0'



coneccion.Driver = 'firebird'

Casimiro Notevi
02-10-2018, 23:20:51
Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), gracias por tu colaboración :)

Y recuerda poner los tags al código fuente, ejemplo:

http://www.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

Carlos Lopez
03-10-2018, 17:35:00
Buenas dias.


Pese a mis intentos mas ferreos no pude lograr que funcione y ya me decepcioné.
Pero una solucion que me recomendaron por otros foros fue que intente con otros componentes de manejo de base de datos firebird.
Buscando por todos lados se evidencia que (aparentemente) fireDAC no necesita el cúmulo de drivers que necesita dbexpress. No se si es asi pero...

reemplace los componentes dbexpress por FireDAC
... y salio funcionando como debia hacerlo, al grito de "Eureka" como si hubiese descubierto algo.


segun opiones de otros medios mi problema con dbexpress puede ser la incompatibilidad con los drivers. (copie los mismo dll a todas las maquinas donde intenté pero bueno).

En algun otro momento con mas tiempo intentare probar otras versiones para ver si logro conectar con dbexpress.


Agradezco el tiempo y la sabiduría que me han ofrecido, y pido disculpas por las fallas cometidas.