PDA

Ver la Versión Completa : levantar datos de archivos text en delphi


jhector
20-01-2011, 19:24:08
estoy con un proyecto donde me dan un archivo texto y apartir de esos datos necesito levantar una o varias tablas en la base de datos (mysql),
el archivo de texto viene un cuatro columnas separadas por "',".

ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
'Data Source='+archivo+';Extended Properties=text;FMT=Delimited';

estaba conectando con adoconnection, con el string anterior pero me levanta un error de autentificacion.

como seria la mejor manera y mas rapida de conectar para luego mostrar los datos en un grid

BlueSteel
21-01-2011, 15:58:50
estoy con un proyecto donde me dan un archivo texto y apartir de esos datos necesito levantar una o varias tablas en la base de datos (mysql),
el archivo de texto viene un cuatro columnas separadas por "',".

ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
'Data Source='+archivo+';Extended Properties=text;FMT=Delimited';

estaba conectando con adoconnection, con el string anterior pero me levanta un error de autentificacion.

como seria la mejor manera y mas rapida de conectar para luego mostrar los datos en un grid

Hola jhector...

Bienvenido al Club. Favor lee la guia de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)

Aqui te respondo lo que tambien solicitaste por mensaje privado. (lo ideal es que preguntes en el mismo hilo que encontrastes...)


El ejemplo es para capturar un archivo de texto o csv separado por comas. Trabajo con D7... y con los componentes Jedi...

Dentro del Formulario tengo los siguientes componentes:


TDriveComboBox -> Seleccionar la Unidad donde se encuentra el archivo
TDirectoryListBox -> Seleccionar el directorio donde se encuentra el archivo
TfilterComboBox -> predefinido para mostrar solo los archivos que quiero (*.txt, *.csv, etc)

TFileListBox -> muestra los archivos que estan en el directorio segun el filtro
TEdit -> Donde dejo el nombre del archivo que se selecciona en el TFileListBox


TJvCsvDataSet -> Donde defino la estructura del archivo de texto o csv (Componente Jedi)
TDBGrid -> Donde muestro los datos del archivo cargado
TDataSourse -> para vincular el archivo de texto con el DBGrid

2 botones tengo... 1 para cargar el archivo y el otro para traspasar a una tabla en mi base de SQL


En el boton 1 (Cargar archivo tengo lo siguiente)

DTexto.Active := False; // DTexto es el nombre de mi componente TJvCsvDataSet , lo desactivo a vincular el archivo
DTexto.FileName := Concat(Label1.Caption,'\',Archivo.Text); // le asigno la ruta y nombre del archivo (label1 me captura la ruta...archivo es el Tedit)
DTexto.Active := True; // Activo el componente
Edit4.Text := IntToStr(DTexto.RecordCount); // obtengo el numero de registros
BitBtn3.Enabled := True; // activo boton 2 para realizar traspaso


con esto el archivo ya esta cargado

espero que esto te sirva...

Salu2:D:p

BlueSteel
21-01-2011, 17:37:00
Ahora te dejo la segunda parte.. que seria el proceso que realizo yo para traspasor los datos que estan en el DBGrid a una tabla de Sql Server

en el boton de Traspasar, pongo el sgte codigo

Var
i : Integer;
nArchivo : String;
begin
DTexto.First; // me posiciono en el primer registro
For i:=0 to DTexto.RecordCount-1 Do // Ciclo se realiza de 0 al ultimo
Begin
Datos.AQ_Edit.Close;
Datos.AQ_Edit.Sql.Clear;
Datos.AQ_Edit.SQL.Add('Insert Into Envio (Env_Ficha, Env_Rol, Env_Proceso, Env_Mes, Env_Ano, Env_Monto)');
Datos.AQ_Edit.SQL.Add('Values (:v01, :v02, :v03, :v04, :v05, :v06)');
Datos.AQ_Edit.Parameters[0].Value := DTexto.fieldbyname('FICHA').AsString;
Datos.AQ_Edit.Parameters[1].Value := DTexto.fieldbyname('ROL').AsString;
If vPro.ItemIndex = 0 Then
Datos.AQ_Edit.Parameters[2].Value := 'L'
Else
Datos.AQ_Edit.Parameters[2].Value := 'G';
Datos.AQ_Edit.Parameters[3].Value := vMes.Text;
Datos.AQ_Edit.Parameters[4].Value := vAno.Text;
Datos.AQ_Edit.Parameters[5].Value := DTexto.fieldbyname('MONTO').AsString;
Datos.AQ_Edit.ExecSQL; // Ejecuto la sentencia SQL para insertar
DTexto.Next; // Avanzo al siguiente registro
End;
DTexto.Active := False; //desactivo el componente que muestra el archivo de texto
RenameFile(Concat(Label1.Caption,'\',Archivo.Text),ChangeFileExt(Concat(Label1.Caption,'\',Archivo.T ext),'.ok')); // cambio el nombre al archivo de texto
Directorio.Refresh; // refresco los componentes donde me mostraba el archivo seleccionado
Archivo.Refresh;

end;


prueba con esto orientado a tu base de mysql y me cuentas como te fue

espero que te sirva

Salu2:p:cool:

llSnakell
21-01-2011, 18:05:05
:O q wena justo lo que necesitaba !! muchas gracias !!
no podia encontrarlo :)

thanks