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 11-04-2006
Drahcir Drahcir is offline
Miembro
 
Registrado: jul 2005
Ubicación: A Coruña
Posts: 53
Poder: 19
Drahcir Va por buen camino
Crear DataSet en tiempo de ejecución.

Hola a todos,

mi pregunta es la siguiente. Es posible crear un DataSet en tiempo de ejecución para después destruírlo??
Mi problema viene a raiz de exportar los datos de una query a un fichero .csv. Tengo una sola query (y tiene que ser así) pero he de exportar los datos a 4 ficheros distintos dependiendo del valor de un campo. Exportarlos a un fichero de texo es muy fácil ya que utilizo un StringList y voy insertando linea a línea según recorro el DataSet......el problema es a la hora de exportarlo a Excel, ya que exporto el DataSet completo.

Había pensado que quizás sería posible crear 4 DataSouces en tiempo de ejecución para poder así ir insertando en cada uno sus datos correspondientes para luego exportarlos por separado al fichero .csv y destruírlos. No se si eso es viable o se puede hacer.

Agradecería cualquier ayuda.

Un saludo.
Responder Con Cita
  #2  
Antiguo 11-04-2006
Kosmo Kosmo is offline
Miembro
 
Registrado: abr 2006
Posts: 21
Poder: 0
Kosmo Va por buen camino
claro que se puede.

Código Delphi [-]
var
  Tabla: TTable;
  DataSource: TDataSource;
begin
  Tabla:=TTable.Create(nil);
  DataSource:=TDataSource.Create(nil);
//usamos los componentes
  DataSource.Free;
  Tabla.Free;
end;

Puedes crear en tiempo de ejecucion tablas, datasources, querys y lo que sea.
Responder Con Cita
  #3  
Antiguo 11-04-2006
Drahcir Drahcir is offline
Miembro
 
Registrado: jul 2005
Ubicación: A Coruña
Posts: 53
Poder: 19
Drahcir Va por buen camino
Muchas gracias. Probaré a hacerlo de esta manera.

Un saludo.
Responder Con Cita
  #4  
Antiguo 11-04-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
El codigo es el correcto pero falta colocar el "salvadidas" de las excepciones:

Código:
var  Tabla: TTable;  DataSource: TDataSource;begin  Tabla:=TTable.Create(nil);  DataSource:=TDataSource.Create(nil);  Try  //usamos los componentes
  Finally
    DataSource.Free;    Tabla.Free;
  end;end;
De esta forma si algo sale mal mientras manipulas las tablas, te aseguras de que se destruyan y no te dejen memoria colgando. Esta es la forma "canónica" para crear objetos en tiempo de ejecución. La plantilla es la misma para cualquier otro objeto que quieras crear, solo sustituyes por el tipo correcto (en este caso es TDataset y TDataSource). En este ejemplo, TDAtasource solo es necesario si vas a ocupar controles DBAware como un TDBEdit o algo asi, pero si solo vas a manipular la tabla para calcular algo o copiar, no es necesario.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 12-04-2006
Drahcir Drahcir is offline
Miembro
 
Registrado: jul 2005
Ubicación: A Coruña
Posts: 53
Poder: 19
Drahcir Va por buen camino
Estoy completamente de acuerdo con lo de la excepción y lo pondré en práctica. Me he puesto con ello pero me ha asaltado una duda, una vez creaod el DataSet y extraídos los campos (registro por registro) de la query, como inserto en el nuevo DataSet??. Tengo algo parecido a esto:

while not qQuery.Eof do begin
Campo1 := qQuery.FieldByName('CAMPO1').AsString;
Campo2 := qQuery.FieldByName('CAMPO2').AsString;
Campo3 := qQuery.FieldByName('CAMPO3').AsString;
if (Campo1 = 'codigo') then begin
AsignaValores; // Toma los valores de los campos en otro procedure
Listado1.Add(Linea); // Antiguamente añadía una línea a un TStringList
end
else
if (Campo1 = 'codigo 2') then begin
AsignaValores;
Listado2.Add(Linea)
end ......

El caso es que en lugar de añadir líneas a un TStringList para crear un fichero .txt necesito añadir los registros a un TDataSet creado en tiempo de ejecución para poder transformarlo en un fichero .csv.......como podría hacerlo??

Gracias por vuestras respuestas.

Un saludo.
Responder Con Cita
  #6  
Antiguo 13-04-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Aqui dejo este código para tí y mis amigos del Club
FTPUPDATER.zip
que hace precisamente lo que quieres: Convertir un dbf a CSV. Te aclaro que este es parte de un programa mas grande que convíerte de DBF a tablas MySQL. Por si solo no funciona, pero el código y las rutinas te servirán para estudiar como hace la conversión...Me hubiera gustado hacer un componente y ponerlo aqui, pero como dicen en los libros: "ese tema sale del ámbito de este post" Espero te sirva...
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #7  
Antiguo 13-04-2006
Avatar de lpmlpm
lpmlpm lpmlpm is offline
Miembro
 
Registrado: ago 2005
Posts: 136
Poder: 19
lpmlpm Va por buen camino
solo apuntar que puedes hacer algunas cositas para hacer más rápido tu proceso, por ejemplo un Dataset.DisableControls antes de entrar al ciclo de tu traspaso y un Dataset.EnableControls al terminar, y otra mas es que si solo vas a usar el dataset para recorrerlo en un solo sentido de principio a fin puedes activar la propiedad Unidirectional, eso tambien va a celerar mucho el trabajo.
__________________
"Lo mejor de no saber hacer nada es que se tiene mucho tiempo libre."
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
Crear Objetos en tiempo de ejecucion mmtaffarel OOP 8 14-01-2024 17:55:25
Crear formularios en tiempo de ejecución Caro Varios 2 25-08-2005 14:27:39
Crear Tabla en Tiempo de ejecucion alcides Varios 4 01-07-2005 20:23:52
Crear un DSN en tiempo de ejecucion neyvan Conexión con bases de datos 7 21-05-2004 17:41:45
Crear un TListView en tiempo de ejecución finrold Varios 2 15-03-2004 10:29:17


La franja horaria es GMT +2. Ahora son las 18:39:28.


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