Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2007
jlalvarez jlalvarez is offline
Miembro
 
Registrado: jun 2007
Posts: 40
Poder: 0
jlalvarez Va por buen camino
Arrarys en Firebird

Necesitaria dentro de un procedimiento almacenado en el ibexpert utilizar arrays pero no he encontrado como hacerlo. A ver si alguien puede ayudarme, lo que necesito poner exactamente es este codigo Delphi en el ibexpert:
xNumeros[0] := 'cero';
xNumeros[1] := 'uno';
xNumeros[2] := 'dos';
xNumeros[3] := 'tres';

Para despues poder acceder a ese array. GRACIAS.
Responder Con Cita
  #2  
Antiguo 16-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Personalmente no conozco una forma de hacerlo, pero tampoco le veo la necesidad ya que en la base de datos tenemos tablas, nada nos impide traducir un array como el que mencionas en una tabla asi:

Cita:
xNumero
==================
Codigo|Descripcion
0|Cero
1|Uno
2|Dos
3|Tres

Luego recuparmos los datos facilmente por medio de SQL desde el procedimiento almacenado.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 11-08-2008
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Ok, pero si el procedimiento usa varios arreglos y no tengo una tabla para almacenarlos... respondo creando una tabla para este propósito: No hay problema, pero si lo que se busca es hacer una consulta temporal de datos, la pregunta que me surge aquí es: puedo crear una tabla temporal para almacenar estos resultados de tal forma que exista únicamente mientras el procedimiento se ejecuta? Quiero hacer referencia a las famosas tablas temporales. La verdad no las he usado y no sé si se puedan usar para un fin como este.

De todas formas en la documentación de InterBase 6 se habla de arreglos. De hecho una columna en una tabla puede ser un array de un tipo de dato, excepto si ese trata de un BLOB. Los dominios también pueden ser arrays. Sin embargo en la misma documentación dice que no se puede declarar un array usando DECLARE VARIABLE dentro de un procedimiento almacenado:

Cita:
Datatype of the local variable; can be any InterBase datatype except Blob and arrays
Tampoco se aceptan arreglos como parámetros de entrada o de salida.

Habrá cambiado esto en Firebird 2.1? (aún estoy buscando, pero no pareciera).

Por otra parte leí que en Interbase 7 se extiende la API para soportar arrays <- a qué se refiere esto?
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.

Última edición por mlara fecha: 11-08-2008 a las 03:36:51.
Responder Con Cita
  #4  
Antiguo 11-08-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
A partir de FB2.1 puedes declarar variables del tipo de un dominio, entonces... si puedes declarar un dominio del tipo array, podrás utilizarlo en el procedimiento almacenado... pero realmente no se me ocurre como recorrer un arreglo dentro de un SP, tal y como lo hariamos o al menos de una forma parecida a como se hace en Delphi por ejemplo...

En cuanto a las tablas temporales, bueno, a partir de FB2.1 ya puedes declarar dos tipos de tablas temporales, una es de tipo DELETE ROWS que se eliminan los datos inmediatamente terminada la transacción y otra es PRESERVE ROWS donde se eliminan los datos, una vez terminada la conexión.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 11-08-2008
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Queriendo aportar también se aprende bastante no? Hasta ahora no he trabajado con tablas temporales pero se me viene ocurriendo la idea de utilizarlas. Pronto lo sabré. Por ahora me parece interesante lo de DELETE ROWS Y PRESERVE ROWS.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #6  
Antiguo 11-08-2008
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Poder: 18
Gallosuarez Va por buen camino
Arreglos en FB...

Srs:

Hace algún tiempo me interesó el tema y traté de estudiarlo un poco (pero por falta de tiempo lo dejé a un lado). De lo poco que pude sacar en claro, es que los arreglos solo pueden darse de alta dentro de un campo de una tabla (ignoro si recientes versiones de Firebird los incorporen como elementos separados dentro de algún procedimiento almacenado, como creo que es el caso que el forista jlalvarez los quiere utilizar). A continuación pongo un pequeño ejemplo de como se debe de crear una tabla que contenga, a su vez, un campo que sea un arreglo de elementos del mismo tipo (claro está):

Código SQL [-]
 
CREATE ARRAY_TEST (
/* Campo de tipo varchar que contiene un arreglo de 5 elementos: 1..5 */
  varchar_array1 VARCHAR(8) [1:5],
  varchar_array2 VARCHAR(8) [0:5], /* 0..4 */
/* Campo de tipo entero que contiene un arrego de 4 renglones por 5 elementos, es decir, 20 elementos en total */ 
  integer_array1 INTEGER [4, 5],
/* Campo de tipo entero que contiene 6 capas, cada una de 4 renglones de 5 elementos = 120 elementos en total */
  integer_array2 INTEGER [4, 5, 6]
);


Ahora viene la parte difícil (bueno no es difícil, pero tampo es trivial el proceso). Para insertar un registro, hay que construir y poblar el arreglo antes de ejecutar el comando de inserción y se hace a través de la API. Te sugiero que leas lo siguiente documento: InterBase 6 API Guide. Por cierto, también la base de datos de Employee que viene en las instalación completa del Firebird viene un ejemplo de lo que aquí, apretadamente, trato de explicar.

Espero sea de utilidad.

Saludos,

Gerardo Suárez Trejo

P.D. Igual que Jhonny Suárez creo que la solución mas fácil es utilizar tablas .
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
Firebird 1.5.4 funciona en Win Vista pero Firebird 2.0.1 NO !!! Hagen Firebird e Interbase 5 19-05-2007 21:17:54
Firebird 1.5.3 Error:No puede ejecutarse Firebird Guardian xq ya hay una instancia Delphius Firebird e Interbase 5 26-01-2007 10:19:20
alguien ha utilizado Firebird DDX provider? (conectarse con db en firebird!) JuanErasmo .NET 1 04-11-2006 16:17:12
Firebird : Llamado para probadores de Firebird 2.0 JOSEPE Firebird e Interbase 0 12-03-2005 20:33:18
Problemas Firebird Super Server 1.5 con RFunc Firebird v 1.0 Prophoenix Firebird e Interbase 1 09-03-2004 11:40:48


La franja horaria es GMT +2. Ahora son las 03:24:54.


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