FireBird + Delphi 7
Hola, me estoy planteando cambiar de base de datos
y queria saber que os parece FireBird ¿da problemas?, ¿es rapida?, ¿se corrompe?, ¿tiene alguna limitación? Además me gustaría que alguien desde la experiencia me recomendara algún componente para usar fireBird desde delphi7 lo más completo posible con dabaBases para usar los tipicos append, edit, post, findkey, setrange, etc.. y no tener que usar sentencias SQL siempre Gracias y saludos |
Hola,
Por aquí me recomendaron el Firebird (imagino que Casimiro Noteví, es un gran fan del Firebird! ;)), y la verdad es que estoy bastante contento con ella. Es un buen gestor de bases de datos, tiene la versión embedded (que además funciona como la versión normal), es rápida, y por el momento no da problemas. Pero claro, siempre hay inconvenientes: no tiene campos autonuméricos (se usa un generador más un trigger, y todo arreglado), no tiene campos booleanos (se pueden definir, y algunos componentes los entienden), y la documentación deja un poco que desear (pero yo soy muy exigente en el tema documentación!). Sobre componentes de acceso a datos... Yo te recomiendo los IBDAC (al final voy a pedir comisión a los creadores, siempre los recomiendo :P). Son como el BDE, pero con Firebird/Interbase y con código moderno. Seguirás usando las TTable, pero ahora se llamarán TIBCTable, los TQuery->TIBCQuery, etc. Y se usa sin problema las funciones edit, post, append, findkey, locate, filterby, etc... A mi me gustan mucho, y sólo uso el SQL para updates grandes o para las querys. Además, lleva una utilidad para migrar de BDE a IBDAC, que a veces tambien sirve. Pero yo he usado los componentes estos tanto para migrar aplicaciones BDE a Firebird, como para empezar aplicaciones de 0. Saludos, Marc |
http://www.devart.com/ibdac/
http://www.devart.com/dbx/interbase/ El componente que me recomiendas es el primero o el segundo? |
El primero es el que uso.
El segundo es un driver para acceder a Interbase/Firebird a traves de dbExpress. O sea que yo te recomiendo el primero, porque el segundo no lo conozco... |
Cita:
Es rápida: mucho Se corrompe: nada Limitación: No sabe cocinar :) Es una muy buena elección, sin duda, aunque deberías de indicar para qué la vas a usar, en qué entorno, red local, monousuario, servidor web, mil usuarios conectados, etc. en fin, cuéntanos algo más. No sirve de nada ponerse a elegir unos componentes si no sabes qué uso vas a darle después. p.d.: y por cierto, usa SQL, en caso contrario no estarás sacándole ningún partido, para eso usa access o paradox. |
Cita:
Otra cosa es usar el SELECT. Esto es diferente, ya que el usar directamente SQL te da mucha más potencia... Pero para operaciones simples como son añadir o modificar una tabla, el SQL (en mi opinion y gusto) no es necesario. |
Anteriormente usaba paradox pero las tablas se estropeanban... a veces con el uso o por que el cliente apagaba mal el equipo, luego cambie a pervasive que es mas robusta pero consume bastantes recursos y para aplicaciones que tengan que estar en red local con tablas con miles o millones de registros es lentisima
¿La habeís probado con una base de datos en red con más de 5 puestos atacandole simultaneamente? ¿Como se comporta con tablas con miles de registros? ¿busca y filtra rapido por cualquier campo? El uso que le quiero dar es para todos los casos, pues si funciona bien migraria todas las aplicaciones (con el tiempo) a esta base de datos, y unas aplicaciones son de almacenamiento masivo de datos, otras prima la velocidad, otras la respuesta en red a los terminales conectados Saludos |
Cita:
|
Hola
Cita:
Si no usas insert por comodidad, como dices usar Select por potencia?. Cuando usas una tabla estas usando un Select *. Saludos |
Cita:
|
Cita:
Por esto mismo he dicho lo de actualizar UN registro. Si tienes el registro 25 abierto en un form, encuentro más fácil hacer un Código:
tabla1.edit(); Código:
query1.sql.clean(); Saludos, Marc |
Os desviais del tema completamente
Algunos estais mezclando mis post con los de otro usuario... Retomemos el tema de firebird y delphi 7 Los puntos son: ¿cual es el mejor componente para usar firebird desde delphi7? que permita usar las caracteristicas que usan la Ttables con paradox, para que la migracion de los programas no sea traumatica Y segundo punto, es firebird una base de datos fiable, rapida y estable saludos |
Posteo esta información que he puesto antes y creo que a sido pasada por alto:
Anteriormente usaba paradox pero las tablas se estropeanban... a veces con el uso o por que el cliente apagaba mal el equipo, luego cambie a pervasive que es mas robusta pero consume bastantes recursos y para aplicaciones que tengan que estar en red local con tablas con miles o millones de registros es lentisima ¿La habeís probado con una base de datos en red con más de 5 puestos atacandole simultaneamente? ¿Como se comporta con tablas con miles de registros? ¿busca y filtra rapido por cualquier campo? El uso que le quiero dar es para todos los casos, pues si funciona bien migraria todas las aplicaciones (con el tiempo) a esta base de datos, y unas aplicaciones son de almacenamiento masivo de datos, otras prima la velocidad, otras la respuesta en red a los terminales conectados Saludos |
Hola
Cita:
Osea, llamaste a todos los registros de la tabla para insertar, actualizar o lo que sea de un solo campo. Si la tabla contiene pocos registros esta bien, pero si contiene muchos se hara muy lento. Intenta hacer una consulta con un table a una tabla con muchos registros via internet, puedes ir a tomarte un cafe mientras te envia el dato.:) Cita:
Nota: es query1.ExecSQL; Cita:
Si se hacen las cosas bien, se hacen una vez. El dia que crezca la tabla el cliente te llamara para decirte que el programa esta muy lento y tendras que recurrir al sql, te guste o no, sea mas facil o no. Saludos PD: No pretendo contradecirte, es solo mi opinion. |
valla tela! :mad:
si quereis discutir que es mejor si las SQLs o los dataBases abrir otro tema, por favor |
Hola
Es el mismo tema ya que dependiendo de los componentes se pueden hacer cosas de cosas. A tu Pregunta CONCRETA: IB, Paleta Interbase. Simple, transparente, eficiente, facil. etc. etc....... Ahora tambien esta Zeos (cuestion de gustos) Saludos |
¿Con la paleta interBase de Delphi 7 puedo conectar con firebird? ¿como?
|
Hola
Valla tela :mad:, ahora te apetece cambiar de tema.....:D:p Este tutorial te ayudara en lo que buscas. Presiona aqui, con paciencia.:D Saludos |
OK gracias, perdona por lo de antes pero parecia que ibais a enzarzaros en un discusion de gustos personales...
¿La habeís probado con más de 5 pcs atacandole simultaneamente a traves una red local? ¿Como se comporta con tablas con miles de registros? ¿busca y filtra rapido por cualquier campo? |
Hola
No puedo hablar por los demas. En mi caso: Tengo 7 ordenadores conectados a la BD simultaneamente sin problemas. Eso si, Tratamos de no atacarla.........:D Saludos PD: Firebird se comporta muy bien, no le tengas miedo, duro con ella... |
Para el amigo mcs, tienes razón es más sencillo, intuitivo y legible atacar las tablas tal como tu lo mencionas, al final cuando haces por ejemplo:
El componente que usas en realidad convierte todo eso en un insert (aunque tú no lo veas), lo mismo sucede cuando haces tabla.edit; el componente hará un "update table". En ambos casos no hay ninguna ventaja apreciable en velocidad haciéndolo mediante la forma que mencionas o la que dice caral. Eso sí, hay que cuidarse de nunca de los nuncas hacer un "select * from tabla" sin ponernle un filtro para editar un solo registro pues entonce sí que tendras problemas de lentitud, pues te traeras todo de un jalón. La gran ventaja de hacerlo como dices es que no tienes que revolver SQL directamente con tu código, lo que lo hace más legible. Yo utilizo ese esquema para hacer CRUD (que es lo que más ocupa uno en entornos administrativos) y me ha funcionado sin ningún problema. También uso el esquema de caral cuando se trata de procesos tipo batch que no son interactivos. Al final de cuentas cualquiera de los 2 métodos es correcto siempre y cuando estén bien aplicados y soportados, cualquiera va a ser lento si se basa en un mál concepto o diseño. |
Hola
A mi escaso entender: Esto: Es exactamente lo mismo que esto:
En otras palabras, te traes todo el contenido de la tabla, te guste o no. Por lo tanto; Es mas simple, SI?, tal vez, pero no es mejor que hacer el edit, insert, ect directamente al campo sin traer nada extra. Repito: a Mi pequeño, muy pequeño entender. Saludos |
Cita:
Cita:
Cita:
Igual que está preparada para trabajar con grandes cantidades de datos sin que baje de rendimiento Cita:
Las bases de datos de casi todos mis clientes están por encima de 500 Megas y las conexiones están alrededor de 50 (de media). Cita:
Cita:
Además debes recordar que con Firebird puedes usar servidores con una amplia variedad de sistemas operativos, puedes instalarlo desde los más pequeños equipos hasta los superordenadores más grandes que existen, ya que funciona en linux (es su entorno natural). Además es libre y gratis. Por cierto, aunque me gusta mucho Firebird, yo tampoco descartaba PostgreSQL de la lista. |
Cita:
y luego hago las modificaciones en ese registro...
igual trabaja para las inserciones. Otra opinión no sobra... :D |
Cita:
|
Hola
Bueno, como diria mi amigo Egostar: Depende, depende.... Si hablamos de los componentes (y por eso mencione que SI depende de ellos) en el caso de los IBQuery esto no se puede hacer, envia un hermoso error ya que no permiten hacer ediciones, inserciones etc.... Para esto se usarian los IBDataset, que en tal caso lo hacen algo diferente. Por otro lado: Me extraña que un programador con la esperiencia de AzidRain diga abiertamente que es lo mismo y que no afecta en la velocidad traer todos los registros con un Table.Open para hacer un edit, inser u otro y que ademas es mas simple. No se, pero la idea es darle a las personas la solucion optima, la mas apropiada y no la mas simple que dara problemas a la larga. Saludos |
Ya que se admiten consejos, si me lo permiten... aquí va otro:
Jamás de los jamases se debe emplear asterisco. ¡Es una práctica tediosa e ineficiente! Es algo que hay que erradicar... ¡DI NO a *! El uso del asterisco obliga al motor realizar dos consultas previas sobre las tablas del sistema: la primera para extraer los campos de dicha tabla, la segunda para pre armar la consulta definitiva. Luego recién se lanza la consulta que se ha elaborado. Es mucho más liviano y práctico indicar los campos EXTRICTAMENTE NECESARIOS que lanzar un select *. Si admito que es muy molesto e incómodo cuando la tabla tiene demasiados campos, pero en definitiva lo que habría que preguntarse es: ¿Es necesario suministrar todos los campos? Si es un si pues ni modo, a enlistarlos. Si la funcionalidad a la que estamos por brindar soporte no requiere devolver todos los campos... ¿Qué sentido tiene el *? Otra posibilidad que cabría poner en discusión cuando la cantidad de campos es alta es la de preguntarse si estará bien normalizada. Encontrar un adecuado equilibrio entre la normalización y desnormalización es tanto un arte como una ciencia. ;) Saludos, |
El uso de tablas sólo puede ser factible usarlo con las que tienen pocos registros, por ejemplo:
tbTiposIVA que va a tener menos de 5 registros. |
Cita:
Saludos, |
Bueno, he dicho 5, pero hay 3 tipos:
El normal: 18% (antes del 1 de julio era del 16% :mad:) El reducido: 8% (antes del 1 de julio era del 7% :mad:) El superreducido: 4% (este no ha cambiado) :) El exento: 0% (este es el mejor) :D |
Cita:
Esto es lo que me refería! Por otra parte, diría que en las IBDAC un table.open no equivale a un SELECT * FROM loquesea;. Lo tendría que mirar con detalle (las IBDAC traen un monitor para ver exactamente que comandos SQL se ejecutan)... |
Cita:
, puedes limitar el número de registros a través de un filtro. Eso es lo que Caral está comentando desde un inicio, con el Query puedes seleccionar los campos que realmente necesitas ahorrando tiempo y recursos. Saludos |
Cita:
El sistema de tablas está bien cuando son relativamente pocos registros, pero según vayan aumentando cada vez será más lento abrir la pantalla donde está esa tabla y cada vez tardará más en insertar un registro. Ni que decir tiene que si hay muchísimos registros en la tabla entonces ya ni siquiera será operativo y se tendrá que hacer el cambio y olvidar el uso de ttable. El uso de ttable es el típico de los mensajes "mi programa iba muy bien pero últimamente tarda mucho en acceder y en grabar los datos, formateé el disco y reinstalé el windows, pero sigue igual de lento, cada vez más, ¿será un fallo del firebird?" :D |
Para muestra un botón, el siguiente código corresponde a la propiedad tablename del componente tztable de los componentes zeoslib:
|
Hola
Por eso digo, no hay que ser un maestro para saber algo tan básico. Seguir insistiendo en que un table.open es eficiente o que es lo mismo que hacerlo por SQL, es perder el tiempo. Me sigue extrañando que AzidRain defienda lo indefendible y que ademas mcs insista en esto sin conocimiento alguno, notable. Soy novato, pero hay mas principiantes.:):p Saludos |
Por eso las originales FreeIB Components no traían componente TTable, porque querían primar la velocidad y eficiencia. Después, las siguientes herencias creadas a partir de las FreeIB que han querido seguir siendo eficientes tampoco han traído ese componente, como FIBL, FIBplus, etc.
Sin embargo, Borland sí añadió una TIBTable en las IBX, heredadas, como todos sabemos, de FreeIB, seguramente por hacerlo más cómodo a los que venían de usar paradox o access. Cita:
Luego, los MDO (Mercury Database Objects), que no heredaron de FreeIB, sino que decidieron heredar de IBX, también lleva un TTable, que el código parece el mismo de las IBX: Cita:
Y ya no sigo con esto, creo que está claro el tema. |
Hola otra vez!
Soy tozudo como una mula, y seguía con mi idea que los IBDAC no podían estar TAN mal programados. Y teneis CASI LA RAZON! En las IBDAC, los componentes que uso en el curro y que he recomendado al comapñero Gimli, un table.open se traduce en: Código:
SELECT COUNT(*) FROM table; Saludos, Marc |
Cita:
Pero una base de datos relacional no tiene nada que ver con una tabla plana. En una RDBMS hay registros (y campos) con longitud variable, no existe un primer registro y un último registro, todo depende del orden con el que los queramos presentar. No podemos ir al último registro porque no sabemos cual es, ¿el último ordenado por fecha, por código, por nombre, etc.?, cuando hacemos un select traemos sólo unos pocos registros, por ejemplo, si los presentamos en un dbgrid normalmente serán justos los que quepan en pantalla, luego se irán trayendo los siguientes según avanzamos en el dbgrid, y si le damos "ir al final" entonces se traerá todos los registros. Son filosofías muy distintas de trabajo. Cita:
Pero, repito, no es que esté mal programado, es que si quieres simular una tabla plana con un RDBMS no tienes otra solución. La otra solución es hacer lo mismo que FreeIB, FIBL, FIBplus, etc. ¡¡¡no tener componente TTable!!! :) Estas cosas se aprende estudiando bastante en profundidad las bases de datos, su código fuente, descubres cosas curiosas, trucos interesantes y algunos fallos tremendos. Las bases de datos son una de mis aficiones, me gusta inspeccionar cómo están hechas, hace muchos años hice un sistema de bases de datos como el de los dbf, al que añadí control multiusuario para red local. Y años más tarde hice otro sistema de gestión de bases de datos (un sistema Btree+) también con control de bloqueos, multiusuario, red, journaling, etc. en lenguaje C, lo utilicé en algunos proyectos propios y la verdad es que funcionaban muy bien estable y muy rápido. Lástima que los perdí en un disco defectuoso, estoy hablando de la época 1990 a 1995, ya ha llovido :) |
Cita:
Veo amigo que te gusta mucho el tema de bases de datos, yo todavía no me animé a ver el code de Firebird... por empezar no se de C (y C++, ahora Firebird se ha portado a este) y el tema de los árboles B+ me suena un tantito a chino :p y que decir de snapshots... al concepto lo entiendo... la pregunta es ¿Y técnicamente, como se lo programa? :eek: ¿Haz considerado meterte bien de lleno en aportar tus conocimientos formando parte oficial de Firebird Proyect? Saludos, |
Cita:
Por si fuese poco, el inglés y yo estamos peleados :) p.d. Evidentemente, dedicándole el suficiente tiempo y dedicación, no sólo yo podría colaborar, también cualquiera de vosotros. |
La franja horaria es GMT +2. Ahora son las 13:46:52. |
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