Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Firebird 2.0 (que hago) (https://www.clubdelphi.com/foros/showthread.php?t=44412)

Caral 05-06-2007 22:39:42

Firebird 2.0 (que hago)
 
Hola
Quiero probar firebird y no se por donde empezar.
Estas son dudas que tengo con firebird, a ver si me podes actualizar.
1- Tengo firebird 2.0.0.12724.0.win32, supongo que para windows?
2- Supongo que se ejecuta y se instala?
3- He leido que hay que desinstalar interbase, como saber si esta instalado (interbase).? y como desinstalarlo?
4- En mysql hay un programa (MySqlFront) para poder ver, actualizar etc la base de datos, hay algun programa asi para firebird.?
5- En mysql hay una especie de conector, que hace que la base de datos este activa, en firebird se hace asi, como?
6- Cuando se instala, hay alguna diferencia si esta en red o no?
7- He leido en los foros que se usan los componentes ib, bueno en esto no tengo problemas de momento.
Bueno, si me podeis indicar como es este asunto os lo agradezco de antemano.
Saludos

maeyanes 05-06-2007 22:45:45

Hola...

Pues casi todo lo que preguntas lo puedes encontrar haciendo búsquedas en el foro...

Sobre como saber si tienes instalado Interbase, puedes buscar en Panel de Control/Agregar o quitar programas si no encuentras el desintalador para Borland Interbase, no lo tienes instalado...

Para administrar bases de datos de Interbase/Firebird existen varios programas... uno de los más recomendados en estos foros es el IBExpert.

Interbase/Firebird en Windows NT y superior se puede ejecutar tanto como una aplicación o como un servicio...

Espero que con esto haya aclarado alguna de tus dudas...



Saludos...

egostar 05-06-2007 23:15:02

Cita:

Empezado por Caral
3- He leido que hay que desinstalar interbase, como saber si esta instalado (interbase).? y como desinstalarlo?

Bendita ignorancia:

Yo tengo instalado Borland Interbase 7.5 Server [instace = gds_db] y Firebird 2.0 y no tengo ningún problema, colisión, error, etc etc....

Te recomiendo un excelente programa libre que exporta tu base de datos Access a Firebird :D:D:D

Salud OS.

Caral 05-06-2007 23:33:38

Hola
Gracias por vuestras respuestas, ya estoy bajando los programas, se que voy a tener muchas dudas, espero me sigais ayudando.
Esto de las bases de datos me esta matando, ya no entiendo nada.
Saludos

roman 05-06-2007 23:48:25

Una pregunta Caral, siempre he tenido la curiosidad:

Si usas MySQL, ¿por qué mantienes todavía el uso de Access?

// Saludos

Monchi 06-06-2007 00:02:50

Asi es, solo tenes que instalarlo con la opcion de Servidor para correrlo en tu pc, y una vez que termina la instalacion, lo podes usar directamente.
Para manejar la base de datos, yo uso un programa que es freeware muy bueno, el Marathon (http://sourceforge.net/projects/gmarathon)
Suerte con Firebird, no te va a decepcionar.

Caral 06-06-2007 00:36:55

Hola Roman
Uso Access en la empresa, he tratado de migrar hacia donde pueda, tengo mysql pero a la hora de hacer los cambios, me topo con muchos problemas en el sql, tanto he tocado mysql que hasta puedo decir como se instala y des instala mil y una veces.
A firebird no lo conozco y he visto que se puede manejar bien, por eso trato de aprender un poco, quizas me valla mejor con este, no se.
La idea es cambiar a otro motor de base de datos, pero el programita se las trae, ya es demasiado grande y cambiar tantas cosas, ademas de aprender nuevas normas de uso de sql, se me hace muy pesado, para ser honesto, dificil.
Como ves, no uso mysql, solo he tratado con el, somos casi amigos.:D
Access me funciona bien, no tengo ningun problema, el unico inconveniente es la conexion ip, pero no es nada grabe, el tratar de cambiar es mas que nada para mejorar el programa y que cuando crezca mucho no tenga problemas, preveer.
Ese es el problema de hacer muchas consultas con querys, si cambias de motor, no caminan, por lo menos no a mi.
Saludos

Caral 06-06-2007 00:43:15

Hola
Gracias Monchi, ya baje el programa, se ve muy bien.
Gracias.
Saludos

jachguate 06-06-2007 02:38:06

Hola.

¡Caramba Caral!, me alegra que te estes planteando este reto. Te recomiendo ir paso a paso, pues si tu aplicación funciona bien ahora, sigue la regla No. 1 de la ingeniería:

si funciona, ¡no lo toques! :D

Luego, si prevees crecimiento, firebird será un buen aliado, aunque hay otras opciones que podrías considerar, como oracle, que tiene una versión "Express" que es gratuita, y sus limitantes, según recuerdo, son: Usa como máximo 1 Gb. de RAM, La base de datos no puede ser mayor de 5Gb. y corre solamente sobre 1 procesador (un core). La ventaja de oracle es que es un producto mucho mas maduro, y por tanto, tiene mas utilitarios y herramientas para atacarlo. La contraparte, es que al ser cerrado, tarde o temprano vas a rebasar los límites y tendrás que pasar por la caja, cosa nada agradable con ellos :) (lee oracle al reves) :D

De cualquier manera, no entré aqui para desanimarte con firebird, al contrario, si ya lo has elegido, ¡adelante!.. yo lo uso y me siento muy a gusto con él, y no tendré inconveniente en echarte una mano si hace falta para destrabar las carretas.

Como recurso, visita http://www.firebird.com.mx. Según recuerdo, tenían tutoriales y cosas de ayuda cuando estas iniciandote en el tema.

Hasta luego.

;)

vtdeleon 06-06-2007 05:12:46

Cita:

Empezado por Caral
Uso Access en la empresa, he tratado de migrar hacia donde pueda, tengo mysql pero a la hora de hacer los cambios, me topo con muchos problemas en el sql, tanto he tocado mysql que hasta puedo decir como se instala y des instala mil y una veces.

Cuales problemas?

Estoy en los comienzos con MySQL.


Cita:

Empezado por Caral
4- En mysql hay un programa (MySqlFront) para poder ver, actualizar etc la base de datos, hay algun programa asi para firebird.?

IBXpert en su version Personal (Free).
Cita:

Empezado por Caral
5- En mysql hay una especie de conector, que hace que la base de datos este activa, en firebird se hace asi, como?

Eso no lo enteindo bien:confused:
Cita:

Empezado por Caral
6- Cuando se instala, hay alguna diferencia si esta en red o no?

En el panel de control sale el Icono de Firebird. Para la red recuerda abrir el puerto 3050 y que los clientes tengo la dll FBClient.
Cita:

Empezado por Caral
7- He leido en los foros que se usan los componentes ib, bueno en esto no tengo problemas de momento.

Tambien estan los MDOLibs, FIBPlus,...

Saludos

Caral 06-06-2007 05:39:52

Hola
Gracias jachguate por tus palabras de aliento, ya se que cuento contigo, Maestro.
Gracias vtdeleon,
1-En cuanto a los problemas, por ejemplo, nada mas empezar, el loguin trabaja por parametros, estos son leidos facilmente por access, mysql, no los reconoce, en el from principal, cuando empieza la aplicacion esta lee de una sola vez 5 tablas para un grid y otras para el segundo, bueno, simplemente mysql se queda colgado pensando, esto con ado, con zeos mejora pero siempre se hace lento.
2-Gracias ya baje IBXpert, ya lo probare.
3-En mysql hay un exe que hace que este se conecte o desconecte, esta en la misma carpeta de mysql, ya hice una pequeña prueba con firebird y aparentemente se coneta, bueno abra que seguir en esto.
4-Esto del panel de control no lo sabia, ya lo vi y me aparece que esta corriendo, en cuanto a abrir el puerto supongo que este sera en el firewall, poniendo el nombre de firebird y dandole el puerto 3050.
5-Con respecto a los componentes me parece que lo hare con zeos, no se, se me hacen faciles de manejar.
Pregunta:
Donde esta la dll FBclient ? y en que parte del cliente la instalo ?.
Muchas gracias por vuestras respuestas, me ayudais mucho, maestros.
Saludos

vtdeleon 06-06-2007 05:56:49

Cita:

Empezado por caral
-Con respecto a los componentes me parece que lo hare con zeos, no se, se me hacen faciles de manejar.

Tengo entendido que Zeos es mas para MySql que para Firebird. Por eso trato de usar los componentes mas amigables a una base de datos X.
Cita:

Empezado por Caral
Donde esta la dll FBclient ? y en que parte del cliente la instalo ?.

En el Servidor suelen estar en la carpeta de isntalacion, no se porque no se ponen en el System32. Buscalo con el buscador de windows "FBClient.dll".

En el cliente debes colorarlos en el System32 o en la carpeta donde se ejecuta tu aplicacion.

Caral 06-06-2007 06:00:46

Hola
Zeos sirve para mysql, ado, interbase, firebird y creo que otros, esta bastante bien, pruebalo, es interesante.
Gracias, por el dato, se me olvidaba el buscador.:D
Saludos

vtdeleon 06-06-2007 06:09:43

Pues la verdad es que ultimamente he estado utilizando Zeos y MyDac mientras estoy estudiando MySql con Delphi, mas otras cosas...

Saludos

Delphius 06-06-2007 16:00:06

Caral, veo que estas expandiendo tus conocimientos, experiencia y estas con ganas de dedicarle a Firebird. Me parece fabuloso.

Quiero agregar que como la versión gratuita de IBExpert no cuenta con el modelo relacional (DER) y algunas veces a uno le hace falta tener una vista rápida de como están relacionadas las tablas... puedes valerte de otro utilitario para diseñado para esto: IBUtils.

A mi me recomendaron, lo empecé a usar... y me sirve mucho.

Saludos,
PD: ¡Exitos con Firebird!

Caral 06-06-2007 21:21:08

Hola
Gracias por ayudarme.
Ya hice una base de datos, la cree sin problemas y la pude ver desde IBexpert.
Conecte el odbc a la base de datos creada y pase varias tablas para ver, esto lo hizo sin problemas con el datapump de delphi.
Tengo dudas, aqui van:
A la hora de crear la base de datos hay una opción que se llama Charset, en esta hay un monton de opciones, en el ejemplo que vi ponen win1252 y asi lo hice yo.
Ahora mi duda:
Para que es esto?
Tiene que ver con el codigo sql?
Lo indico porque a la hora de pasar varias tablas el campo tipo boleano en access lo convierte en varchar, es mas o menos similar a lo que pasaba con mysql.
Hay algun campo boleano en firebird ?, cual es?
Creo que de momento voy bien, por lo menos ya arranque.
Otra cosa, pude conectarme desde delphi con zeos, no lo pude hacer por odbc con ado, me indica casualmente este asunto, que se cambiaron los datos o algo asi, por que sera?
No me pude conectar con IB, me dice que me hace falta una transaccion, no se que sera.?, estos componentes no los conozco.
Gracias por seguir ayudandome.
Nota: estoy contento, ya estoy en firebird.:D
Saludos

maeyanes 06-06-2007 21:35:04

El Charset es el conjunto de caracteres que va a usar tu base de datos...

Mayormente para español se usa ISO8859_1 (al menos es el que yo uso)...

El Charset también te sirve para poder especificar el tipo de ordenamiento de una columna, por ejemplo:

Código SQL [-]
CREATE TABLE PERSONA (
  ID INTEGER NOT NULL;
  NOMBRE VARCHAR(50) NOT NULL CHARSET ISO8859_1 COLLATE ES_ES
);

ALTER TABLE PERSONA ADD PRIMARY KEY (ID);

Firebir 2.x si tiene el tipo BOOLEAN para las columnas.

Para conectarte con las IBX necesitas poner un TIBDatabase y un TIBTransaction en la forma y establecer la propiedad DefaultTransaction del TIBDatabase para que use el TIBTransaction y el TIBTransaction en su propiedad Database que apunte al TIBDatabase. (Espero haberme explicado :D)



Saludos...

jachguate 06-06-2007 21:40:27

Cita:

Empezado por Caral
A la hora de crear la base de datos hay una opción que se llama Charset, en esta hay un monton de opciones, en el ejemplo que vi ponen win1252 y asi lo hice yo.

Esto es el conjunto de caracteres que usará por defecto tu base de datos, y tiene efecto en los caracteres que acepta y la forma que los ordena en los indices y cuando incluís la clausula Order by en un select (el orden podes especificarlo mas aún con un COLLATE en la sentencia create, alter table o incluso en el propio select).

En nuestro caso (español) el mas recomendable, según mi opinion, es el charset ISO_8859_1, y COLLATION ES_ES. Incluso en Firebird 2 podes usar COLLATION ES_ES_CI_AI, que no es sensible a mayúsculas/minúsculas ni acentos.

Hay mas información en Firebird Character Sets

Cita:

Empezado por Caral
Hay algun campo boleano en firebird ?, cual es?

No hay. Hay quienes usan un VarChar(1) con 'S'/'N', o 'Y'/'N'. Hay otros (como yo) que usan un smallint con 0/1 (al estilo de c)

Cita:

Empezado por Caral
No me pude conectar con IB, me dice que me hace falta una transaccion, no se que sera.?, estos componentes no los conozco.

Está en la paleta... se llama IBTransaction. Una vez en la forma/dm, lo enlazas en la propiedad DefaultTransaction de tu IBDatabase y en la propiedad Transaction de cada Tabla/Query/DataSet/SQL.

El paso a estos componentes, desde BDE/ADO no es fácil, pues todo está mas "crudo". Pero también están los IBObjects, que se parecen mas...

Hasta luego.

jachguate 06-06-2007 21:42:04

Cita:

Empezado por maeyanes
El Charset es el conjunto de caracteres que va a usar tu base de datos...

jaja... ya ves que ayuda no te falta!!
¿soy tan lento?
:D

vtdeleon 06-06-2007 21:43:26

Cita:

=maeyanes
Firebir 2.x si tiene el tipo BOOLEAN para las columnas.
Seguro?:eek:, porque he tratado de hacerlo y nada nadita. De la unica manera que he podido hacer un campo de este tipo es mediante un Domain.

Caral 06-06-2007 21:50:49

Hola
Gracias por las respuestas, efectivamente el campo boolean no lo encuentro por ningun lado:

Cuando hago el tralado de las tablas, me lo convierte en varchar, automaticamente, y lo pone T o F, segun el caso.
Pregunta:
El tipo blob, es memo?
Esta muy bonito, si el campo es numerico sale una calculadora y todo.:D
Saludos

maeyanes 06-06-2007 21:52:12

Cita:

Empezado por vtdeleon
Seguro?:eek:, porque he tratado de hacerlo y nada nadita. De la unica manera que he podido hacer un campo de este tipo es mediante un Domain.

Fue un error mio... y esto se debe a que Interbase 7.x si tiene el tipo de datos BOOLEAN.

Acabo de verificar y si, Firebird NO cuenta con el tipo de datos BOOLEAN, así que como bien comenta jachguate, se puede usar mediante CHAR(1) o SMALLINT...

O como bien mencionas tu, con un dominio:

Código SQL [-]
CREATE DOMAIN TBOOLEAN AS
  SMALLINT
  DEFAULT 1
  NOT NULL
  CHECK (VALUE IN (0, 1));


Saludos...

Delphius 06-06-2007 21:53:07

Caral, algo, no mucho, de esas cosas te puedo ir respondiendo:

1. Tengo entendido que el CHARSET es el conjunto de caracteres permitidos a usar en la base de datos. Yo lo tengo con el ISO8859_1
Dependiendo del CharSet algunos caracteres pueden que se vean y/o almacenen y otros no...

A decir verdad, me está llamando la atención esto que pones:
Cita:

Empezado por Caral
vi ponen win1252 y asi lo hice yo.

Reconozco que no se mucho de la diferencia entre unos y otros. De que los hay los hay.... Tengo que hacer mejor mi tarea:p:D:(:o

2. No tiene campo booleano, al menos yo no le encuentro:p. Hay que ingeniarselas. Por ejemplo usar un campo VARCHAR para que almacene 'SI', 'NO' o un integer (0 para no, 1 para si).

ADo no utilizo. Ni tampoco los Zeos.
Yo empleo los componentes IBX (los de la paleta Interbase) y me funcionan.
Lo que dices sobre transacción es que para conectarse a la base de datos (empleando IBX) necesitas de:
* IBDataBase
* IBTransaction

Fijate que el componente IBDataBase tiene una propiedad DefaultTransaction. A dicha propiedad le asignas el IBTransaction. En DBTransaccion defines que acciones por defecto debe tomar ante una transacción. Por lo general con TACommit ya anda. Los componentes IBX son símiles a otros, no creo que tengas problemas...

Espero que sigas avanzando.
Saludos,

EDITO:
Al pulsar el botón enviar, me he dado con la sorpresa de que ya te habían respondido... y de paso me aclararon mi duda. No me hagas caso... que ya te dieron mejores respuestas más acabadas y certeras los maestros...
¡Gracias!

Caral 06-06-2007 22:06:32

Hola
Voy rapido, creo.:D
Ya me conecte con ado, con ib y con zeos, la mas rapida es zeos .
Pregunta:
Si en un campo integer o float, la tabla queda en null, afecta en algo?
Hay alguna manera de generar una consulta sql, dentro de IBexpert ?
Si hay forma, se pueden ligar tablas en la consulta, como?
Gracias, voy como bala, con vosotros.:)
Saludos

maeyanes 06-06-2007 22:15:16

Cita:

Empezado por Caral
Hola
Pregunta:
Si en un campo integer o float, la tabla queda en null, afecta en algo?

Siempre y cuando la columna no haya sido declarada como NOT NULL, no pasa nada...

Cita:

Hay alguna manera de generar una consulta sql, dentro de IBexpert ?
Busca el SQL Editor, desde esa ventana puedes escribir consultas SQL y ejecutarlas...

Cita:

Si hay forma, se pueden ligar tablas en la consulta, como?
Gracias, voy como bala, con vosotros.:)
Saludos
Si se pueden ligar tablas en una consulta... usando el JOIN:

Código SQL [-]
select a.campo1, a.campo2, b.campo1, b.campo2
from tabla1 a
join tabla2 b on a.campo1 = b.campo1


Saludos...

Delphius 06-06-2007 22:19:33

Para Lanzar la cosulta desde IBExpert puedes hacerlo con el Editor de SQL.
Te vas a Herramientas, Editor SQL escribes la consulta y das sobre "RUN".

Sinceramente esta parte no entiendo:
Cita:

Empezado por Caral
Si hay forma, se pueden ligar tablas en la consulta, como?

Creo que te refieres a algo como:
Código SQL [-]
select ...
where Tabla1.CampoID = Tabla2.CampoID

Si es eso, no hay problema.

Desde Delphi si hay que tener recaudos con los tipos NULL cuando se dispara una consulta. He visto un post que puso el maestro Lepe en donde explicaba bien esta situación... pero no me acuerdo de donde era... Yo también ando con problemas con el NULL.

Saludos,

EDITO: Lo econtré: http://www.clubdelphi.com/foros/show...=NULL+Firebird

Caral 06-06-2007 22:45:27

Hola
Sois mas rapidos que yo.
Ya lo hice, y funciona perfecto, con ligar tablas me referia a ver varias tablas en una consulta tipica de sql, si lo hace y perfecto.
Código SQL [-]
select * from articulos, articulomaterial where descripcion = 'ALCALA'
Una consulta de dos tablas, sencilla.
Esta consulta en especial trae 11855 registros y lo hizo muy rapido.
He notado, que las consultas son mas rapidas que en mysql, curioso.:rolleyes:
Bueno aqui sigo experimentando un poco, algun dia manejo estas cosas, por supuesto con vuestra ayuda.:)
Saludos

xander 06-06-2007 22:57:17

Cita:

Empezado por Caral
Esta consulta en especial trae 11855 registros y lo hizo muy rapido.

Si un producto natural te parece rápido, espera a que le entiendas mejor a como funcionan los "Planes de ejecución" y entonces si todo lo que hagas va a ser un tiro :D

Tambien vas a sacar mucho provecho de los procedimientos almacenados, son una chulada, yo tenía una consulta que por si sola por más que traté de optimizarla se tardaba por lo menos 5 segundos en resolverse (varias tablas y muchas relaciones entre ellas)... al final me dije: "Y porque mejor en vez de usar una consulta compleja mejor no hago un procedimiento almacenado que haga lo mismo pero por partes?"... y el procedimiento me devuelve los mismos resultados en 20 milisegundos :D

Caral 06-06-2007 23:03:11

Hola Xander
Y crees que aprenda a hacer un procedimiento almacenado.?, no se ni que es.
Por donde empiezo, donde hago este procedimiento, en delphi, en firbird en ibexpert, estas ya son palabras mayores.
Me gustaria aprender, donde busco informacion?
Saludos

xander 06-06-2007 23:10:40

En el IBExpert te pones sobre el arbolito en le nodo de "Procedures" ahi das boton derecho y "New Procedure" y te crea el esqueleto para hacer un procedimiento nuevo...

Revisa los capitulos de SQL e Interbase de la cara oculta de marteens, ahi te explica con muy buenos ejemplos como usar Procedimientos almacenados y Triggers... definitivamente es el mejor libro que puedes leer al respecto.

xander 06-06-2007 23:15:08

En general un Procedimiento almacenado se ve, como algo como esto:

Código SQL [-]
CREATE PROCEDURE CERTIFICADODEUNIDAD (
    UNIDAD INTEGER,
    MES INTEGER,
    ANHO INTEGER)
RETURNS (
    INDRAIZ INTEGER,
    INDICADOR VARCHAR(200),
    RESULTADO VARCHAR(1000),
    LEYENDA VARCHAR(200),
    META VARCHAR(100),
    DIMENSION VARCHAR(200))
AS
DECLARE VARIABLE INDID INTEGER;
DECLARE VARIABLE VMES VARCHAR(15);
DECLARE VARIABLE VMUESTRA INTEGER;
DECLARE VARIABLE VTIPO INTEGER;
DECLARE VARIABLE VFILTRO VARCHAR(200);
DECLARE VARIABLE VLEYENDA VARCHAR(200);
BEGIN
   FOR SELECT IND_ID, IND_NOMBRE, DIM_NOMBRE, IND_TEXTOTITULO
    FROM EST_INIDICADOR
    LEFT JOIN EST_DIMENSION ON (IND_DIMENSION = DIM_ID)
    LEFT JOIN EST_SECUENCIA ON (SEC_INDICADOR = IND_ID)
    WHERE SEC_ANTECESOR = 0
    ORDER BY DIM_NOMBRE, SEC_ORDEN ASC
    INTO :INDRAIZ, :INDICADOR, :DIMENSION, :LEYENDA DO
    BEGIN
      /*CALCULAMOS PARA EL INDICADOR RAIZ */
      SELECT FIRST 1 MET_VALOR FROM EST_METAS
      WHERE MET_INDICADOR = :INDRAIZ
      ORDER BY MET_FECHAALTA DESC
      INTO :META;
      VFILTRO = 'AND (ENC_UNIDADMEDICA = ' || CAST( UNIDAD AS VARCHAR (10)) ||')';
      EXECUTE PROCEDURE GRAFICA(:INDICADOR, :MES, :ANHO, VFILTRO ,0, 0)
      RETURNING_VALUES :VMES, :RESULTADO, :VMUESTRA, :VTIPO;
      SUSPEND;

      FOR SELECT IND_ID, IND_NOMBRE
       FROM EST_INIDICADOR
       LEFT JOIN EST_SECUENCIA ON (SEC_INDICADOR = IND_ID)
       WHERE SEC_ANTECESOR = :INDRAIZ
       ORDER BY SEC_ORDEN ASC
       INTO :INDID, :INDICADOR DO
       BEGIN
         /*Y CALCULAMOS PARA LOS SUB-INDICADORES */
         SELECT FIRST 1 MET_VALOR FROM EST_METAS
         WHERE MET_INDICADOR = :INDID
         ORDER BY MET_FECHAALTA DESC
         INTO :META;
         VFILTRO ='AND (ENC_UNIDADMEDICA = ' || CAST( UNIDAD AS VARCHAR (10)) ||')';
         EXECUTE PROCEDURE GRAFICA(:INDICADOR, :MES, :ANHO, VFILTRO ,0, 0)
         RETURNING_VALUES :VMES, :RESULTADO, :VMUESTRA, :VTIPO;
         INDICADOR =  '             '|| :INDICADOR;
         SUSPEND;
       END
    END
END^

Es como un pequeño programa que ejecuta sentencias SQL... la ventaja es que se ejecuta dentro de la base de datos así que los datos no viajan del servidor al cliente para efectuarles el tratamiento... sino que se tratan en el servidor y se envía solo los resultados (en el caso que se tengan que devolver resultados).

Caral 06-06-2007 23:16:38

Gracias Xander, lo voy a revisar.
Saludos

Casimiro Notevi 07-06-2007 00:29:53

El enlace a 'La Cara Oculta de Delphi' no funciona porque parece que a Ian se le ha caducado el dominio y no se ha dado cuenta. Como es un libro gratuito no creo que ponga ningún impedimento si lo ponemos para descargar en clubdelphi.
Si algún moderador da permiso, lo podemos poner.

vtdeleon 07-06-2007 04:20:16

Para curarnos en salud, le he enviado un correo a Ian sobre su dominio.

Saludos

Caral 07-06-2007 21:27:22

Hola
Empiezo con el programa, y muchos problemas de sql.
Para empezar, estoy conectado con los componentes ADO por odbc.
Consulta 1:
Código SQL [-]
 QTemp.SQL.Text := 'Select CodUsuario From Usuarios WHERE Graficar = True';
Graficar es un campo boolean, por eso esta el true, la base de datos firebird lo cambia por un campo varchar y lo cambia a T.
Pregunta:
Como hago esta sentencia en delphi con ese tipo de campo (varchar).

Consulta 2:
Código SQL [-]
SELECT OrdenProd.CodOrden, Clientes.NombreCliente, OrdenProd.FechaInicio, OrdenProd.FechaRequerido, OrdenProd.FechaFinal, OrdenProd.OrdenCompra, OrdenProd.CodUsuario, OrdenProd.Prioridad,
IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]) AS Estacion, OrdenProd.CodCliente, OrdenProd.Enrutada, OrdenProd.Comentarios
FROM (Clientes RIGHT JOIN OrdenProd ON Clientes.CodCliente = OrdenProd.CodCliente) LEFT JOIN (OrdenProdItem LEFT JOIN Estaciones ON OrdenProdItem.Estacion = Estaciones.EstacionID) ON OrdenProd.CodOrden = OrdenProdItem.CodOrden
GROUP BY OrdenProd.CodOrden, Clientes.NombreCliente, OrdenProd.FechaInicio, OrdenProd.FechaRequerido, OrdenProd.FechaFinal, OrdenProd.OrdenCompra, OrdenProd.CodUsuario, OrdenProd.Prioridad,
 IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]), OrdenProd.CodCliente, OrdenProd.Enrutada, OrdenProd.Comentarios
ORDER BY OrdenProd.CodOrden DESC;
Bueno aqui se complica mas la cosa.
1-Firebird no hacepta ( [] corchetes )., se cambian a no se necesitan?
2-Firebird no acepta ( IIF Is Null ), Con que se cambian ?

Consulta 3:
Código Delphi [-]
AQItems.SQL.Text:=
       'SELECT OrdenProdItem.CodOrdenItem AS Línea, OrdenProdItem.CodParte AS Código, '+
       'Articulos.Descripcion AS Descripción, Articulos.Categoria AS Categoría, Articulos.SubCategoria AS [Sub Categoría], OrdenProdItem.NumSerie AS [# Pieza],
      IIf([EnProceso],"SI","NO") AS [En Proceso?] '+
       'FROM OrdenProdItem, Articulos, Estaciones '+
       'WHERE (((OrdenProdItem.CodOrden)=[COD]) AND ((OrdenProdItem.CodParte)=[Articulos].[CodParte]) AND ((Estaciones.Descripcion)=[EST]) AND ((OrdenProdItem.Estacion)=[Estaciones].[EstacionID])) '+
       'ORDER BY OrdenProdItem.CodOrdenItem; ';
Aqui el problema es casi el mismo:
1- Firebird no acepta ( IIF Is Null ).
2- Tanto COD como EST, son parametros que estan incluidos en parameters del query, firebird no los reconoce.
Bueno tengo mas, pero con esto ya me medio guio y tengo para un rato.
Nota: en ibexpert he hecho ya las consultas, pero o no me salen los datos del todo o me da muchos errores.
Me ayudais por favor.
Saludos

fjcg02 07-06-2007 23:52:31

Bueno, no soy un experto en Firebird pero a ver si puedo dar respuesta a tus peguntas. Seguro que algún maestro como los llamas tú me corrige, pero me arriesgo.
Cita:

Empezado por Caral
Consulta 1:
Código SQL [-]
 QTemp.SQL.Text := 'Select CodUsuario From Usuarios WHERE Graficar = True';
Graficar es un campo boolean, por eso esta el true, la base de datos firebird lo cambia por un campo varchar y lo cambia a T.
Pregunta:
Como hago esta sentencia en delphi con ese tipo de campo (varchar).

Al ser varchar, se trata igual que un campo caracter, es decir
Código SQL [-]
 QTemp.SQL.Text := 'Select CodUsuario From Usuarios WHERE Graficar =' + QuotedStr('T');
Lo unico es que por lo que conozco, para un campo de un solo caracter no es lo más aconsejable el tipo varchar, ya que varchar optimiza el tamaño que ocupa ese campo en disco. En este caso, poco va a optimizar.
Cita:

Empezado por Caral
Consulta 2:
Código SQL [-]
SELECT OrdenProd.CodOrden, Clientes.NombreCliente, OrdenProd.FechaInicio, OrdenProd.FechaRequerido, OrdenProd.FechaFinal, OrdenProd.OrdenCompra, OrdenProd.CodUsuario, OrdenProd.Prioridad,
IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]) AS Estacion, OrdenProd.CodCliente, OrdenProd.Enrutada, OrdenProd.Comentarios
FROM (Clientes RIGHT JOIN OrdenProd ON Clientes.CodCliente = OrdenProd.CodCliente) LEFT JOIN (OrdenProdItem LEFT JOIN Estaciones ON OrdenProdItem.Estacion = Estaciones.EstacionID) ON OrdenProd.CodOrden = OrdenProdItem.CodOrden
GROUP BY OrdenProd.CodOrden, Clientes.NombreCliente, OrdenProd.FechaInicio, OrdenProd.FechaRequerido, OrdenProd.FechaFinal, OrdenProd.OrdenCompra, OrdenProd.CodUsuario, OrdenProd.Prioridad,
 IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]), OrdenProd.CodCliente, OrdenProd.Enrutada, OrdenProd.Comentarios
ORDER BY OrdenProd.CodOrden DESC;
Bueno aqui se complica mas la cosa.
1-Firebird no hacepta ( [] corchetes )., se cambian a no se necesitan?
2-Firebird no acepta ( IIF Is Null ), Con que se cambian ?

Creo que efectivamente no acepta corchetes. Creo aunque no estoy seguro que puede ser el caracter " ó ' cuando hay campos con espacios en el nombre. Si no hay espacios, simplemente se quitan.
Firebir acepta iif como atajo para la estructura ( sacado del manual )
Código SQL [-]
CASE
   WHEN condicion THEN valorverdadero ELSE valor falso
END
En tu caso te quedaría 
iif(Descripcion=NULL,'Creación de Orden',Descripcion)
Cita:

Empezado por Caral
Consulta 3:
Código Delphi [-]
AQItems.SQL.Text:=
       'SELECT OrdenProdItem.CodOrdenItem AS Línea, OrdenProdItem.CodParte AS Código, '+
       'Articulos.Descripcion AS Descripción, Articulos.Categoria AS Categoría, Articulos.SubCategoria AS [Sub Categoría], OrdenProdItem.NumSerie AS [# Pieza],
      IIf([EnProceso],"SI","NO") AS [En Proceso?] '+
       'FROM OrdenProdItem, Articulos, Estaciones '+
       'WHERE (((OrdenProdItem.CodOrden)=[COD]) AND ((OrdenProdItem.CodParte)=[Articulos].[CodParte]) AND ((Estaciones.Descripcion)=[EST]) AND ((OrdenProdItem.Estacion)=[Estaciones].[EstacionID])) '+
       'ORDER BY OrdenProdItem.CodOrdenItem; ';
Aqui el problema es casi el mismo:
1- Firebird no acepta ( IIF Is Null ).
2- Tanto COD como EST, son parametros que estan incluidos en parameters del query, firebird no los reconoce.
Bueno tengo mas, pero con esto ya me medio guio y tengo para un rato.
Nota: en ibexpert he hecho ya las consultas, pero o no me salen los datos del todo o me da muchos errores.
Me ayudais por favor.
Saludos

En esta tercera, la primera está contestada anteriormente, y la segunda, imagino que tendrás que cambiar la consulta para poner parámetros, que por lo que te he leido, hasta contestas como un maestro al respecto ;)

Espero que te sirva de ayuda el rollo patatero que te he metido.

Saludos

Caral 08-06-2007 01:36:04

Hola
La primera ya la solucione:
Código Delphi [-]
QTemp.SQL.Text := 'Select CodUsuario From Usuarios WHERE Graficar = ''T''';
Me costo pero lo hice, despues de mil intentos.:D
A la segunda no le llego, lo estoy intentando directamente desde IBExpert, y no lo consigo, esta parte es la que importa:
Código SQL [-]
IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]) AS Estacion
Lo he intentado asi:
Código SQL [-]
 if (Estaciones.descripcion = ' ') then 'Creación de Orden'
Y asi:
Código SQL [-]
Case when Estaciones.descripcion = ' ' then 'Creación de Orden'
No me caminan, con esto ' ' , estoy pensando en un valor nulo, no se si me equivoco.
Saludos

xander 08-06-2007 03:02:37

Cita:

Empezado por Caral
A la segunda no le llego, lo estoy intentando directamente desde IBExpert, y no lo consigo, esta parte es la que importa:
Código SQL [-]
IIf([Descripcion] Is Null,"Creación de Orden",[Descripcion]) AS Estacion
Lo he intentado asi:
Código SQL [-]
 if (Estaciones.descripcion = ' ') then 'Creación de Orden'
Y asi:
Código SQL [-]
Case when Estaciones.descripcion = ' ' then 'Creación de Orden'
No me caminan, con esto ' ' , estoy pensando en un valor nulo, no se si me equivoco.
Saludos

Sería algo como esto en tu caso:
Código SQL [-]
  Case when (Estaciones.descripcion is null) 
    then 'Creación de Orden'
    ELSE Estaciones.descripcion 
  END

aunque tambien lo resolverías elegantemente usando:
Código SQL [-]
  COALESCE(Estaciones.descripcion, 'Creación de Orden')

Coalesce devuelve el primer valor no nulo de la lista de parámetros que le pases... ;)

brakaman 08-06-2007 22:51:44

Pues yo estoy usando Firebird 2.0 y el campo booleano no lo veo por ningun sitio. Cosa que no entiendo la verdad.

Pero los expertos supongo que sabran el motivo.:cool:

maeyanes 08-06-2007 23:15:08

Ya aclaré más arriba que fue un error mío el pensar que existía el tipo de datos BOOLEAN en Firebird 2.0...

Aquí te lo pongo de nuevo...

Cita:

Empezado por maeyanes
Fue un error mio... y esto se debe a que Interbase 7.x si tiene el tipo de datos BOOLEAN.

Acabo de verificar y si, Firebird NO cuenta con el tipo de datos BOOLEAN


Saludos...


La franja horaria es GMT +2. Ahora son las 12:30:41.

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