A veces podría ocurrir que necesitamos ejecutar los comandos DDL (los que crean tablas, índices, stored procedures, etc.) o DML (los que insertan, actualizan, borran, consultan datos) desde nuestra aplicación en VFP.

La forma más fácil de conseguirlo es a través de un script. Como crear un script habíamos visto en este artículo:

https://firebird21.wordpress.com/2013/05/22/entendiendo-a-los-scripts/

Nuestro script debe consistir de:

  1. SET SQL DIALECT 3;     (si vamos a crear una Base de Datos)
  2. El comando CONNECT o el comando CREATE DATABASE     (si vamos a usar una Base de Datos que no está abierta. Si la Base de Datos ya está abierta estos comandos no serán necesarios)
  3. Los comandos que deseamos ejecutar
  4. El comando COMMIT o la instrucción SET AUTODDL ON

Para ejecutarlo, en la misma carpeta donde se encuentra nuestra aplicación (o en el PATH de búsqueda) debemos tener los archivos:

  • FBCLIENT.DLL
  • ISQL.EXE

Y ejecutamos al programa ISQL.EXE con las opciones -q (para que no muestre el mensaje “CONNECT or CREATE DATABASE …”, -i (para pedirle que ejecute un script) y el nombre del script.

Ejemplo:

Con el bloc de notas del Windows creamos el script “PRUEBA.SQL” que tiene este contenido:

CONNECT MIBASEDATOS USER SYSDBA PASSWORD masterkey;

CREATE TABLE PRUEBA (
   NUMERO INTEGER,
   NOMBRE VARCHAR(40),
   FECHA DATE
);

COMMIT;

INSERT INTO PRUEBA
        (NUMERO, NOMBRE, FECHA)
 VALUES (123 , 'HOLA', CURRENT_DATE);

COMMIT;

Y desde nuestro programa en VFP lo ejecutamos de esta manera:

RUN ISQL -q -i "PRUEBA.SQL"

o de esta manera (la cual es preferible porque no mostrará el destello de la ventana negra “Símbolo del sistema”)

oShell = CreateObject("WScript.Shell")
oShell.Run("ISQL -q -i 'PRUEBA.SQL', 0, .T.")

Para que funcione, recuerda que debes tener a los archivos ISQL.EXE y FBCLIENT.DLL en la misma carpeta donde se encuentra tu aplicación o en el PATH de búsqueda.

Artículos relacionados:

Entendiendo a los scripts

Usando un script para insertar datos fijos

El índice del blog Firebird21

Anuncios