Club Delphi  
    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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Guardar en una variable el contenido de 100000 registros obtenidos con ZeosLib

Tengo este código para meter en un AnsiString el contenido de 100000 registros:

Código:
  while not zquery1.Eof do
    begin
      Contenido := Contenido + 'replace into usuario values (';
      for i := 0 to zquery1.Fields.Count - 2 do
        begin
          NombreCampo := zquery1.Fields.Fields[i].FieldName;
          Contenido := Contenido + '"' + StringReplace(zquery1.FieldByName(NombreCampo).AsString, ',', '.', [rfReplaceAll]) + '", ';
        end;
      NombreCampo := zquery1.Fields.Fields[i + 1].FieldName;
      Contenido := Contenido + '"' + StringReplace(zquery1.FieldByName(NombreCampo).AsString, ',', '.', [rfReplaceAll]) + '");';
      zquery1.Next;
    end;
pero me salta la excepción EOutOfMemory.

Utilizo zeoslib para acceder a una base de datos MySQL.

¿Qué hago mal?

Última edición por noob fecha: 18-04-2009 a las 19:08:02.
Responder Con Cita
  #2  
Antiguo 18-04-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
¿en un AnsiString?

Yo creo que sería mejor que los guardaras en un Dataset... un Ttable, TClienteDataset o una tabla en memoria...

¿para que quieres guardar 100,000 registros en una variable?
Tal vez si nos platicas para que quieres hacer eso, a alguien se le pueda ocurrir alguna otra forma que sea más sencilla.
__________________

Responder Con Cita
  #3  
Antiguo 18-04-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Para luego enviar dicha información a un cliente.

Esa información ya está guardada en una base de datos, yo quiero sacarla, almacenarla en memoria principal y enviarla a un cliente.
Responder Con Cita
  #4  
Antiguo 18-04-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
si ya la tienes en la base de datos, ¿para que la quieres guardar en una variable? Puedes obtener los 100,000 registros con un TQuery (dataset), luego generar un archivo de texto, de excel o pdf recorriendo ese TQuery y ya solo mandarías el archivo que generes...

pero repito, ¿para que los quieres guardar en una variable?
__________________

Responder Con Cita
  #5  
Antiguo 18-04-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Mando texto plano por sockets TCP, no mando archivos de texto.
Responder Con Cita
  #6  
Antiguo 18-04-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Pues supongo que igual podrías recorrer el mismo dataset e ir enviando los datos directo de ahí, vamos, que sigo sin ver la necesidad de guardarlo en una variable. Pero desconozco el tema de sockets, así que estaría adivinando.

habría que esperar a ver si alguien tiene una mejor idea.
__________________

Responder Con Cita
  #7  
Antiguo 19-04-2009
Avatar de nuk3zito
nuk3zito nuk3zito is offline
Miembro
 
Registrado: ago 2003
Ubicación: "Z" Land
Posts: 244
Poder: 21
nuk3zito Va por buen camino
Siguiendo con tu idea de enviar los datos de esa manera... ¿Por que no envías varios paquetes (registro por registro, dentro del ciclo while) y cuando termines mandas un texto identificador (se me ocurre "EOF", quiensabe por que) para indicarle al receptor que ya terminaste...

Aunque también podrías (yo lo haría) primero crear un archivo xml en el lado del servidor (para que tengas orden en tus datos), guardarlo y después enviarlo. No se me ocurre por que esto no podría funcionar pero tu lo sabes mejor que nosotros.

Suerte en ello.
__________________
Tiempo y ocasión acontecen a todos!
Responder Con Cita
  #8  
Antiguo 20-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
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 noob Ver Mensaje
Para luego enviar dicha información a un cliente.
Esa información ya está guardada en una base de datos, yo quiero sacarla, almacenarla en memoria principal y enviarla a un cliente.
La verdad es que a mi tampoco se me hubiera ocurrido hacerlo así. Comparto la opinión de ContaVeneno de que si ya tienes los datos en una Base de Datos, porqué "desestructurarlos" a un fichero de texto, para luego posteriormente volver a importarlos (que seguramente será lo que vas a hacer).
Yo hubiera optado por exportarlos a algun formato (que siga siendo estructurado y que te facilite luego otros procesos), DBF, MDB, XML,...

Cita:
Empezado por noob Ver Mensaje
Mando texto plano por sockets TCP, no mando archivos de texto.
Si lo vas a acabar mandando, creo que con más razón aun. ¿Porqué? Por que si vas a enviar información, lo lógico sería comprimirla; Haz la prueba sencilla de exportar 100.000 registros a un fichero de texto y luego comprimir ese fichero de texto.

PRUEBA: He hecho un sencilla prueba con 10.000 (10% de lo que vas a hacer tú); He exportado a TXT y luego he comprimido a ZIP. El resultado, como era de esperar, es apreciable en el tamaño de los ficheros.



Si finalmente envías la información comprimida (yo lo haría así), entonces no tiene ventajas convertirla a TXT.
__________________
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
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mostrar el contenido de una variable en un MessageBox tebre Varios 9 19-01-2013 12:25:40
Impresion de Contenido Variable luxus Impresión 1 18-09-2008 00:53:05
SQLite 3 --> Capturar el contenido de los campos en una variable kakarotv5 Conexión con bases de datos 4 27-11-2007 09:56:54
Contenido de una select a una variable fjcg02 MS SQL Server 2 03-10-2005 21:23:13
Generar impreso con bandas de contenido variable falke01 Impresión 5 10-06-2004 12:37:44


La franja horaria es GMT +2. Ahora son las 07:00:22.


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