[firebase-br] Amigos, ajuda aqui (off)
Francisco Thiago
jeandeadlucky em yahoo.com.br
Sáb Out 2 16:03:58 -03 2004
Olá Nilton!
Eu fiz exatamente como você falou, mas quando eu tento gravar qualquer coisa
nesta variável, ele dá erro de acesso de memória.. Já usei o TStringList, o
TStrings e nao deu certo. O tipo TList, eu usarei mas tarde, mas creio ser a
mesma coisa
Abaixo vai o código:
unit uExport;
interface
uses
SysUtils, Classes, DB, DBClient, Provider, QDialogs;
type
TTypeExport = (teTXTLineDelimited,teXMLDataPacket,teBinary,teSQL);
TCustomExport = class(TComponent)
private
{ Private declarations }
FArquivoDestino :String;
FDataSet :TDataSet;
FCampos :TStrings;
FExportContent :TStrings;
FTypeExport :TTypeExport;
FAfterExportData :TNotifyEvent;
procedure setArquivoDestino(const Value: String);
procedure setDataExport(const Value: TTypeExport);
procedure setDataSet(const Value: TDataSet);
function ToTxtLines :String;
function ToSQL :String;
function ToCDSXML :String;
procedure setFCampos(const Value: TStringList);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner : TComponent);
destructor Destroy;
procedure Exportar;
published
{ Published declarations }
property ArquivoDestino :String read FArquivoDestino write
setArquivoDestino;
property DataSet :TDataSet read FDataSet write
setDataSet;
property Campos :TStrings read FCampos write
setFCampos;
property ExportContent :TStrings read FExportContent;
property TypeExport :TTypeExport read FTypeExport write
setDataExport;
property AfterExportData:TNotifyEvent read FAfterExportData write
FAfterExportData;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Veronica', [TCustomExport]);
end;
{ TCustomExport }
constructor TCustomExport.Create(AOwner: TComponent);
begin
FArquivoDestino :='';
FCampos := TStrings.Create;
FExportContent := TStrings.Create;
inherited Create(AOwner);
end;
destructor TCustomExport.Destroy;
begin
FreeAndNil(FExportContent);
FreeAndNil(FCampos);
inherited Destroy;
end;
procedure TCustomExport.Exportar;
begin
case FTypeExport of
teTXTLineDelimited : FExportContent.Text := ToTxtLines;
teXMLDataPacket, teBinary : FExportContent.Text := ToCDSXML;
teSQL : FExportContent.Text := ToSQL;
end;
if Assigned(FAfterExportData) then
FAfterExportData(Self);
end;
procedure TCustomExport.setArquivoDestino(const Value: String);
begin
FArquivoDestino := Value;
end;
procedure TCustomExport.setDataExport(const Value: TTypeExport);
begin
FTypeExport := Value;
end;
procedure TCustomExport.setDataSet(const Value: TDataSet);
begin
FDataSet := Value;
end;
procedure TCustomExport.setFCampos(const Value: TStringList);
begin
FCampos := Value;
end;
function TCustomExport.ToCDSXML :String;
var
ls_Result :String;
CDS :TClientDataSet;
DSP :TDataSetProvider;
begin
ls_Result := '';
DSP := TDataSetProvider.Create(nil);
CDS := TClientDataSet.Create(nil);
try
try
DSP.DataSet := FDataSet;
DSP.Name := 'DSP';
CDS.Data := DSP.Data;
CDS.Open;
if FTypeExport = teBinary then begin
CDS.SaveToFile(FArquivoDestino,dfBinary);
ls_Result := '(Arquivo binário)';
end else begin
CDS.SaveToFile(FArquivoDestino,dfXML);
ls_Result := CDS.XMLData;
end;
CDS.Close;
except
on E :Exception do begin
ls_Result :='Erro ao exportar dados'+ #$D#$A + E.message;
Raise Exception.Create(ls_Result);
end;
end;
finally
FreeAndNil(CDS);
FreeAndNil(DSP);
Result := ls_Result;
end;
end;
function TCustomExport.ToSQL :String;
begin
end;
function TCustomExport.ToTxtLines:String;
var
Text :TStringList;
i :ShortInt;
begin
Text := TStringList.Create;
Text.Clear;
try
if Not FDataSet.Active then
FDataSet.Open;
FDataSet.First;
while not FDataSet.Eof do begin
for i := 0 to FCampos.Count - 1 do begin
if FDataSet.FieldByName(FCampos.Names[i]).IsNull then
Text.Add('')
else if FDataSet.FieldByName(FCampos.Names[i]).DataType = ftBlob
then
Text.Add('BlobField')
else
Text.Add(FDataSet.FieldByName(FCampos.Names[i]).DisplayText);
end;
FDataSet.Next;
end;
Text.SaveToFile(FArquivoDestino);
finally
Result := Text.Text;
FreeAndNil(Text);
end;
end;
end.
Mais detalhes sobre a lista de discussão lista