Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-01-2004
Morfo Morfo is offline
Miembro
 
Registrado: ene 2004
Posts: 12
Poder: 0
Morfo Va por buen camino
Inserción masiva en MySQL

Hola soy nuevo en este foro pero llevo tiempo visitando este sitio y me inicio aqui con lo siguiente:

Estoy haciendo(pues no lo considero terminado) un programa en delphi 7 con M$Access y MySQL el cual exporta datos de access a MySQL.
Lo que lo hace particular es que tengo que formatear determinados campos al tipo de mysql(fechas sobre todo) y por tal motivo no es una exportación tan cruda como yo quisiera.
Total que he realize un procedimiento el cual extrae la información de access y la inserto en MySQL por medio de instrucciones SQL para MySQL por cada registro en access.
Platicando con mi hermano me comento que esto si bien funciona no es el mejor camino (ni practico) ya que me comentó acerca de los parametros que puedo usar con DBExpress para construir mi consulta una sola vez y por medio de los parametros irlos cambiando dinamicamente dentro del loop que extrae los datos de access lo que (según me dijo, lo siento aún no lo compruebo) es más rápido el rendimiento.


No hay pregunta en mi tema pero si tengo muchas dudas ya que al momento de tratar de asignar un valor al parámetro no lo recoge y me envia un error como : "No se pude convertir un valor OLEvariant a double" cuando o uso DOUBLE como tipo en ningun campo destino de MySQL.
Quizá el problema radique en que los valores de los parametros los trato de asignar así:

Query1.Params[0].Value:=ADOQuery1.Recordset.Field[0].Value;
Query1.Params[1].Value:=ADOQuery1.Recordset.Field[1].Value;
y así por el estilo.

Ya revise mis campos en MySQL pero no veo ningún impedimento.


Uffff, si bien no me urge sé que puede ser más eficaz mi exportación masiva, actualmente me tardo en exportar cerca de un millon de registros en una hora y tengo la seguridad de que podría hacerlo más rápido.

Bueno, les agradezco la atención.
Saludos.
Responder Con Cita
  #2  
Antiguo 09-01-2004
Morfo Morfo is offline
Miembro
 
Registrado: ene 2004
Posts: 12
Poder: 0
Morfo Va por buen camino
Pues bien mis estimados amigos.

Logré hacer funcionar el anterior método que estaba aplicando.

Aparentemente tenía que hacer un Flush a las tablas a antes de proceder a mi carga, cosa rara pero al fin funcionó pero con un punto a considerar muy importante.

Un campo en mi tabla de MySQL del tipo varchar al cual le inserto un numero telefónico de 8 digitos(grave error) mi programa en delphi los insertaba bajo el siguiente formato "00000000.00000000", revise nuevamente las bases de datos de access y me percate de que no había tal formato por lo que para evitar complicarme un rato más en ese asunto cambie el tipo de dato a mi campo de MySQL a entero(int) y listo, se solucionó el detalle.

Sin embargo comprobé que no había gran diferencia entre envíar la cadena de consulta a MySQL que hacer la consulta mediante parametros en cuanto a tiempo y rendimiento se refiere. La diferencia era marginal si es que existía.

Esto a pesar de que lo intente de muchas formas.
Anteriormente creaba archivos de texto con extension SQL para cargarlos directamente al servidor lo cual es tremendamente rápido en comparación a como hoy lo hago sin embargo tengo el problema de espacio, el cual se duplicaba de acuerdo al numero de bases de datos de access las cuales suman más de 5,000.

Ahora que lo pienso voy a intentar despúes la instrucción de MySQL "LOAD FILE IN" el cual , según la documentación, es muy rápido, pienso crear el archivo plano de forma temporal por cada base de datos acccess y eliminarlo una vez cargado. Suena bien ya les comentaré.

Pienso dejarlo así,puesto que este programa sólo es parte más de un procesos mucho más grande que incluye programación en LAMP(Linux,Apache,MySQL y PHP).




Ahh pero cabe aclara a todos mis amigos que este programa es muchisimo más rápido de lo que podría hacerlo visual basic o VB.NET, la comparación es injusta lo sé pero tenía el cargo de conciencia de hacerlo.

Saludos.
Responder Con Cita
  #3  
Antiguo 09-01-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
Cita:
Morfo comentó:
Sin embargo comprobé que no había gran diferencia entre envíar la cadena de consulta a MySQL que hacer la consulta mediante parametros en cuanto a tiempo y rendimiento se refiere. La diferencia era marginal si es que existía.
Esto es porque al menos hasta la versión 3.2x mysql no soporta consultas preparadas. No recuerdo ahora si la última versión ya lo hace, en cuyo caso lo que hay que hacer es usar la propiedad Prepared o similar del objeto Query.

// Saludos
Responder Con Cita
  #4  
Antiguo 09-01-2004
Morfo Morfo is offline
Miembro
 
Registrado: ene 2004
Posts: 12
Poder: 0
Morfo Va por buen camino
Ignoro si MySQL este habilitado para consultas preparadas, sin embargo cuando trataba de preparar la consulta con PREPARED delphi me informaba de un error "No se puede usar esa instruccion en una conexion abierta"o algo similar, por lo que abandoné esa instruccion.

Seguramente es por lo que comentas.

Saludos.
Responder Con Cita
Respuesta



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 23:39:33.


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
Copyright 1996-2007 Club Delphi