PDA

Ver la Versión Completa : Tstrings en datasnap


juank1971
25-05-2011, 16:51:52
Saludos :
Alguien me puede decir como pasar como parametros a un servidor Datasnap un Tstrings, estoy usando delphi XE y DataSanap conectado a MySql funciona todo bien, Cuando paso a un procedimiento del servidor DataSnap un string funciona perfecto pero cuando lo hago con un Tstring me da error

Lo que quiero hacer realmente es ejecutar varios insert en una sentencia pasada al servidor datasnap en un Tstrings

ejemplo
inser into 'documentos' values ('','c:\delphi\delphi.doc',null);
inser into 'documentos' values ('','c:\delphi\delphi1.doc',null);
inser into 'documentos' values ('','c:\delphi\delphi2.doc',null);


este es el procedimiento que uso para ejecutar varias sentencias sql

procedure TServerMethods1.EjecutaVariasSQL(sql1: Tstrings);
var
i,j: Integer; s,Sentencia:string;
begin
for i := 0 to sql1.Count - 1 do
begin
s := sql1[i];
// va ejecutando cad sentencia MySql terminada en ; una a una
for j := 1 to length(s) do
if s[j] <> ';' then
Sentencia := Sentencia + s[j]
else
begin
try
ServerContainer1.MySqlCon.ExecuteDirect(Sentencia + ';');
// ejecuta la sentencia independiente
Sentencia := '';
except
// res := 'Error creando tablas de la base de datos'
end; // try
end
end;
end;


este procedimiento funciona bien cuando lo llamo desde el mismo servidor DataSnap con una salva por ejemplo de la base de datos y este procedimiento ejecuta cada sentencia sin problemas, si alguien el sirve lo pueden usar , es ideal para crear y restaurar salvas con sentencias sql

pero al llamarlo del cliente me da error que mas odio en delphi

remote error:accses violation at address in server.exe

y cuando pongo una traza en el servidor el tstrings sql1 llega vacio.

alguna sugerencia de los que estan al asecho .

Gracias por adelantado.

PD:
A veces me da emoción leer una respuesta aqui, incluso cuando veo que tengo una respuesta antes de leer busco un té y me lo tomo mientras leo,
me parece que estoy como en una tertulia de poesia o algo parecedido, y que cada respuesta veo una persona sin rostro que me aconseja como si fuera un medico con una enfermedad grave.

luisgutierrezb
25-05-2011, 17:50:45
pues yo siempre batallo con el TStrings, uso el TStringList

juank1971
25-05-2011, 19:08:47
Gracias por responder:

En que campo de batalla tu te fajas TStrings y tstringlist en servidor Datasnap?

Porque lo probe ahora con TstringsLIst y me da el mismo error, al parecer un servidor Datasnap no recibe parametros Tstrings ni Tstringlist de un cliente, voy a buscar otro tipo de datos a ver

gracias amigo salud y pesetas para ti

juank

Caro
25-05-2011, 19:59:25
Hola juank1971, primero aclarar que nose nada de DataSnap. Por lo que dices no tienes problemas al mandar como String, puedes probar de mandar tu StringList como String y al otro lado lo pasas a un StringList nuevamente, para ello puedes utilizar la propiedad CommaText del StringList.


Valor : String;
..........................
Valor := StringList1.CommaText;
....................................
....................................
sql1.CommaText := ValorEnviado;


Saluditos

juank1971
25-05-2011, 21:31:40
Caro perfecto, funciona perfecto, no se de donde sacan las ideas ustedes, primera ves en mi vida que veo CommaText en un tstrings,

Aunque la prueba fue rapida y funciona sin problemas, no se hasta que punto pueda utilizarlo, depende de la cantidad de caracteres que pueda pasar en el string.

porque la idea del Tstrings era porque lo que quiero pasar son muchas lineas , ahora al pasarlas todas unidas en ese string no se hasta cuanto soporte.

Muchas gracias Voy a segir probando, pero ahora en una busqueda por internet me parece que como estoy usando Datasnap y la conexion al servidor Datasnap es mediante DbExpress, los tipos de datos que maneja DbExpress creo que no esta Tstrings, son dbx pero no se cuan sera el equivalente a Tstrings.

De todas formas funciono lo que me digistes Gracias a todos salud y pesetas

juank