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 Buscar Temas de Hoy Marcar Foros Como Leídos

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
  #7  
Antiguo 04-03-2011
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
ya probe estaba deshabilitado, pero lo habilite y tampoco, sigue dando el mismo error.
Responder Con Cita
  #8  
Antiguo 22-10-2013
gandalf_uy gandalf_uy is offline
Miembro
 
Registrado: ene 2005
Posts: 39
Poder: 0
gandalf_uy Va por buen camino
juank1971 pudiste resolverlo?

Porque estoy investigando con DataSnap y me encuentro en el mismo dilema.

Para acceder a una tabla puntual no tengo problemas, ahora, para poder hacer queries con libertad no se como hacerlo.

Gracias!
Responder Con Cita
  #9  
Antiguo 01-11-2013
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
si

Amigo esa pregunta la hice en el 2011 ya casi ni me acuerdo de eso, pero si, con datasnap se puede hacer todo perfecto del lado del servidor, incluso conectarte a varios tipos de bases de datos, y hacer cualquier consulta, digamos puedes consultar dbf y tambien sql server o my sql todo mesclado.

haces un servidor , a ese servidor conectas la base de datos que quieras y accedes luego del cliente con todo el acceso a esos datos trasparente para el cliente.

Por ejemplo ahora mismo estoy mirando lo que logre en aquel tiempo y funciona perfecto.
creas un servidor datasnap con el asistente delphi para eso, busca en la ayuda si no sabes.
luego en el ServerMethodsUnit1 te conectas de la forma tradicional a cualquier base de datos, en mi caso teno un ttable sencillo conectado a tablas DBF, y ahora lo mas importante, le pones a esa tabla un TdataSetProvider y lo enlazas. ya solo eso, así tengo puestos 5 ttables enganchados a 5 tablas diferentes dbf con sus respectivos TdataSetProvider .

Tambien teno un TadoQuery y en la propiedad conecctionstring me estoy conectandpo a un servidor sqlserver y su respectivo TdataSetProvider tambien.

O sea puedes hacer en ese lugar cualquier coneccion, si quieres pues poner mejor todo con dbxpress que funciona mejor y como debe ser es un Tsqlconnection para la conexion, y varios tsqlquery con varios TdataSetProviders, lo que yo no podia aserlo con tsqlconnection porque eran a dbf y no hay drivers dbexpress para ese tipo de bases de datos.

Entonces en el cliente el solo con el wizar de delphi debe crearte un TSQLConnection y en driver dbexpress en la unit ClientModuleUnit1 y ademas debe crearte tambien un TDSProviderConnection, ya con eso se conecta a tu servidor, luego basta agregarle en ese mismo ClientModuleUnit1 uno o varios TclientDataset y en la propiedad Provider name lo enlazas con el respetivo DatasetProvider que pusiste en el servidor.

Eso funciona perfecto, de hecho a mi criterio es lo que mejor funciona accediendo a cualquier base de datos multiusuario en delphi. Datasnap con dbexpress y Tcliendataset.

Finalmente solo tienes que enlazar como siempre esos TclienDataset con datasorce y mostrar los resoltados en un grid, la forma de ejecutar quierys es poniendo la consulta en la propiedad commandtext del tcliendataset, y le das open .

Me tiras si no encuentras algo, normalmente lo que mas trabajo pasas es en lograr ver los provider del servidor, puesto que para que se vean en el cliente debes copiar la clase que los exporta del servidor y escribirla manualmente en el DSProviderConnection1 en la propiedad ServerClassName, cosa la cual la veo muy mal de delphi eso debiera mostralo solo sin necesidad de escribirla manualmente.

Avisame si me entiendes que yo me pierdo mucho en explicaciones.
Responder Con Cita
  #10  
Antiguo 01-11-2013
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Tquery

Disculpa es mas general todavía, no tengo puestos Ttable Solo Tquery, o sea en el lado del servidor Solo teo TQuery y TadoQuery. y sin embargo actualiza las tablas y hace post perfeco del lado del cliente, y consultas entre varias tablas.
Responder Con Cita
  #11  
Antiguo 15-07-2014
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
Buenos días. Revivo este hilo porque creo que es lo que ando necesitando.

Estoy renegando demasiado con Datasnap, para una aplicación que funcionará sobre android. Este hilo y algunos videos en youtube.com me han ayudado bastante. He podido crear mi servidor y enviar mensajes entre este ultimo y el cliente.

Aunque igualmente aún hay algo que no estoy haciendo bien, no logro conectar los ClienDataSet con mis tablas en la BD. Debo confesar que siempre utilicé los IBTable, por lo que es mi primer experiencia con los primeros. Pero no logro, desde el cliente, enviar una consulta, traerme del servidor un conjunto de registros, y mostrarlos en una lista o grilla.

Habrá algún ejemplo referido a esto?. Supuestamente del lado del servidor hay un módulo donde se publican los métodos para poder accesarlos desde el cliente, pero como devuelvo el resultado de un query? o una IBTable filtrada?

Espero me puedan ayudar.

Muchas gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 22:40:37
Turotial datasnap Osorio Providers 2 20-09-2006 14:36:10
DataSnap residente en el servidor !!! Velia Providers 0 18-05-2006 16:06:25
capturar errores con datasnap Toni Conexión con bases de datos 1 30-06-2005 22:38:58
Midas y DataSnap Toni Providers 1 09-07-2003 19:30:47


La franja horaria es GMT +2. Ahora son las 20:51:24.


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