Array
(
)

Importar txt para tabela Mysql

Paulo
   - 30 set 2004

Como importar txt para dentro de tabelas MySql?


Alex Maia
   - 30 set 2004

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);


Paulo
   - 30 set 2004

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:


Citação:
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.


Rjun
   - 30 set 2004

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.


Paulo
   - 30 set 2004

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


Rjun
   - 30 set 2004

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;


Paulo
   - 30 set 2004

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?


Paulo
   - 01 out 2004

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


Citação:
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


Citação:
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;