Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2010
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
Como ejecutar código almacenado en una base de datos

Hola amigos, tal como les planteo en el título de este mensaje, estoy buscando la forma de poder ejecutar código que, previamente, fué almacenado en un campo de texto de una base de datos. Ustedes se preguntarán ¿para que hacer esto?, bueno el tema es así, necesito crear unos listados utilizando directamente el objeto printer, y quisiera almacenar todas las instrucciones necesarias para armar dicho listado en un campo de una base de datos, luego cuando necesite ese listado, recupero el código de la base de datos, y aqui esta mi problema, ¿como lo ejecuto, si es que hay alguna forma?.

Espero haber transmitido adecuadamente mi duda y quedo a la espera de alguna sabia respuesta.
Responder Con Cita
  #2  
Antiguo 20-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

¡Muy interesante pregunta...! pero analizandola un poco me parece muy dificil lograrlo, ya que como todos sabemos todo código de delphi es compilado y linkeado por el compilador de manera que cuando tu aplicacion (archivo.EXE) quiera poder convertir (compilar) las instrucciones recuperadas de la base de dato pues será necesario tener el compilador de delphi para poder compilar y ejecutar dichas lineas de código.
De todas formas te sugiero (personalmente) que el problema de tu listado lo resuelva de otro modo si es posible.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 20-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Pues me atrevería a decir, depende.
Si es SQL, se puede.
Si es codigo que tenga forma de ejecutarse dentro de otro proceso como una funcion, se puede.
Creo que depende de a que se llama codigo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 20-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Pues me atrevería a decir, depende.
Si es SQL, se puede.
Si es codigo que tenga forma de ejecutarse dentro de otro proceso como una funcion, se puede.
Creo que depende de a que se llama codigo.
...
Pues segun entiendo, el amigo r1d2m3 se está refiriendo a "código delphi", a no ser que él diga lo contrario.
saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #5  
Antiguo 20-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Creo que por codigo dice: elementos de configuracion:
Cita:
Empezado por r1d2m3 Ver Mensaje
.......bueno el tema es así, necesito crear unos listados utilizando directamente el objeto printer, y quisiera almacenar todas las instrucciones necesarias para armar dicho listado en un campo de una base de datos, luego cuando necesite ese listado, recupero el código de la base de datos,
Esto pueden ser muchas cosas.......
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 20-10-2010
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
gracias por los post, aclaro un poquito el tema, lo que necesitaría es poder meter todo el código necesario para construir el listado, a continuación, pongo unas cuantas líneas demostrativas:

Código Delphi [-]
  with Printer do
    begin
      Orientation:= poPortrait;
      PrinterIndex:=-1;
      Title := 'Prueba'; // Este es el titulo que aparece cuando miras en la impresora
      BeginDoc;  // Inciamos el documento
      Canvas.Font.Name := 'Verdana';
      Canvas.Font.Size:= 10;
      x:=CentrarHor(PageWidth, Canvas.TextWidth('Prueba de Impresion'));
      Canvas.TextOut(x,100,'Prueba de Impresion'); // Sacamos un texto
      EndDoc; // Finalizamos
    end;

lo que busco es meter este código dentro de un campo tipo blob, por ejemplo, y luego, desde mi aplicación, levantar el registro correspondiente, acceder a dicho campo blob, tomar el texto de allí dentro y ejecutarlo.
Si se pudiera hacer esto, podriamos alimentar de listados a un sistema simplemente con enviarle, mediante cualquier forma, el registro de datos, campo blob incluido y listo, tendríamos activo un nuevo listado. Obviamente, antes se debería aseguar que el código está libre de errores.
Responder Con Cita
  #7  
Antiguo 20-10-2010
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
un comentario mas, se que esto se puede hacer en otros lenguajes, tales como C#, mediante una técnica conocida como reflexion, de ahí que tengo esta inquietud por resolver esto de esta forma peeeero, con Delphi. Si se les ocurre otra idea que funcione mas o menos parecido a lo que busco, también les agradeceré cualquier propuesta.
Responder Con Cita
  #8  
Antiguo 20-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No se de reflexion, pero lo logico es pedir los datos no el codigo completo:
Código Delphi [-]
 with Printer do
    begin
      Orientation:= campo1;
      PrinterIndex:=-campo2;
      Title := campo3; // Este es el titulo que aparece cuando miras en la impresora
      BeginDoc;  // Inciamos el documento
      Canvas.Font.Name := campo4;
      Canvas.Font.Size:= campo5;
      x:=CentrarHor(PageWidth, Canvas.TextWidth(campo6));
      Canvas.TextOut(campo7,campo8,campo9); // Sacamos un texto
      EndDoc; // Finalizamos
    end;
Todo esto con sql por supuesto.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 20-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ahora: Para hacer algo asi yo lo haria con un archivo INI ya que modificarlo seria muy sencillo sin tener que meterse a la BD.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 21-10-2010
Avatar de JoseAntonio
JoseAntonio JoseAntonio is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lima - Ciudad de los Reyes.
Posts: 87
Poder: 19
JoseAntonio Va por buen camino
Bueno yo conozco un lenguaje script llamado fastscript que permite que le des una instancia de un objeto de delphi (cualquier clase) y puedes hacer cualquier cosa con el objeto en tiempo de ejecucion mediante el lenguaje script, no se si eso te serviria, puedes programar con pascalscript vbscript y jscript, el componente es de paga...
__________________
nuestro carácter está reflejado en cada línea de código que escribimos.
Responder Con Cita
  #11  
Antiguo 21-10-2010
mcs mcs is offline
Miembro
 
Registrado: may 2007
Ubicación: Girona
Posts: 229
Poder: 18
mcs Va por buen camino
Cita:
Empezado por r1d2m3 Ver Mensaje
un comentario mas, se que esto se puede hacer en otros lenguajes, tales como C#, mediante una técnica conocida como reflexion, de ahí que tengo esta inquietud por resolver esto de esta forma peeeero, con Delphi. Si se les ocurre otra idea que funcione mas o menos parecido a lo que busco, también les agradeceré cualquier propuesta.
en C# (y en Java) más o menos se puede, usando lo que tu dices, reflexion. Lo único es que no es tal como pides, o sea, guardando el código fuente y llamando a ejecutarlo. Lo que se hace mediante reflexion es simplemente ejecutar codigo ya compilado, pero que no sabemos en que fichero/clase se encuentra.

Para hacer algo similar en Delphi tendrías que tener el codigo antes mencionado compilado, cargarlo en memoria y ejecutarlo. Esto, en tiempos del MS-DOS no era ningún problema. Actualmente, no tengo nada claro que se pueda hacer, debido a los sistemas de protección de memoria de los micros x86 (la memoria puede ser de datos o de programa. Si es memoria de datos, no se puede ejecutar, y si es memoria de programa, no se pueje modificar).

Lo más simple que puedes hacer es usar lo que te dice JoseAntonio, o sea, un lenguaje de script interpretado, y guardar tus scripts en la base de datos.

Saludos,

Marc
Responder Con Cita
  #12  
Antiguo 21-10-2010
Avatar de JoseAntonio
JoseAntonio JoseAntonio is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lima - Ciudad de los Reyes.
Posts: 87
Poder: 19
JoseAntonio Va por buen camino
Cita:
Empezado por JoseAntonio Ver Mensaje
Bueno yo conozco un componente llamado fastscript que permite que le des una instancia de un objeto de delphi (cualquier clase) y puedes hacer cualquier cosa con el objeto en tiempo de ejecucion mediante el lenguaje script, no se si eso te serviria, puedes programar con pascalscript vbscript y jscript, el componente es de paga...
me corrijo yo mismo
__________________
nuestro carácter está reflejado en cada línea de código que escribimos.
Responder Con Cita
  #13  
Antiguo 21-10-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Puesto que Deplhi no es un lenguaje interpretado, como otros, yo me inclinaría por lo que comenta JoseAntonio. Revisar algun paquete que permita Scripting en Delphi.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 22-10-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hay un componente, no sé si en las Jedi o en las RX que te permite escribir código y ejecutarlo. Además trae ejemplos.

Voy a ver si lo encuentro y te puedo dar más información.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #15  
Antiguo 22-10-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
jvcl\examples\RaLib\RaInterpreter\samples de las Jedi

Yo tengo los ejemplos en el siguiente directorio de los ejemplos.

Me parece super interesante, y puede que te valga.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #16  
Antiguo 22-10-2010
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
muchas gracias a todos por los diferentes comentarios, voy a investigar un poco este componente Jedi para ver si lo puedo acomodar a mis requerimientos.
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
Procedimiento almacenado que pueda consultar una base de datos diferente. fredycc Firebird e Interbase 3 15-04-2009 21:17:06
Como hacer backup de una base de datos Mysql mediante codigo delphi 7 OscarBravo SQL 1 09-02-2008 04:08:02
Acceder otra base de datos en Procedimiento Almacenado Firebird mario_2000 Conexión con bases de datos 2 05-09-2006 16:35:27
Ejectutar Procedimiento Almacenado en otra Base de Datos AGAG4 Conexión con bases de datos 2 20-09-2004 20:12:44
Como Ejecutar Un Query Desde Un Procedimiento Almacenado multisof Firebird e Interbase 2 04-11-2003 06:15:28


La franja horaria es GMT +2. Ahora son las 12:00:23.


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