Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como ejecutar código almacenado en una base de datos (https://www.clubdelphi.com/foros/showthread.php?t=70439)

r1d2m3 20-10-2010 21:43:21

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.

rgstuamigo 20-10-2010 22:20:43

¡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...:)

Caral 20-10-2010 22:29:27

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

rgstuamigo 20-10-2010 22:34:51

Cita:

Empezado por Caral (Mensaje 379937)
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.:rolleyes:
saludos...:)

Caral 20-10-2010 22:43:51

Hola
Creo que por codigo dice: elementos de configuracion::cool:
Cita:

Empezado por r1d2m3 (Mensaje 379930)
.......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

r1d2m3 20-10-2010 23:10:10

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.

r1d2m3 20-10-2010 23:14:19

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.

Caral 20-10-2010 23:26:02

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

Caral 20-10-2010 23:32:57

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

JoseAntonio 21-10-2010 08:36:49

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...

mcs 21-10-2010 09:03:32

Cita:

Empezado por r1d2m3 (Mensaje 379945)
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

JoseAntonio 21-10-2010 09:10:17

Cita:

Empezado por JoseAntonio (Mensaje 379973)
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 :p

Neftali [Germán.Estévez] 21-10-2010 11:16:09

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.

fjcg02 22-10-2010 10:24:57

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

fjcg02 22-10-2010 10:37:09

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

r1d2m3 22-10-2010 17:46:27

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.


La franja horaria es GMT +2. Ahora son las 20:07:46.

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