TFileStream (Arquivo TXT)
15/09/2004
0
Bom dia...
Gostaría de saber como que eu faço pra gravar um arquivo txt nesse FileStream...
Vejam o q fiz quando mando gerar um arquivo....
Se alguém puder me ajudar.... desde já agradeço...
Gostaría de saber como que eu faço pra gravar um arquivo txt nesse FileStream...
Vejam o q fiz quando mando gerar um arquivo....
procedure TfCb042.tbImprimiClick(Sender: TObject); var Arquivo : TFileStream; registro, temp, sAux, //variavel temporaria para CPF ou CGC temp1: string; //variável temporária Soma : Real; cont,max: integer; //contador de linhas flag : boolean; //True = CGC; //False = CPF; sData : String; ValidaArquivo : Boolean; nCounter, banco : Integer; Dia, Mes, Ano : Word; Dtvenc: TDateTime; teste : String; begin // inherited; try if MessageDlg(´Deseja gerar o arquivo de Boleta Registrada agora?´, mtConfirmation, [mbNo, mbYes], 0) = mrNo then Exit else begin gArquivo.Progress := 0; cont := 1; Soma := 0; ValidaArquivo := True; with qArquivo Do begin Close; Sql.Clear; Sql.add (´SELECT TOP ´+QuantGerar.text+´ * ´); Sql.add (´FROM CBCSERCO LEFT JOIN (CBYCONTA RIGHT JOIN CBBCONTR ON CBYCONTA.CBYIDENT = CBBCONTR.CBYIDENT) ON CBCSERCO.CBBIDENT = CBBCONTR.CBBIDENT´); // Sql.Add (´CBYCONTA right join CBBCONTR on (CBBCONTR.CBYIDENT = CBYCONTA.CBYINDET) ´); Sql.Add (´Where (CBBGERAD = False) and (CBBMESCO = ´+#39+CB_Mes.Text+39+´) ´); Open; if qArquivo.RecordCount = 0 then begin ShowMessage(´Não existe nenhuma boleta gerada para envio.´); exit; end else begin showmessage (´há dados!´);// dsFinanceiro.DataSet.Insert; end; DateTimeToString(sData,´ddmmyy´,Now); banco := 21; if banco = 21 then begin qArquivo.First; gArquivo.MinValue := 0; gArquivo.MaxValue := qArquivo.RecordCount; while not qArquivo.Eof do begin inc(cont); registro := ´´; temp := ´´; temp1:= ´´; Soma := Soma + qValorCBDVLSER.asFloat; registro := registro + ´1´; registro := registro + ´02´; if not fCb001.ValidaCGC(´27400100000161´) then begin raise ERangeError.CreateFmt(´Favor verificar o CNPJ do Cristo Rei.´, []); end; registro := registro + ´27400100000161´; registro := registro + ´00001828078´+ StringOfChar(´ ´, 9); sAux := IntToStr(dsFinanceiro.DataSet.fieldByName(´CBHIDENT´).AsInteger + 2000); sAux := StringofChar (´0´, 8 - length(sAux))+ sAux; registro := registro + Calcula_Nosso_Numero(sAux) + StringOfChar(´ ´, 10) + StringOfChar(´ ´, 6) + StringOfChar(´0´, 2) + StringOfChar(´0´, 2); registro := registro + StringOfChar(´ ´, 15); registro := registro + ´1´; registro := registro + ´76´; registro := registro + inttostr(dsFinanceiro.DataSet.fieldByName(´CBHIDENT´).AsInteger); registro := registro + DateToStr (dsFinanceiro.DataSet.fieldByName(´CBHDTVEN´).AsDateTime); registro := registro + FloatToStr (dsFinanceiro.DataSet.fieldByName(´CBHVALOR´).asFloat); registro := registro + Mensagem.text; registro := registro + StringOfChar(´0´, 6 - Length(inttostr(cont)))+inttostr(cont); registro := registro + #1310; [b]Arquivo.Write (registro[1], 402); [/b]//ERRO AQUI... Está dando ACCESS VIOLATION gArquivo.progress := qArquivo.recno; qArquivo.Next; end; //final do while end; end; end; Except ValidaArquivo := False; Arquivo.Free; end; if ValidaArquivo then begin with fcb001.qConsulta do begin Close; SQL.Clear; SQL.Add(´UPDATE CBHFINAN SET CBHQTHAC = :Valor, ´); SQL.Add(´ CBHBOLEN = True ´); SQL.Add(´ WHERE CBHCONCI = FALSE ´); SQL.Add(´ AND CBYIDENT = :Conta ´); SQL.Add(´ AND CBHBOLEN = False ´); SQL.Add(´ AND CBHINBRG = True ´); SQL.Add(´ AND CBHDTVEN BETWEEN :Dtatual AND :Dtvencimento ´); SQL.Add(´ AND CBHQTHAC = 0 ´); fcb001.qConsulta.Parameters.ParamByName(´Valor´).Value := max; fcb001.qConsulta.Parameters.ParamByName(´Conta´).Value := fCb001.qContaCBYIDENT.AsInteger; fcb001.qConsulta.Parameters.ParamByName(´Dtvencimento´).value := DateTimeToStr(Dtvenc); fcb001.qConsulta.Parameters.ParamByName(´Dtatual´).value := DateTimeToStr(Now); fcb001.qConsulta.ExecSQL; fcb001.qConsulta.Filtered := False; ShowMessage(´O arquivo foi gerado com sucesso. Favor enviar ao banco.´); SaveDialog.FileName := ´Cristo Rei´+ sData + ´.txt´; if SaveDialog.Execute then Arquivo := TFileStream.Create(ExpandFileName(SaveDialog.FileName), fmCreate) else exit; Arquivo.Free; end; end else begin ShowMessage(´ATENÇÃO: Por algum motivo o arquivo não pode ser gravado. Favor informar aos responsáveis pelo sistema.´); end; end;
Se alguém puder me ajudar.... desde já agradeço...
Diegus
Curtir tópico
+ 0
Responder
Post mais votado
15/09/2004
Colega,
Falta criar o objeto TFileStream. Acredito também que você deveria substituir por TStringList, pois é mais apropriado para o que você está se propondo.
No seu caso, a ordem correta é:
Falta criar o objeto TFileStream. Acredito também que você deveria substituir por TStringList, pois é mais apropriado para o que você está se propondo.
No seu caso, a ordem correta é:
var Arquivo: TFileStream; Registro: String; begin Registro := ´´; Arquivo := TFileStream.Create(´C:\TEMP\ARQUIVO.TXT´, fmCreate); Arquivo.Write(registro[1], 402); Arquivo.Free;
Aroldo Zanela
Responder
Mais Posts
15/09/2004
Marcelo Saviski
Declare a variável registro como [color=green:cd08e0f9ad]registro: string[402][/color:cd08e0f9ad]
talvez funcione
talvez funcione
Responder
Clique aqui para fazer login e interagir na Comunidade :)