Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADO in CSV-Stream (https://www.delphipraxis.net/172914-ado-csv-stream.html)

luisk 28. Jan 2013 17:53

Datenbank: MYSQL • Version: 5.0 • Zugriff über: ADO

ADO in CSV-Stream
 
Hallo,
ich habe folgende beiden Routinen gefunden, um ADO-Abfrageergebnisse im XML-Format in einem Stream zu speichern.
Quelle: http://www.swissdelphicenter.ch/de/showcode.php?id=1498

Ich würde allerdings gerne im CSV-Format in einem Stream speichern.
Hat jemand einen Tip ?

Gruß Luis

Delphi-Quellcode:
function TForm1.RecordsetToXML(const Recordset: _Recordset): string;
var
  RS: Variant;
  Stream: TStringStream;
begin
  Result := '';
  if Recordset = nil then Exit;
  Stream := TStringStream.Create('');
  try
    RS := CreateOleObject('ADODB.Recordset');
    RS := Recordset;
    RS.Save(TStreamAdapter.Create(stream) as IUnknown, adPersistXML );

    Stream.Position := 0;
    Result := Stream.DataString;
  finally
    Stream.Free;
  end;
end;

function TForm1.RecordsetFromXML(const XML: string): _Recordset;
var
  RS: Variant;
  Stream: TStringStream;
begin
  Result := nil;
  if XML = '' then Exit;
  try
    Stream := TStringStream.Create(XML);
    Stream.Position := 0;
    RS := CreateOleObject('ADODB.Recordset');
    RS.Open(TStreamAdapter.Create(Stream) as IUnknown);
    Result := IUnknown(RS) as _Recordset;
  finally
    Stream.Free;
  end;
end;

DeddyH 28. Jan 2013 17:57

AW: ADO in CSV-Stream
 
Kannst Du das hier nicht als Grundlage nehmen?

luisk 28. Jan 2013 18:05

AW: ADO in CSV-Stream
 
Ja, ich bin ja dran, allerdings würde mich interessieren,
ob man den Paramter adPersistXML durch einen entsprechenden CSV.. Parameter ersetzen kann.
Die XML-Formatierung läuft ja alleine über diese Parameter, wobei RS.Save(.. ) die XML-Formatoerung intern kennt.

DeddyH 28. Jan 2013 18:12

AW: ADO in CSV-Stream
 
Da musst Du mal einen Blick in die ADOInt.pas werfen, ob es etwas Entsprechendes darin gibt. Ansonsten selber machen, CSV ist ja nicht ganz so kompliziert wie XML, obwohl auch dort ein paar Stolperfallen lauern.

sx2008 28. Jan 2013 19:06

AW: ADO in CSV-Stream
 
Um es kurz zu machen - bei ADO sind nur ein binäres Datenformat (adPersistADTG) und ein XML Format (adPersistXML) vorgesehen.
Nur diese Formate erlauben ein völliges Wiederherstellen eines Recordsets.
CSV wäre dazu ungeeignet weil alle Informationen zu den Feldern (Name, Datentyp, Länge, Nachkommastellen,...) verloren gehen würden.

luisk 28. Jan 2013 19:28

AW: ADO in CSV-Stream
 
Danke, super !
"adPersistADTG" sollte auch gehen, da diese Format nur um Transport benutzt werden soll
und dann später zur Darstellung wieder ausgepackt wird.

Wahnsinn, was die Leute hier im Forum immer wieder drauf haben.
Kompliment !

luisk 28. Jan 2013 19:34

AW: ADO in CSV-Stream
 
sx2008 -> that`s it:
SQL-Anfrage über Web-Server an SQL-Server gepackt in "adPersistADTG" zurück zu Client
und wieder ausgepackt in Recordset...

Delphi-Quellcode:
function TForm1.RecordsetTo_adPersistADTG(const Recordset: _Recordset): string;
var
  RS: Variant;
  Stream: TStringStream;
begin
  Result := '';
  if Recordset = nil then Exit;
  Stream := TStringStream.Create('');
  try
    RS := CreateOleObject('ADODB.Recordset');
    RS := Recordset;

    RS.Save(TStreamAdapter.Create(stream) as IUnknown, adPersistADTG );

    Stream.Position := 0;
    Result := Stream.DataString;
  finally
    Stream.Free;
  end;
end;

function TForm1.RecordsetFrom_adPersistADTG(const XML: string): _Recordset;
var
  RS: Variant;
  Stream: TStringStream;
begin
  Result := nil;
  if XML = '' then Exit;
  try
    Stream := TStringStream.Create(XML);
    Stream.Position := 0;
    RS := CreateOleObject('ADODB.Recordset');
    RS.Open(TStreamAdapter.Create(Stream) as IUnknown);
    Result := IUnknown(RS) as _Recordset;
  finally
    Stream.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz