Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Xafam

Importar de um .txt para um .mdb

Recommended Posts

bom dia a todos,

 

eu estou fazendo um programa no qual ele cria um arquivo mdb(tabela.mdb), uma tabela dentro dele(TABELA), uma coluna (ARQ_NOME) dentro de ''TABELA'', e tb tem que importar o conteudo de um arquivo txt(arquivo.txt) nessa tabela ...

 

até agora eu consigo fazer quase tudo .. eu crio o ''arquivo.mdb'' e tb a tabela dentro dele ''TABELA'' e dentro de dela a coluna ''ARQ_NOME'', porem nao consigo importar o conteudo do ''arquivo.txt'' para a ''TABELA'' .....

 

 

>>> uma parte do meu codigo ....

 

 

procedure TFrmCriarBase.btnBaseClick(Sender: TObject);

 

var

caminho, base, comando: string;

 

begin

 

caminho := 'E:\Dm\Programa\MDB\tabela.mdb';

 

if FrmCriarTabelas.CloseQuery then

begin

 

if FileExists('E:\Dm\Programa\MDB\tabela.mdb')

then

if comando = 'CREATE TABLE TABELA(ARQ_NOME TEXT(8))'

then

ShowMessage('Tabela já existe')

else

begin

{ definindo a base de dados }

base := 'Provider=Microsoft.Jet.OLEDB.4.0' + ';Data Source=' + caminho + ';Persist Security Info=False';

ADOConnection1.ConnectionString := base;

 

{ Criando as tabelas... }

{>>> Tabela <<<}

comando := 'CREATE TABLE TABELA(ARQ_NOME TEXT(11))';

 

ADOCommand1.CommandText := comando;

ADOCommand1.Execute;

ADOCommand1.Cancel;

 

// aki seria onde eu inseriria o conteudo do ''arquivo.txt'' no campo ''ARQ_NOME'' da tabela ''TABELA''

 

comando := 'BULK INSERT TABELA FROM E:\Dm\Programa\Lista\lista.txt WITH (FORMATFILE = E:\Dm\Programa\MDB\tabela.mdb, DATAFILETYPE = CHAR, ROWTERMINATOR = \n ))';

 

ADOCommand2.CommandText := comando;

ADOCommand2.Execute;

 

close;

end;

end;

end;

end.

 

 

>>> o arquivo.txt é assim:

01022008.mdb

02092008.mdb

11092008.mdb

12022008.mdb

13022007.mdb

16052008.mdb

32112008.mdb

40012008.mdb

40022008.mdb

40052008.mdb

 

 

se alguem puder ajudar, agradeceria muito ....

 

ah!! outra coisa, como que eu faço para que o proprio programa "aperte" o botao??

 

 

[]s

 

xafam

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz, ta meio confuso isso cara,

 

1) pra fazer o botão 'apertar sozinho', você coloca o nome do metodo(procedure//function) onde você quer q execute EX:

Procedure lol begin

Button1.Onclick;

{bloco}

end;

 

as vezes você etm passa um paramentre, geralmente que é quem enviou a messagen, as vezes tem mais coisa;

 

2) você precisa importar uma unica vez os dados txt pra tabela??, se sim, acredito q se você usar expressões regulares resolve teu proplema, pq desse jeito você monta um 'inser monstruoso' no execel,calc ou qualquer ou editor de planilha.

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

shini,

 

 

eu finalmente consegui ..... http://forum.imasters.com.br/public/style_emoticons/default/grin.gif http://forum.imasters.com.br/public/style_emoticons/default/grin.gif http://forum.imasters.com.br/public/style_emoticons/default/grin.gif http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

 

olha como ficou .....

 

procedure TFrmCriarBase.btnBaseClick(Sender: TObject);

var

 

x: integer;

bloco1, bloco2, bloco3, caminho, base, comando: string;

 

begin

 

caminho := 'K:\Dm\Programa_pronto\MDB\tabela.mdb';

 

if FrmCriarTabelas.CloseQuery then

begin

 

if FileExists('K:\Dm\Programa_pronto\MDB\tabela.mdb') then

DeleteFile('K:\Dm\Programa_pronto\MDB\tabela.mdb');

 

if FileExists('K:\Dm\Programa_pronto\MDB\tabela.mdb')

then

if comando = 'CREATE TABLE TABELA(ARQ_NOME TEXT(8))'

then

ShowMessage('Tabela já existe')

else

begin

{ definindo a base de dados }

base := 'Provider=Microsoft.Jet.OLEDB.4.0' + ';Data Source=' + caminho + ';Persist Security Info=False';

ADOConnection1.ConnectionString := base;

 

{ Criando a tabela - TABELA ... }

 

comando := 'CREATE TABLE TABELA(ARQ_NOME TEXT(8))';

 

ADOCommand1.CommandText := comando;

ADOCommand1.Execute;

ADOCommand1.Cancel;

 

Memo1.Lines.LoadFromFile('K:\Dm\Programa_pronto\Lista\arquivo.txt');

for x:=0 to Memo1.Lines.Count - 1 do

begin

bloco1:=copy(Memo1.Lines.Strings[x],1,8);

 

ShowMessage('Bloco1: ' + bloco1);

 

comando := 'INSERT INTO TABELA(ARQ_NOME) VALUES(' + bloco1 + ')';

 

ADOCommand2.CommandText := comando;

ADOCommand2.Execute;

close;

 

end;

end;

end;

end;

 

end.

 

eu passo o conteudo do arquivo.txt para um Memo e ai conto ate 8 caracteres e com o INSERT eu jogo ele no banco de dados ....

 

agora só aconteceu uma coisa, quando insero as duas primeiras linhas ('01022008.mdb' e '02092008.mdb'), por ter um 0(zero), na frente, no banco de dados (tabela.mdb), esse zero nao é addicionado, (até entendo pq em um nº normal , nao há necessidade de ter um zero na frente), porem isso nao são numero, são nomes de arquivos .....

 

valeu pela ajuda

 

xafam ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma coisa q eu esqueci de fazer,

 

as variaveis "bloco2 e bloco3" , era para eu ter tirado elas , mas esqueci ...

 

heheheheh :rolleyes:

 

 

se eu quisesse que essa procedure fosse executado por um botao que 'aperta sozinho', seria como???

 

Procedure TFrmCriarBase;

begin

btnBase.Onclick;

end;

 

 

 

??????

 

valeu pela ajuda ....

 

[]s,

 

xafam ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.