FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#21
|
||||
|
||||
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.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#22
|
||||
|
||||
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
__________________
Siempre Novato |
#23
|
||||||
|
||||||
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. |
#24
|
||||
|
||||
Cita:
y luego hago las modificaciones en ese registro...
igual trabaja para las inserciones. Otra opinión no sobra...
__________________
Buena caza y buen remar... http://mivaler.blogspot.com |
#25
|
||||
|
||||
Cita:
|
#26
|
||||
|
||||
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
__________________
Siempre Novato |
#27
|
||||
|
||||
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, |
#28
|
||||
|
||||
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.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 10-07-2010 a las 19:13:08. |
#29
|
||||
|
||||
Cita:
Saludos, |
#30
|
||||
|
||||
Bueno, he dicho 5, pero hay 3 tipos:
El normal: 18% (antes del 1 de julio era del 16% ) El reducido: 8% (antes del 1 de julio era del 7% ) El superreducido: 4% (este no ha cambiado) El exento: 0% (este es el mejor)
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 10-07-2010 a las 19:14:16. |
#31
|
|||
|
|||
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)... |
#32
|
|||
|
|||
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 |
#33
|
||||
|
||||
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?" |
#34
|
||||
|
||||
Para muestra un botón, el siguiente código corresponde a la propiedad tablename del componente tztable de los componentes zeoslib:
|
#35
|
||||
|
||||
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. Saludos
__________________
Siempre Novato |
#36
|
||||
|
||||
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. |
#37
|
|||
|
|||
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; SELECT * FROM table; Saludos, Marc |
#38
|
||||
|
||||
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
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 10-07-2010 a las 17:52:50. |
#39
|
||||
|
||||
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 y que decir de snapshots... al concepto lo entiendo... la pregunta es ¿Y técnicamente, como se lo programa? ¿Haz considerado meterte bien de lleno en aportar tus conocimientos formando parte oficial de Firebird Proyect? Saludos, |
#40
|
||||
|
||||
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 otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 11-07-2010 a las 00:38:06. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Delphi 6 y Firebird 2.1 | Pedro-Juan | Conexión con bases de datos | 7 | 21-09-2008 00:22:51 |
Firebird y Delphi 7 | miguel_e | Conexión con bases de datos | 2 | 16-11-2007 18:11:23 |
firebird y delphi.net | julyus | Firebird e Interbase | 2 | 25-10-2006 15:48:51 |
Delphi 5 y Firebird | alexcabo | Firebird e Interbase | 3 | 18-07-2006 01:40:24 |
Firebird en Delphi | JXJ | Firebird e Interbase | 3 | 04-11-2005 20:19:48 |
|