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 21-09-2004
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 23
Tecnic2 Va por buen camino
Question Cómo creo los índices desde código?

Muchas gracias por tu respuesta Neftali.

Mi problema surge cuando establezco esos parámetros en mi control ADOQuery, me da un error de incompatibilidad, o algo así, entre éllos.

Por otra parte, cómo lo hago para crear los índices de las tablas desde código? Además, no entiendo por que tendría que acelerar el traspaso de datos el crear los índices al final si precisamente al final los datos ya están copiados.

Otra vez, gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 21-09-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Tecnic2
...Mi problema surge cuando establezco esos parámetros en mi control ADOQuery, me da un error de incompatibilidad, o algo así, entre éllos.
Ok, pruébalos sólo en el ADOTAble que está contra el Access. De todas formas si alguno te da problemas, pues decartalo y vuelve a la opción por defecto, sólo era para probar mejoras.

Cita:
Empezado por Tecnic2
Por otra parte, cómo lo hago para crear los índices de las tablas desde código?
Busca en access ayuda sobre CREATE INDEX, y utilizando un ADOQuery con la sentencia; Por ejemplo:

Código SQL [-]
CREATE INDEX I_Nombre ON Clientes (Nombre ASC)

te crea un índice en la tabla Clientes ascendente por el campo nombre.

Cita:
Empezado por Tecnic2
Además, no entiendo por que tendría que acelerar el traspaso de datos el crear los índices al final si precisamente al final los datos ya están copiados.
Justo por eso, los índices son buenos para acelerar las búsquedas en una tabla, pero ralentizan las inserciones/modificaciones/borrados porque cada vez que haces una de éstas operaciones el índice se regenera. Para que me entiendas, en una inserción no se usa un índice (con la excepción de que controles duplicados con ellos), por lo tanto si haces 1000 inserciones seguidas, los único que hace la BD es, depués de cada inserción "regenerar" el índice por si le hacen una consulta.

El resultado de hacer:
Código:
INSERT1
 (la BD regenera el índice)
INSERT2
 (la BD regenera el índice)
INSERT3
 (la BD regenera el índice)
INSERT4
 (la BD regenera el índice)
...
INSERT1000
 (la BD regenera el índice)
y hacer ésto:

Código:
INSERT1
INSERT2
INSERT3
INSERT4
...
INSERT1000
 (crear el índice)
para tu caso concreto es lo mismo ya que en todo éste proceso el índice no se usa para nada (con la excepción de que controles duplicados con ellos, como ya te he dicho)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 21-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Tecnic2:

Estuve haciendo unas pruebas ayer transfiriendo 600,000 registros de una tabla dbase a una tabla access. Para dbase usé un TTable anque usar un Query no creo qe cambie mucho los resultados, y para Access use un TAdoTable.

Tal como sugiere Neftalí la tabla de Access no tenía índices al momento de la transferencia.

En la primera prueba, copiando registro a registro tal como lo has hecho, el tiempo de transferencia total fue, digamos, infinito (no esperé ni con mucho a que terminara ).

Luego de jugar con varias propiedades observé un cambio drástico con dos de ellas:

Una, ya te la comentaron: CursorType := ctOpenForwardOnly
La otra, CursorLocation := clUseServer

Con estas dos, el tiempo total de transferencia fue de entre 4 y 5 minutos.

// Saludos
Responder Con Cita
  #4  
Antiguo 21-09-2004
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 23
Tecnic2 Va por buen camino
Question Y cómo lo haces?

Tienes un bucle que recorre todos los registros normal y corriente? Me puedes pasar el código de ejemplo a ver si hay algo que hago mal?

Muchas gracias.
Responder Con Cita
  #5  
Antiguo 21-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Te digo que es similar a lo que estás haciendo tú:

Código Delphi [-]
{
  Table1 - TTable para dbase
  AdoTable1 - TAdoTable para Access
}

  Button1.Enabled := false;
  Done := false;

  Table1.Open;
  AdoTable1.Open;

  while not Table1.Eof and not Done do
  begin
    Application.ProcessMessages;

    with AdoTable1 do
    begin
      Append;

      Fields[0].AsString := Table1.Fields[0].AsString;
      Fields[1].AsString := Table1.Fields[1].AsString;
      Fields[2].AsDateTime := Table1.Fields[2].AsDateTime;
      Fields[3].AsString := Table1.Fields[3].AsString;
      Fields[4].AsString := Table1.Fields[4].AsString;
      Fields[5].AsString := Table1.Fields[5].AsString;
      Fields[6].AsString := Table1.Fields[6].AsString;
      Fields[7].AsString := Table1.Fields[7].AsString;
      Fields[8].AsString := Table1.Fields[8].AsString;
    end;

    Table1.Next;
  end;

  if AdoTable1.State = dsInsert then
    AdoTable1.Post;

  Button1.Enabled := true;
  Done := true;

El decrecimiento radical lo obtuve con las dos propiedades que te menciono.

// Saludos
Responder Con Cita
  #6  
Antiguo 21-09-2004
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 23
Tecnic2 Va por buen camino
ADO ha funcionado

He visto la luz...
Me faltaban establecer las propiedades CursorType y CursorLocation, a parte de lo de preguntar lo del State.

He pasado de hora y media a 4 minutos y medio.

Millones de gracias.
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


La franja horaria es GMT +2. Ahora son las 11:46:38.


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