Ir al contenido


Foto

Querys en DataSnap


  • Por favor identifícate para responder
3 respuestas en este tema

#1 juank1971

juank1971

    Newbie

  • Miembros
  • Pip
  • 8 mensajes
  • LocationCuba

Escrito 02 marzo 2011 - 02:39

                                                    Saludos:  Necesito saber como hacer una Query de en DataSnap digamos un Inser o un Update de las tablas que quiera,    Hasta Ahora en todos los tutoriales que he leido de DataSnap solo he  visto establecer una conexión y utilizar DBExpress conectado a las  tablas pero del lado del cliente no he podido hacer consultas libres a  varias tablas. solo Aplicar Updates a los Dataset conectados.    No se si me explico bien . por ejemplo tengo en DataSnap XE un servidor  corriendo , conectado el cliente y trabajo las tablas con grid etc sin  problemas , las puedo modificar y todo, ahora quiero hacer una query que  ocupe varias tablas como lo hago ????                                                                                                                                                            [img alt=Responder Con Cita]http://www.clubdelphi.com/foros/images/botones/quote.gif[/img][/color]
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 02 marzo 2011 - 05:30

Realmente no entiendo bien que es lo que estás haciendo exactamente, ni tampoco que es lo que quieres, pero intuyendo un poco te sugiero:

1- En vez de usar Tablas (si es a TSQLTable a lo que te refieres cuado hablas de tablas) usa TSQlQuery,  por ejemplo, coloca en su propiedad SQL lo siguiente:



SELECT * FROM  TU_TABLA



Ahora si lo que quieres es parametrizar o modificar una consulta sobre el mismo TSQLQuery, utiliza la propiedad CommadText del TClientDataset para cambiar la consulta, solo debes tener en cuenta que si usas campos persistentes en el TSQLQuery, la nueva consulta debe contener los mismos campos más no los mismos parámetros.

Si te explicas un poco mejor quizá podríamos ayudarte de una manera mas eficiente.

Saludos

  • 0

#3 juank1971

juank1971

    Newbie

  • Miembros
  • Pip
  • 8 mensajes
  • LocationCuba

Escrito 03 marzo 2011 - 08:03

Ok ME explico:

En DataSnap uso XE.  como se pueden hacer consultas en el  cliente,  esa es mi duda.
Hasta Ahora tengo DbExpress en el servidor DataSnap

TsqlConnection  conectado a Mysql  a una base de datos con varias tablas
TsqlDataSet con select nombre,id_cliente  from clientes
TDataSetProvider conectado al TsqlDataSet esto esta en el ServerContainerUnit1 del servidor DataSnap y todo funciona perfecto.

En el cliente
Un TsqlConnection, DsProviderConnection,TclientDataset y TDataSource  conectado al servidor DataSnap y veo todo bien, pero quiero tener libertad en el cliente para poder usar el elnguaje SQL mas libre,  digamos hacer consultas complejas y optener resultados en el cliente.

por ejemplo select id_cliente from facturas where  id_cliente not in (select  id_cliente from clientes)
esa query esta trabaja sobre dos tablas.

Lo que quiero es ejecutar cualquier consulta desde el cliente en una base de datos de varias tablas MySql que la tengo conectada en el DataSnap. que hasta ahora solo veo en los tutoriales de DataSnap solo conexiones ya preelaboradas en el servidor , como estas select id_cliente from facturas y eso me deja acceder desde el cliente solo a esos registros, pero yo quiero que en el cliente se puedan hacer querys libremente sin tener que diseñarlas previamente en el servidor .

Como siempre se ha hecho en delphi sin usar DataSnap yo siempre he puesto un objeto Query el que sea  conectado a un Connection el que sea y he podido hacer cualquier consulta a una base de dsatos completa de varias tablas y eso es lo que no se como hacer en DataSnap
  • 0

#4 juank1971

juank1971

    Newbie

  • Miembros
  • Pip
  • 8 mensajes
  • LocationCuba

Escrito 03 marzo 2011 - 08:36

En el servidor DataSnap hice esto en el modulo de los metodos que son visibles desde los clientes


delphi
  1. [b][pre][size=3]function TServerMethods1.GetServerComandos(SQ: string): TSQLQuery;
  2. begin
  3.   with ServerComandos do
  4.   begin
  5.     active := false;
  6.     sql.Add(SQ);
  7.     ExecSQL;
  8.     end;
  9.   result := ServerComandos;
  10. end;[/size][/pre][/b]


una funcion que se le pasa como parámetros una consulta y devuelve unos resultados en el objeto  TSQLQuery

y en el cliente la uso de la siguiente manera, despues de haber comprobado y generado la clase respectiva en el cliente con la respectiva funcion del servidor



delphi
  1. var  Consulta:TServerMethods1Client;
  2.     Data:TSQLQuery;
  3. begin
  4.   Data :=TSQLQuery.Create(nil);  // creo un objeto TSQLQuery vacio
  5.  
  6.   Consulta := TServerMethods1Client.Create(ClientModule1.DataSnapCon.DBXConnection);
  7.     // creo el objeto de  acceso a los metodos en el cliente con la conexion DataSnap realizada
  8.   try
  9.     s:= 'select id_acceso from accesos where'+
  10.     ' (id_acceso not in '+
  11.     ' ( select id_acceso from acceso_usuario where id_usuario = '+ IntTostr(Idu)+'))' ;
  12.  
  13. //asigno el resultado de la fucnion del servidor al objeto Data con la query
  14. //pasada como parametros     
  15.     Data := Consulta.GetServerComandos(s);
  16.  
  17.   finally
  18.     Consulta.Free; // libero los metodos
  19.   end;



donde DataSnapCon  es la conexion al servidor DataSnap y GetServerComandos es la funcion que tengo creada en el servidor que se le pasa una onsulta como parámetros y me devuelve un TSQLQuery.

y me da en esta linea Data := Consulta.GetServerComandos(s);
el error
Remote error : Insufficientent RTTI available to support this operation


  • 0




IP.Board spam blocked by CleanTalk.