Criar rotina de exportar/importar de uma determinada tabela
Não se é possível, segundo meu professor de delphi básico [i:8867c67707]Tudo é possível fazer no delphi for windows.[/i:8867c67707] Deixando o blá blá.....
O cliente me pediu uma rotina que exportasse e importasse dados de uma determinada tabela do Banco de dados. É possível? Faz com arquivos .txt?
O cliente me pediu uma rotina que exportasse e importasse dados de uma determinada tabela do Banco de dados. É possível? Faz com arquivos .txt?
Jpauloss
Curtidas 0
Respostas
Webjoel
21/02/2008
Caro Colega!
Seu professor tem razão! Tudo é possível se tratando de Delphi! e Para seu problema existe solução sim. Pelo delphi, você pode criar uma rotina que ( while clientdataset1.eof do ), percorrendo toda a tabela e gravando seus dados no arquivo .txt que você informaou, você pode fazer isso de várias formas, tanto via write quanto via stringlist.
Existe uma outra maneira, caso você prefira, a ferramenta IbExpert Full tem uma opção que você pode tanto exportar os dados para arquivo texto ou também gerar script em SQL dos dados.
Seu professor tem razão! Tudo é possível se tratando de Delphi! e Para seu problema existe solução sim. Pelo delphi, você pode criar uma rotina que ( while clientdataset1.eof do ), percorrendo toda a tabela e gravando seus dados no arquivo .txt que você informaou, você pode fazer isso de várias formas, tanto via write quanto via stringlist.
Existe uma outra maneira, caso você prefira, a ferramenta IbExpert Full tem uma opção que você pode tanto exportar os dados para arquivo texto ou também gerar script em SQL dos dados.
GOSTEI 0
Webjoel
21/02/2008
Caro Colega!
Seu professor tem razão! Tudo é possível se tratando de Delphi! e Para seu problema existe solução sim. Pelo delphi, você pode criar uma rotina que ( while clientdataset1.eof do ), percorrendo toda a tabela e gravando seus dados no arquivo .txt que você informaou, você pode fazer isso de várias formas, tanto via write quanto via stringlist.
Existe uma outra maneira, caso você prefira, a ferramenta IbExpert Full tem uma opção que você pode tanto exportar os dados para arquivo texto ou também gerar script em SQL dos dados.
Seu professor tem razão! Tudo é possível se tratando de Delphi! e Para seu problema existe solução sim. Pelo delphi, você pode criar uma rotina que ( while clientdataset1.eof do ), percorrendo toda a tabela e gravando seus dados no arquivo .txt que você informaou, você pode fazer isso de várias formas, tanto via write quanto via stringlist.
Existe uma outra maneira, caso você prefira, a ferramenta IbExpert Full tem uma opção que você pode tanto exportar os dados para arquivo texto ou também gerar script em SQL dos dados.
GOSTEI 0
Jpauloss
21/02/2008
Caro Colega!
Seu professor tem razão! Tudo é possível se tratando de Delphi! e Para seu problema existe solução sim. Pelo delphi, você pode criar uma rotina que ( while clientdataset1.eof do ), percorrendo toda a tabela e gravando seus dados no arquivo .txt que você informaou, você pode fazer isso de várias formas, tanto via write quanto via stringlist.
Existe uma outra maneira, caso você prefira, a ferramenta IbExpert Full tem uma opção que você pode tanto exportar os dados para arquivo texto ou também gerar script em SQL dos dados.
Pode me dar um exemplo prático com essa tabela
CREATE TABLE MATERIAL ( COD_ORDENADO VARCHAR(20) NOT NULL, DESCRICAO VARCHAR(70) COLLATE PT_BR, UN VARCHAR(2), PRECO_UNITARIO NUMERIC(15,2) ); /******************************************************************************/ /**** Primary Keys ****/ /******************************************************************************/ ALTER TABLE MATERIAL ADD CONSTRAINT PK_MATERIAL PRIMARY KEY (COD_ORDENADO);
GOSTEI 0
Jpauloss
21/02/2008
Uso DbExpress + FB 2.0
GOSTEI 0
Webjoel
21/02/2008
Primeiramente você faz um select de toda a tabela, usando um SQL_AUX, ou no próprio ClientDataSet.
Depois...
//declare uma variavel tipo TStringList
tabela : TStringList;
//cria lista
tabela := TStringList.Create;
//varre tabela
ClientDataSet1.First;
while not (ClientDataSet1.eof) do
begin
//adiciona campos na stringlist
tabela.add(´Código: ´ + ClientDataSet1COD_ORDENADO.AsString + ´ - ´ + ´Descrição: ´ + ClientDataSet1DESCRICAO.AsString + ´ - ´ + ´Un.: ´ + ClientDataSet1UN.AsString + ´ - ´ + ´Preço: R$ ´ + ClientDataSet1PRECO_UNITARIO.AsFloat);
ClientDataSet1.Next;
end;
//sava o arquivo lista em txt
tabela.SaveToFile(´C:\MATERIAL.TXT´);
Depois...
//declare uma variavel tipo TStringList
tabela : TStringList;
//cria lista
tabela := TStringList.Create;
//varre tabela
ClientDataSet1.First;
while not (ClientDataSet1.eof) do
begin
//adiciona campos na stringlist
tabela.add(´Código: ´ + ClientDataSet1COD_ORDENADO.AsString + ´ - ´ + ´Descrição: ´ + ClientDataSet1DESCRICAO.AsString + ´ - ´ + ´Un.: ´ + ClientDataSet1UN.AsString + ´ - ´ + ´Preço: R$ ´ + ClientDataSet1PRECO_UNITARIO.AsFloat);
ClientDataSet1.Next;
end;
//sava o arquivo lista em txt
tabela.SaveToFile(´C:\MATERIAL.TXT´);
GOSTEI 0
Paullsoftware
21/02/2008
Criei um form aqui somente para fazer um exemplo bem simples de como pode ser feito a Exportação / Importação dos dados da sua tabela.
Para Exportar faça:
Para Importar os registros use o código abaixo:
espero ter ajudado, qualquer coisa posta ai :wink:
Para Exportar faça:
procedure TForm1.Button1Click(Sender: TObject); var ArqTxt:TextFile; NomeArquivo:String; I:Integer; begin //Caminho do txt gerado pela exportação NomeArquivo := ExtractFilePath(ParamStr(0)) + ´Material.txt´; try AssignFile(ArqTxt,NomeArquivo); Rewrite(ArqTxt); with SQLDataSet1 do begin if not Active then Open; First; while not Eof do begin I := FieldCount; for I := 0 to Fields.Count - 1 do //Cada linha gerado no txt corresponde a um Registro da tabela, separando cada um deles com um ";" Ponto e Virgula Write(ArqTxt,Fields[I].Value,´;´); Writeln(ArqTxt);//Gera nova linha no txt Next; end; end; finally CloseFile(ArqTxt); end; end;
Para Importar os registros use o código abaixo:
procedure TForm1.Button2Click(Sender: TObject); Var Registros,ListaCampos: TStringList; j: Integer ; NomeArquivo:String; Const Enter_ = #13 + 10; begin try NomeArquivo := ExtractFilePath(ParamStr(0)) + ´Material.txt´; Registros := TStringList.Create; ListaCampos := TStringList.Create; Registros.LoadFromFile(NomeArquivo);// Aqui estou informando um nome fixo, deve ser usado uma // opção para o usuário selcionar o arquivo a ser importado for j := 0 to Registros.Count -1 do begin // Separa os campos do registro em itens do TStrinList, registro a registro. ListaCampos.Text := StringReplace(Registros[j], ´;´, Enter_, [rfReplaceAll, rfIgnoreCase]); ClientDataSet1.Open; ClientDataSet1.Insert; ClientDataSet1COD_ORDENADO.AsString := ListaCampos[0]; ClientDataSet1DESCRICAO.AsString := ListaCampos[1]; ClientDataSet1UN.AsString := ListaCampos[2]; ClientDataSet1PRECO_UNITARIO.AsString := ListaCampos[3]; ClientDataSet1.Post; end; finally Registros.Free; ListaCampos.Free; end; end;
GOSTEI 0
Charlesbm
21/02/2008
amigão, em primeiro lugar, gostaria de agradecê-lo pela dia, deu certim... Só gostaria de pedir um grande favor seu se puder... No exemplo que aplique este código que vc apresentou abaixo...
chamai uma procedure no AfterPost do ClientDataSet para o sistema gravar no Generator a sequencia dos registros, só que ele não gravou a ultima sequencia e sim fez a contagem colocando o número sequencial, sendo que existia números desordenados na sequencia. e Como faço par ao sistema verificar se há novos registros para importar ignorando os que existem? Uma vez que quero usar esta rotina diaria para trasnferir a rotina diaria par aum pc que nao esta na rede?
chamai uma procedure no AfterPost do ClientDataSet para o sistema gravar no Generator a sequencia dos registros, só que ele não gravou a ultima sequencia e sim fez a contagem colocando o número sequencial, sendo que existia números desordenados na sequencia. e Como faço par ao sistema verificar se há novos registros para importar ignorando os que existem? Uma vez que quero usar esta rotina diaria para trasnferir a rotina diaria par aum pc que nao esta na rede?
Criei um form aqui somente para fazer um exemplo bem simples de como pode ser feito a Exportação / Importação dos dados da sua tabela.
Para Exportar faça:
Para Importar os registros use o código abaixo:
espero ter ajudado, qualquer coisa posta ai :wink:
procedure TForm1.Button1Click(Sender: TObject); var ArqTxt:TextFile; NomeArquivo:String; I:Integer; begin //Caminho do txt gerado pela exportação NomeArquivo := ExtractFilePath(ParamStr(0)) + ´Material.txt´; try AssignFile(ArqTxt,NomeArquivo); Rewrite(ArqTxt); with SQLDataSet1 do begin if not Active then Open; First; while not Eof do begin I := FieldCount; for I := 0 to Fields.Count - 1 do //Cada linha gerado no txt corresponde a um Registro da tabela, separando cada um deles com um ";" Ponto e Virgula Write(ArqTxt,Fields[I].Value,´;´); Writeln(ArqTxt);//Gera nova linha no txt Next; end; end; finally CloseFile(ArqTxt); end; end;
procedure TForm1.Button2Click(Sender: TObject); Var Registros,ListaCampos: TStringList; j: Integer ; NomeArquivo:String; Const Enter_ = #13 + 10; begin try NomeArquivo := ExtractFilePath(ParamStr(0)) + ´Material.txt´; Registros := TStringList.Create; ListaCampos := TStringList.Create; Registros.LoadFromFile(NomeArquivo);// Aqui estou informando um nome fixo, deve ser usado uma // opção para o usuário selcionar o arquivo a ser importado for j := 0 to Registros.Count -1 do begin // Separa os campos do registro em itens do TStrinList, registro a registro. ListaCampos.Text := StringReplace(Registros[j], ´;´, Enter_, [rfReplaceAll, rfIgnoreCase]); ClientDataSet1.Open; ClientDataSet1.Insert; ClientDataSet1COD_ORDENADO.AsString := ListaCampos[0]; ClientDataSet1DESCRICAO.AsString := ListaCampos[1]; ClientDataSet1UN.AsString := ListaCampos[2]; ClientDataSet1PRECO_UNITARIO.AsString := ListaCampos[3]; ClientDataSet1.Post; end; finally Registros.Free; ListaCampos.Free; end; end;
GOSTEI 0
Roberiorebeca
21/02/2008
Olá Pessoal
Primeiro gostaria de parabenizar a todos deste fórum, pois tem sido uma ferramenta muito umportando para os programadores que estão iniciando nesta jornada.
Segundo agradecer o paullsoftware com este codigo que disponibilizou.
Só estou com um pequeno probleminha, quando importo os dados ele está puxando os dados um duplicidade ou seja duas vezes o mesmo registro do arquivo TXT
Teria que informar algum código pra não importar em duplicidade?
Primeiro gostaria de parabenizar a todos deste fórum, pois tem sido uma ferramenta muito umportando para os programadores que estão iniciando nesta jornada.
Segundo agradecer o paullsoftware com este codigo que disponibilizou.
Só estou com um pequeno probleminha, quando importo os dados ele está puxando os dados um duplicidade ou seja duas vezes o mesmo registro do arquivo TXT
Teria que informar algum código pra não importar em duplicidade?
GOSTEI 0