Importar txt para tabela Mysql
Como importar txt para dentro de tabelas MySql?
Paulo
Curtidas 0
Respostas
Alex Maia
30/09/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);
//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);
GOSTEI 0
Paulo
30/09/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:
Lembrando que o campo descricao é do tipo BLOB(Memo). Os texto podem ser curtos como estes ou longos.
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.
GOSTEI 0
Rjun
30/09/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.
GOSTEI 0
Paulo
30/09/2004
Rjun, eu tentei fazer assim, mas não consegui. Como faço assim?
GOSTEI 0
Rjun
30/09/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;
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;
GOSTEI 0
Paulo
30/09/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?
GOSTEI 0
Paulo
30/09/2004
Eu estou chamando o mysqlimport assim: Não está funcionando. Tá brabo!!! Tô no osso, tá ligado!!
Esta é a função executa. Ela é para executar um programa via shell e manter o programa chamador em back até o shell ser executado
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;
GOSTEI 0