Importar txt para tabela Mysql

30/09/2004

Como importar txt para dentro de tabelas MySql?


Paulo

Respostas

30/09/2004

Alex Maia

Tente usar os seguintes códigos:

//Realiza manutenção no banco de dados
ShellExecute(0,nil, Pchar(´C:\bin\mysqlcheck´),PChar(´-r nome_banco ´), nil, sw_show);

//Realiza o dump das tabelas
ShellExecute(0,nil,Pchar(´C:\bin\mysqldump´),PChar(´--tab=C:\ -q -t nome_banco), nil, sw_show);

//Rotinas para importação dos dados
ShellExecute(0,nil,Pchar(´C:\bin\mysqlimport´),PChar(´-d nome_banco local_arquivo\nome_tabela.txt´), nil, sw_show);


Responder Citar

30/09/2004

Paulo

Não funcionou. A minha máquina está assim:
O arquivo TXT se chama: cap29.txt
O banco se chama PTR e está em:
C:\Arquivos de programas\PTR\MySql\Data\PTR
Estes são os diretórios reais. A tabela se chama Indicadores, e os campos são: Codigo e Descricao.
O Arquivo cap29.txt está assim:

1000.00; Qualquer Coisa 1000.01; Outra Coisa 1000.02; Desta vez é outra coisa 1000.03; Agora sim, é outra coisa

Lembrando que o campo descricao é do tipo BLOB(Memo). Os texto podem ser curtos como estes ou longos.


Responder Citar

30/09/2004

Rjun

Se o tamanho do campo for fixo, voce pode ler cada linha do arquivo txt, separar os campos e joga-los nas tabelas. Se for de tamanho variavel, ai voce precisa localizar os separadores de campos.


Responder Citar

30/09/2004

Paulo

Rjun, eu tentei fazer assim, mas não consegui. Como faço assim?


Responder Citar

30/09/2004

Rjun

Para ler o arquivo, carregue o conteúdo em uma stringlist.


var
Arquivo : TStringList;

begin
Arquivo := TStringList.Create;
Arquivo.LoadFromFile(NomedoarquivoTXT);

for i := 0 to (Arquivo.Count -1) do
begin
codigo := copy(arquivo.strings[I], 1, 7); {isso se o tamanho do campo for fixo}
texto := copy(arquivo.strings[I], 8, Tamanho da linha);

{aqui voce coloca o codigo para grava na tabela}

end;


Responder Citar

30/09/2004

Paulo

No exemplo do Alex descobri pq não ta funcionando. É pq eu não passei usuário e senha. Como faço isso no my via shell?


Responder Citar

01/10/2004

Paulo

Eu estou chamando o mysqlimport assim: Não está funcionando. Tá brabo!!! Tô no osso, tá ligado!!

executa(´C:\Arquivos de programas\infoconsult\mysql\bin\mysqlimport -d --host=127.0.0.1 --user=empresa01 --password=10012 dataC:\Temp2\cap01.txt´, SW_SHOWNORMAL);


Esta é a função executa. Ela é para executar um programa via shell e manter o programa chamador em back até o shell ser executado

function TForm1.Executa(Arquivo: String; Estado: Integer): Integer; var Programa : array [0..512] of char; CurDir : array [0..255] of char; WorkDir : String; StartupInfo : TStartupInfo; ProcessInfo : TProcessInformation; begin Screen.Cursor:=crHourGlass; StrPCopy (Programa, Arquivo); GetDir (0, WorkDir); StrPCopy (CurDir, WorkDir); FillChar (StartupInfo, Sizeof (StartupInfo), #0); StartupInfo.cb := sizeof (StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Estado; if not CreateProcess (nil, Programa, nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then Result := -1 else begin WaitForSingleObject (ProcessInfo.hProcess, Infinite); GetExitCodeProcess (ProcessInfo.hProcess, Dword(Result)); end; Screen.Cursor:=crDefault; end;



Responder Citar