Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 10-07-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
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:
Empezado por IBX
SQL := TStringList.Create;
SQL.Text := 'select ' + {do not localize}
QuoteIdentifier(DataBase.SQLDialect, FTableName) + '.*, ' {do not localize}
+ 'RDB$DB_KEY as IBX_INTERNAL_DBKEY from ' {do not localize}
+ QuoteIdentifier(DataBase.SQLDialect, FTableName);
if Filtered and (Filter <> '') then
begin
SQL.Text := SQL.Text + ' where ' + Filter; {do not localize}
bWhereClausePresent := True;
Que como se puede observar también usa, obviamente, un " select * ".
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:
Empezado por MDO
SQL := TStringList.Create;
SQL.Text := 'select ' + {do not localize}
QuoteIdentifier(DataBase.SQLDialect, FTableName) + '.*, ' {do not localize}
+ 'RDB$DB_KEY as IBX_INTERNAL_DBKEY from ' {do not localize}
+ QuoteIdentifier(DataBase.SQLDialect, FTableName);
if Filtered and (Filter <> '') then
begin
SQL.Text := SQL.Text + ' where ' + Filter; {do not localize}
bWhereClausePresent := True;
Bueno, no parece, es que es el mismo código

Y ya no sigo con esto, creo que está claro el tema.
Responder Con Cita
  #3  
Antiguo 10-07-2010
mcs mcs is offline
Miembro
 
Registrado: may 2007
Ubicación: Girona
Posts: 229
Poder: 20
mcs Va por buen camino
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;
O sea, que no sé si puede haber algo más ineficiente... Muchas gracias por participar en este debate, y por haberme hecho dudar. Debido a esto, me he animado a hacer la prueba...

Saludos,

Marc
Responder Con Cita
  #4  
Antiguo 10-07-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por mcs Ver Mensaje
[..] Soy tozudo como una mula, y seguía con mi idea que los IBDAC no podían estar TAN mal programados.
No es que estén mal programados, es que no hay otra forma de hacerlo. Ten en cuenta que, por ejemplo, en una tabla dbf, hay una cabecera donde indica la estructura de los datos, la longitud que ocupa cada registro y el total de registros, entre otros. Si quieres ir al último registro sólo tienes que avanzar el puntero (UltimoRegistro*OcupacionDeCadaRegistro). Que quieres ir al registro 1000, pues multiplicas 1000*OcupacionDeCadaRegistro y posicionas el puntero en ese lugar del fichero.
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:
Empezado por mcs
Código:
SELECT COUNT(*) FROM table;
SELECT * FROM table;
¿Por qué IBDAC hace eso?, está claro, para que "parezca" que es una tabla "normal", primero cuenta los registros que hay, además lo hace muy ineficientemente (el asterisco), podría usar uno sólo de los campos que tenga índice, sería mucho más rápido. Y una vez que sabe cuantos registros hay, o sea, ha tenido que ir hasta el último campo para traérselos todos, es ahora cuando hace un select de todos los campos, otra vez el *, y sigue la ineficiencia elevada al cuadrado

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

Última edición por Casimiro Noteví fecha: 10-07-2010 a las 17:52:50.
Responder Con Cita
  #5  
Antiguo 10-07-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No es que estén mal programados, (...)

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
¡Hey! Cuidado con mi apellido... ¡que no tiene nada de malo el tener una mente cuadrada!

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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 11-07-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por Delphius Ver Mensaje
[..] ¿Haz considerado meterte bien de lleno en aportar tus conocimientos formando parte oficial de Firebird Proyect?
Sí, lo he pensado algunas veces, y estoy convencido de que puedo colaborar en algunos apartados, pero tendría que dedicarle muchísimo tiempo y dedicación para conocer a fondo el código del mismo, por lo que surgen varios problemas respecto a eso:

Código Delphi [-]
while NecesitoGanarmeLasHabichuelas do
begin
  if getTiempoParaConocerEnProfundidadElProyecto then
    ColaborarEnProyecto('xxx');
end;

function getTiempoParaConocerEnProfundidadElProyecto:boolean;
begin
  result := false;
  if Jubilado or HerenciaRecibida or GanadoLoteria then
    result := true;
end;

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.

Última edición por Casimiro Noteví fecha: 11-07-2010 a las 00:38:06.
Responder Con Cita
  #7  
Antiguo 11-07-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
A Pues, si... viéndolo de ese modo esta difícil. Es una de las cosas malas que tiene este mundito... le hemos dado a él un valor tan alto que cualquier otro interés y gusto no puede ganarle una apuesta.

Es muy cierto amigo, cuesta y lleva tiempo es adentrarse en cualquier proyecto ya comenzado y maduro para ponerse al día.

Lástima, estoy convencido que podrías ser de mucha utilidad para el equipo y el proyecto.

Yo ya he dejado en pausa las traducciones. Logré traducir casi todos los documentos "Utility" (de hecho, me faltó nBackup solamente), Ernesto Cullen me había pasado algunas correcciones del primer documento, lo corregí y añadí algunas sugerencias y observaciones para conocer su opinión al respecto de algunas cosas y no he vuelto a recibir respuesta. Ya me había dicho que el estaba bastante ocupado y se le hacía difícil sacar tiempo para ver como andan mis documentos.
Es una lástima que esto esté quedando en "veremos", sería un buen aporte para la comunidad en Español el tener a mano documentación en el idioma. Para colmo yo ahora también ando entrando en falta de tiempo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 11-07-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Por cierto... la función:
Código Delphi [-]
function getTiempoParaConocerEnProfundidadElProyecto:boolean;
begin
  result := false;
  if Jubilado or HerenciaRecibida or GanadoLoteria then
    result := true;
end;

Puede simplificarse así:

Código Delphi [-]
function getTiempoParaConocerEnProfundidadElProyecto:boolean;
begin
  result := Jubilado or HerenciaRecibida or GanadoLoteria;
end;


Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
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


La franja horaria es GMT +2. Ahora son las 16:59:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi