Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2011
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Querys en DataSnap

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 ????
Responder Con Cita
  #2  
Antiguo 02-03-2011
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Hice esta funcion
Código Delphi [-]
function TServerMethods1.GetServerComandos(SQ: string): TSQLQuery;
begin
  with ServerComandos do
   begin
    active := false;
    sql.Add(SQ);
    ExecSQL;
    active := true;
   end;
   result := ServerComandos;
end;
me devuelve el resultado en TSQLQuery que se ve del cliente sin problema
pero cuando hago una consulta en el cliente me da el siguiente error

Remote error : Insufficientent RTTI available to support this operation

alguna sugerencia ????
Responder Con Cita
  #3  
Antiguo 03-03-2011
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Hola, te sobra la línea active:=true si usas el método ExecSQL, o viceversa,
si haces active:=true, no debes usar ExecSQL.

Código Delphi [-]
function TServerMethods1.GetServerComandos(SQ: string): TSQLQuery;
begin
  with ServerComandos do
   begin
    active := false;
    sql.Add(SQ);
    ExecSQL;
    active := true; // Creo que te sobra esta línea
   end;
   result := ServerComandos;
end;
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #4  
Antiguo 03-03-2011
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
sigue el error

gracias por responder ya lo queite pero me sigue dando el mismo error

ME explico mejor:

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
Responder Con Cita
  #5  
Antiguo 03-03-2011
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
En el servidor DataSnap hice lo que puse antes en el modulo de los metodos que son visibles desde los clientes, 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:

Código Delphi [-]
var  Consulta:TServerMethods1Client;
    Data:TSQLQuery;
begin
  Data :=TSQLQuery.Create(nil);  // creo un objeto TSQLQuery vacio
 
  Consulta := TServerMethods1Client.Create(ClientModule1.DataSnapCon.DBXConnection);
    // creo el objeto de  acceso a los metodos en el cliente con la conexion DataSnap realizada
  try
     s:= 'select id_acceso from accesos where'+
    ' (id_acceso not in '+
    ' ( select id_acceso from acceso_usuario where id_usuario = '+ IntTostr(Idu)+'))' ;
 
 //asigno el resultado de la fucnion del servidor al objeto Data con la query 
//pasada como parametros      
    Data := Consulta.GetServerComandos(s); 
 
  finally
    Consulta.Free; // libero los metodos
  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
Responder Con Cita
  #6  
Antiguo 04-03-2011
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Por probar, mira en las opciones de compilación si tienes marcada la opción:
Emit runtime type information
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
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
DataSnap con delphi 2007 win 32 Paulao Varios 0 29-03-2008 21:40:37
Turotial datasnap Osorio Providers 2 20-09-2006 13:36:10
DataSnap residente en el servidor !!! Velia Providers 0 18-05-2006 15:06:25
capturar errores con datasnap Toni Conexión con bases de datos 1 30-06-2005 21:38:58
Midas y DataSnap Toni Providers 1 09-07-2003 18:30:47


La franja horaria es GMT +2. Ahora son las 13:09:47.


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