PDA

Ver la Versión Completa : Duda en declaracion de variables


Paulao
22-09-2010, 15:36:23
Tengo un campo del tipo Text en Mysql. Que pasa que yo necesito pasar por una funcion, un parametro para este campo. Este parametro viene de un memo. Como hago para declarar este parametro deste tipo y cargalo en mi funcion?
Si mi campo en el banco de Datos fuera Varchar, yo declararia como string mi variable, pero como es Blob(Text) como yo declaro, pues el contiene varias leneas y tengo que pasar esto en una funcion. Otra cosa, esta funcion está en um servidor de aplicacion(3 tier) y los parametros en el client.

Ñuño Martínez
23-09-2010, 15:49:10
Los objetos TMemo tienen una propiedad llamada Lines, la cual es un objeto de tipo TStringList del que puedes extraer el contenido completo como un STRING. Es este último el que debes utilizar. Useasé:


PROCEDURE MiMetodo (Texto: STRING);
···
VAR
Memo1: TMemo;
···
MiMetodo (Memo1.Lines.Text);
···

Paulao
23-09-2010, 16:19:47
la ejecucion de los metodos estan en el servidor y en el client solo se van los parametros. Que pasa que el retorno del servidor para el client es OleVariant y el no soporta TStrings. Entonces pasar un retorno del tipo TMemo no funciona. Pense en un record, pero no se como.

Al González
23-09-2010, 17:24:04
Si mi campo en el banco de Datos fuera Varchar, yo declararia como string mi variable, pero como es Blob(Text) como yo declaro, pues el contiene varias leneas...

Hola Paulao. Aunque un texto esté compuesto por varias líneas, puedes manejarlo como un String. Los diferentes saltos de línea son también caracteres (especiales) que forman parte del texto.

Supongo que esto tiene que ver con el tema: http://www.clubdelphi.com/foros/showthread.php?p=377012#post377012


VarString := StringList.Text;

VarString := Memo.Text;


Saludos. :)

Paulao
23-09-2010, 20:10:33
Creo que usteds no intedieron. O que pasa no es manipulacion de string o otra cosa. Es pasarlo de un Servidor de Aplicacion para un Cliente. Es un sistema 3 tier. Entonces tengo un metodo que es executado en el servidor y envia el result para el client via AppServer del Socket. Como estás en el Servidor su tipo es Olevariant(Return). Y este tipo no acepta TStrings o StringList, luego no consigo pasarlo como un Memo, una Lista y etc...
Esta es mi duda.

Al González
23-09-2010, 20:31:10
Creo que usteds no intedieron...Como estás en el Servidor su tipo es Olevariant(Return). Y este tipo no acepta TStrings o StringList, luego no consigo pasarlo como un Memo, una Lista y etc...
Esta es mi duda.

Sí entendimos el problema, Paulao. Pasa como resultado la propiedad Text del TMemo o del TStringList.

OLEVariantX := Memo1.Text;

o bien:

OLEVariantX := StringList.Text;

(OLEVariantX = variable, parámetro "return", etc.)

La propiedad Text contiene todas la líneas del texto, el cual así podrá pasarse como OLEVariant sin problema alguno.

El tipo OLEVariant sí es compatible con String, y dentro de ese String Text están todas las líneas del memo.

¿Se entiende un poco mejor? :)

egostar
23-09-2010, 21:24:15
Hola Paulao

Como te han explicado, lo que debes pasar es un string, en los métodos tu deseas pasar un StringList (lo que no es permitido)

Tu intentas hacer algo así:

MetodoX(const Lista: TStringList); stdcall;

Pero lo que debes hacer es cambiarlo a widestring:

MetodoX(const Lista: widestring); stdcall;

Y en el cliente ya puedes enviar el parámetro como string aunque sea una lista

MetodoX(memo1.text);

Creo que falta mas información de tu parte para entender como estás generando los métodos en el servidor.

Saludos

Ñuño Martínez
24-09-2010, 10:25:51
Sospecho que algo se pierde en la traducción, dado que Paulao es brasileño.:(