Xafam 0 Denunciar post Postado Julho 21, 2008 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
shini 318 Denunciar post Postado Julho 21, 2008 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
Xafam 0 Denunciar post Postado Julho 21, 2008 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
Xafam 0 Denunciar post Postado Julho 21, 2008 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