Olha uma procedure q pode te ajudar, não me lembro onde achei a mesma, mas
se bobiar foi ate um colega da lista que postou:
procedure GeraTexto(Dataset: TDataset; Arquivo: string; Separador: Char);
var intC1, intC2: Integer;
strLista: TStringList;
strLinha: string;
begin
strLista := TStringList.Create;
try
Dataset.DisableControls;
Dataset.First;
strLinha := EmptyStr;
//Cria a primeira linha com os nomes das colunas
for intC1 := 0 to Dataset.Fields.Count - 1 do
if intC1 < Dataset.Fields.Count - 1 then
strLinha := strLinha + Dataset.Fields[intC1].DisplayLabel +
Separador
else
strLinha := strLinha + Dataset.Fields[intC1].DisplayLabel;
strLista.Add(strLinha);
strLinha := EmptyStr;
for intC1 := 1 to Dataset.RecordCount do
begin
for intC2 := 0 to Dataset.Fields.Count - 1 do
if intC2 < Dataset.Fields.Count - 1 then
strLinha := strLinha + Dataset.Fields[intC2].AsString
+Separador
else
strLinha := strLinha + Dataset.Fields[intC2].AsString;
strLista.Add(strLinha);
strLinha := EmptyStr;
Dataset.Next;
end;
strLista.SaveToFile(Arquivo);
strLista.Free;
Dataset.EnableControls;
except
on Erro: Exception do
begin
strLista.Free;
Dataset.EnableControls;
raise Exception.Create(Erro.Message);
end;
end;
end;
Em 29/03/06, Walter Alves Chagas Junior <[EMAIL PROTECTED]> escreveu:
>
> O vei, este exemplo abaixo é meio que antigo, mas dá pra voce se basear
> nele. Ao invés de pegar de uma String (vide as chamadas do copy), basta
> você
> por os dados das tabelas via fieldbyname.
>
>
>
> Procedure TForm_Nota.CreateTxtData;
> var
> VFile: TextFile;
> VItemString, VHandleString1, VHandleString2, VHandleTotalString,
> VFileExport, VBackupName,VPrepareStringToPrinter, VNumLabel: string;
> i: integer;
> VQuant, ValUnit: Extended;
> VStr: array[1..37] of string;
> label
> FileReadAbort;
> begin
> //
> FItemString1 := '';
> FItemString2 := '';
> FPDFString1 := '';
> FPDFString2 := '';
> //
> VFileExport :=
> format('%s\%s.%s',[GConfig.RDirectoryImport,AlignEdit25.Text,
> GConfig.RExtens
> ionImport]);
> //
> AssignFile(VFile,VFileExport);
> if FileExists(VFileExport) then
> begin
> if Application.MessageBox('Esta nota já foi exportada. Voce deseja
>
> substituí-la?',CCAPTIONAPPLICATIONTITLE,mb_YesNo+mb_IconQuestion+mb_DefButto
> n1+mb_applmodal) = IDNO then
> Goto FileReadAbort;
> end;
> //
> Rewrite(VFile);
> //
> VStr[1] := InsertChar(AlignEdit25.Text,'0',10); // Numero da
> Nota
> fiscal pos: 1-10
> VStr[2] := InsertChar(AlignEdit11.Text,'0',10); // Número do
> Pedido pos: 11-20
> VStr[3] := InsertChar(AlignEdit29.Text,'0',2); // Série da
> Nota
> pos: 21-22
> {$IFDEF ENCODER}
> VStr[4] := copy(FString,26,8); // Data de emissão
> pos: 9-16
> VStr[5] := copy(FString,34,8); // Data de vencimento
> pos: 17-24
> VStr[6] := copy(FString,42,8); // Data de saída
> pos: 25-32
> VStr[7] := copy(FString,50,2); // Numero de ítens
> inseridos
> na nota pos: 42-44
> VStr[8] := copy(FString,52,5); // CFOP da nota
> pos: 45-48
> VStr[9] := Copy(FString,57,1); // Tipo de nota
> pos: 49-50
> //
> VStr[10] := copy(FString,58,6); // Hora da saída
> pos: 51-56
> VStr[11] := copy(FString,64,14); // CGC do Fornecedor
> pos: 57-70
> VStr[12] := copy(FString,78,14); // CGC do Cliente
> pos: 57-70
> VStr[13] := InsertCharInPos(copy(FString,92,11),',',10); // Valor
> total
> dos produtos pos: 85-101
> VStr[14] := InsertCharInPos(copy(FString,104,11),',',10); // Valor
> total
> da nota pos: 102-119
> VStr[15] := InsertCharInPos(copy(FString,115,11),',',10); // Outras
> despesas Acessorias pos: 120-136
> VStr[16] := InsertCharInPos(copy(FString,126,11),',',10); // Valor do
> seguro pos: 137-153
> VStr[17] := InsertCharInPos(copy(FString,137,11),',',10); // Valor do
> frete pos: 154-170
> VStr[18] := AnsiUpperCase(copy(FString,148,15)); //
> Transportadora pos: 171-185
> VStr[19] := AnsiUpperCase(copy(FString,164,7)); // Placa do
> veículo pos: 208-214
> VStr[20] := AnsiUpperCase(copy(FString,171,15)); // Motorista
> pos: 215-224
> VStr[21] := copy(FString,186,5); // Quantidade
> de volumes pos: 225-230
> VStr[22] := AnsiUpperCase(copy(FString,191,15)); // Espécie de
> volume pos: 215-224
> VStr[23] := InsertCharInPos(copy(FString,206,7),',',6); // Peso Bruto
> pos: 225-231
> VStr[24] := InsertCharInPos(copy(FString,214,7),',',6); // Peso
> Líquido
> pos: 232-238
> VStr[25] := copy(FString,220,1); //
> Responsabilidade do frete
> {$ELSE}
> VStr[4] := copy(FString,25,8); // Data de emissão
> pos: 9-16
> VStr[5] := copy(FString,33,8); // Data de vencimento
> pos: 17-24
> VStr[6] := copy(FString,41,8); // Data de saída
> pos: 25-32
> VStr[7] := copy(FString,49,2); // Numero de ítens
> inseridos
> na nota pos: 42-44
> VStr[8] := copy(FString,51,5); // CFOP da nota
> pos: 45-48
> VStr[9] := Copy(FString,56,1); // Tipo de nota
> pos: 49-50
> //
> VStr[10] := copy(FString,57,6); // Hora da saída
> pos: 51-56
> VStr[11] := copy(FString,63,14); // CGC do Fornecedor
> pos: 57-70
> VStr[12] := copy(FString,77,14); // CGC do Cliente
> pos: 57-70
> VStr[13] := InsertCharInPos(copy(FString,91,11),',',10); // Valor
> total
> dos produtos pos: 85-101
> VStr[14] := InsertCharInPos(copy(FString,102,11),',',10); // Valor
> total
> da nota pos: 102-119
> VStr[15] := InsertCharInPos(copy(FString,113,11),',',10); // Outras
> despesas Acessorias pos: 120-136
> VStr[16] := InsertCharInPos(copy(FString,124,11),',',10); // Valor do
> seguro pos: 137-153
> VStr[17] := InsertCharInPos(copy(FString,135,11),',',10); // Valor do
> frete pos: 154-170
> VStr[18] := AnsiUpperCase(copy(FString,146,15)); //
> Transportadora pos: 171-185
> VStr[19] := AnsiUpperCase(copy(FString,161,7)); //
> Placa do veículo pos: 208-214
> VStr[20] := AnsiUpperCase(copy(FString,168,15)); //
> Motorista pos: 215-224
> VStr[21] := copy(FString,178,5); // Quantidade de
> volumes pos: 225-230
> VStr[22] := AnsiUpperCase(copy(FString,183,15)); //
> Espécie de volume pos: 215-224
> VStr[23] := InsertCharInPos(copy(FString,198,8),',',5); // Peso Bruto
> pos: 225-231
> VStr[24] := InsertCharInPos(copy(FString,206,8),',',5); // Peso
> Líquido
> pos: 232-238
> VStr[25] := copy(FString,214,1); //
> Responsabilidade do frete
> {$ENDIF}
> //
> VHandleString1 :=
>
> format('%s%s%s%s%s%s%s%s%s%s%s%s%s',[VStr[1],VStr[2],VStr[3],VStr[4],VStr[5]
> ,VStr[6],VStr[7],VStr[8],VStr[9],VStr[10],VStr[11],VStr[12],VStr[13]]);
> VHandleString2 :=
>
> format('%s%s%s%s%s%s%s%s%s%s%s%s',[VStr[14],VStr[15],VStr[16],VStr[17],VStr[
> 18],VStr[19],VStr[20],VStr[21],VStr[22],VStr[23],VStr[24],VStr[25]]);
> //
> VHandleTotalString := format('%s%s',[VHandleString1,VHandleString2]);
> //
> Writeln(VFile,VHandleTotalString);
> //
> for i := 1 to FInsertItens do
> begin
> //
> ValUnit := Arredonda(StrToFloat(AlignStringGrid1.Cells[9,i]));
> VQuant := Arredonda(StrToFloat(AlignStringGrid1.Cells[1,i]));
> //
> VStr[26] := StrZero(AlignStringGrid1.Cells[0,i],2); // Sequência
> do
> Item pos: 3-15
> VStr[27] := StrZero(AlignStringGrid1.Cells[2,i],10); // Código do
> Item
> VStr[28] := StrZero(InsertMaskQuant(FloatToStr(VQuant),2),11); //
> Quantidade pos: 23-24
> VStr[29] := AlignStringGrid1.Cells[8,i]; // Unidade
> de
> Medida pos: 25-28
> VStr[30] := StrZero(AlignStringGrid1.Cells[7,i],5); // IPI
> pos: 29-32
> VStr[31] := StrZero(AlignStringGrid1.Cells[5,i],5); // ICMS
> pos: 33-36
> VStr[32] := StrZero(AlignStringGrid1.Cells[6,i],5); // ICMS
> SUBST
> pos: 37-41
> VStr[33] := AlignStringGrid1.Cells[3,i]; // Cod. Sit.
> Tributária pos:
> VStr[34] := RemoveChar(AlignStringGrid1.Cells[4,i],'.'); //
> Classificação fiscal
> VStr[35] := StrZero(FloatToStr(ValUnit),12); // Valor
> Unitário
> VStr[36] := StrZero(AlignStringGrid1.Cells[11,i],12); // Valor do
> IPI
> VStr[37] := StrZero(AlignStringGrid1.Cells[12,i],12); // Valor do
> ICMS
> //
> VItemString :=
>
> format('%s%s%s%s%s%s%s%s%s%s%s%s',[VStr[26],VStr[27],VStr[28],VStr[29],VStr[
> 30],VStr[31],VStr[32],VStr[33],VStr[34],VStr[35],VStr[36],VStr[37]]);
> Writeln(VFile,VItemString);
> //
> end;
> //
> Application.MessageBox('Arquivo gerado com
> sucesso!',CCAPTIONAPPLICATIONTITLE,mb_Ok + mb_IconInformation+
> mb_DefButton1
> + mb_applmodal);
> FileReadAbort:
> CloseFile(VFile);
> FString := '';
> FReaderOk := False;
> ClearData;
> //
> end;
>
>
> []s
>
> Walter Alves Chagas Junior
> Projeto e desenvolvimento de sistemas
> Telemont Engenharia de telecomunicações
> Belo Horizonte - MG - Brazil
> [EMAIL PROTECTED]
> Fone: (31) 3389-8215 Fax: (31) 3389-8200
>
>
> -----Mensagem original-----
> De: [email protected] [mailto:[EMAIL PROTECTED]
> nome de Cadanos
> Enviada em: quarta-feira, 29 de março de 2006 14:13
> Para: grupo2
> Assunto: [delphi-br] Exportar arquivo TXT
>
>
>
>
>
> Bom Dia Pessoal
>
> Preciso de uma juda, sei que uma das coisas basicas e trabalhar com
> arquivo
> txt, mas não domino muito isso, minha duvida.
>
> Preciso gerar um arquivo txt lendo algumas tabelas, o que é mais facil
> exportar a query direto ou mostrar em um dbgrid e exporta-lo, ou criar uma
> outra tabela com o resultado e depois exporta-lo.
>
> Como posso fazer para que a depois de cada campo da query seja gerado no
> txt
> o separador ( ; )?
>
> Cadanos
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> --
> <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
>
>
>
> Links do Yahoo! Grupos
>
>
>
>
>
>
>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> --
> <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
>
>
>
> Links do Yahoo! Grupos
>
>
>
>
>
>
>
>
[As partes desta mensagem que não continham texto foram removidas]
--
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
<*> Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages
<*> Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/
<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html