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. |
claro que se puede.
Puedes crear en tiempo de ejecucion tablas, datasources, querys y lo que sea. |
Muchas gracias. Probaré a hacerlo de esta manera.
Un saludo. |
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 |
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. |
1 Archivos Adjunto(s)
Aqui dejo este código para tí y mis amigos del Club
Archivo Adjunto 281 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" :D Espero te sirva... |
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.
|
La franja horaria es GMT +2. Ahora son las 04:10:24. |
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