![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
La idea parécese no es ejecutar, sino modificar el código del store procedure.
Existir.. existe el Ib Expert que lo hace muy bien con sus sqlScripts y además es gratis. Si por la causa que sea se quiere hacer dentro del programa, habrá que tener en cuenta algunos detalles: - El modo de hacerlo es el correcot, un sqlquery y ExecQuery o ExecSql - Tendrás que cambiar el caracter terminador (mira la ayuda de SET TERM) Cita:
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#2
|
|||
|
|||
|
Actualizar estructura de la Base de Datos
Gracias por vuestras respuestas.
Había pensado en ejecutar instrucción por instrucción, aunque preferiría poder ejectuar todo un fichero de golpe (si es posible, claro ). Si por lo que sea se ha detectado un error al intentar procesar dicho fichero, nada de lo que se ha ejecutado debería ser validado, de manera que podamos intentar pasar el fichero entero de nuevo. Tengo esta idea porqué no hace mucho hice este mismo procedimiento en otro proyecto con PostgreSQL sin problema, mi duda es si lo podré hacer con Firebird.Quizá lo que necesite es cambiar de componentes, si es así estaría dispuesto a hacer el cambio. Cualquier ayuda será bienvenida. Gracias. |
|
#3
|
|||
|
|||
|
Hola, ya he encontrado una solución al problema que parece que funciona.
Os pongo aquí el código por si a alguien le puede ser útil. Si encontrais algún error, por favor, comentadlo en este foro para que nos entermos. Por supuesto, también se aceptan comentarios, críticas, mejoras, etc. ![]() Ahí va el código: (Tened en cuenta que se utiliza un FSQL que es del tipo TIBSQL y que la constante cFileExecutorSeparator debe estar definida y usada en el archivo para separar las sentencias [ver ejemplo al final]). FSQL: TIBSQL; //Faltará inicializarla como es debido ![]() const cFileExecutorSeparator = '--##@##'; function ExecuteFromFile(const AFilename: string): boolean; var FileContents: TStrings; fContentsLeft, fContentsToExe: string; iPos: integer; begin { Si el fichero no existe no continuamos } if not FileExists(AFilename) then begin Result := False; exit; end; { Cargar el contenido del fichero } FileContents := TStringList.Create; try FileContents.LoadFromFile(AFilename); fContentsLeft := FileContents.Text; finally FileContents.Free; end; if fContentsLeft='' then Result := True else begin try if not FSQL.Transaction.Active then FSQL.Transaction.StartTransaction; Close; { Vamos ejecutando hasta que no quede nada } while fContentsLeft<>'' do begin iPos := Pos(cFileExecutorSeparator,fContentsLeft); if iPos>0 then begin fContentsToExe := Copy(fContentsLeft,1,iPos-1); fContentsLeft := Copy(fContentsLeft,iPos+Length(cFileExecutorSeparator),Length(fContentsLeft)); end else begin fContentsToExe := fContentsLeft; fContentsLeft := ''; end; fContentsToExe := Trim(fContentsToExe); if fContentsToExe<>'' then begin { Aquí está la ejecución la sentencia } FSQL.SQL.Text := fContentsToExe; FSQL.Prepare; FSQL.ExecQuery; end; end; Result := True; except on E: Exception do begin Result := False; { Tratar la excepción como guste } end; end; end; end; Ejemplo de script: --Creamos una vista DROP VIEW nombre_vista; --##@## --Insertamos alguna fila INSERT INTO tabla(campos) VALUES(valores); --##@## --Si queremos hacer más de un insert, deben ir separados INSERT INTO tabla(campos) VALUES(valores); --##@## --Creamos un dominio CREATE DOMAIN dominio AS tipo; --##@## ALTER PROCEDURE "nombre_procedimiento" ( parámetros ) RETURNS ( retorno ) AS BEGIN --Contenido del procedimiento END --##@## Este script os debería funcionar (poniendo nombres reales, claro). ![]() También comentar que al hacerse todo en la misma transacción, si la función devuelve false deberíamos hacer un Rollback para no validar los cambios. Espero que sea de ayuda a alguien. Hasta pronto! ![]() |
|
#4
|
|||
|
|||
|
Existe entre los componentes IBX uno llamado TIBScript, cuya función es la que buscan, ejecutar un script para crear o modificar una base de datos.
Saludos... |
|
#5
|
|||
|
|||
|
TIBScript
He revisado mi paleta y no existe tal componente. Utilizo Delphi 7. He mirado el código y en el archivo IBXConst.pas indica que la versión de las IBX es la 6.0. ¿Podrías decirme qué versiones utilizas tu? ¿Sabes si existe alguna actualización?
Gracias por tu ayuda. ![]() |
|
#6
|
|||
|
|||
|
Ibx 6.01
He encontrado otro hilo en el foro donde se habla del tema (http://www.clubdelphi.com/foros/showthread.php?t=2069) y donde se da la dirección donde descargar la versión 6.01 de las IBX: http://codecentral.borland.com/Item.aspx?id=17024
En cuanto pueda los bajo y lo pruebo. ![]() |
|
#7
|
|||
|
|||
|
Actualiza tus componentes IBX a la versión 7.08: http://codecentral.borland.com/Item.aspx?id=20257
Tienes que registrarte en la página para poder bajarlos... Saludos... |
|
#8
|
|||
|
|||
|
Ibx 7.08
Muchas gracias. Voy a probarlos en cuanto pueda.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|