Solved

Load XML Data into DATASET -  my XML data is in a MEMO and I do not want any Files on Disk

Posted on 2008-06-21
7
2,331 Views
Last Modified: 2013-11-23
I have Data in a XML File and I want to Populate a DATASET with the DATA,

I have tried a ClientDataSet with a .XTR File and it works,

But I do not WANT Any Files on DISK that I have to ship with my Application, nor do I want to CREATE
Temp Files.

The Perfect solution would be where I could just do this

MyDataSet.LoadXML(text);

Or any Function like XML2DS(xmlString,DataSet)

0
Comment
Question by:crestty
  • 3
  • 2
7 Comments
 
LVL 3

Expert Comment

by:Mamouri
ID: 21837913

var

  AStream: TMemoryStream;

begin

  AStream := TMemoryStream.Create;

  try

    Memo1.Lines.SaveToStream(AStream);

    AStream.Position := 0;

    ClientDataSet1.LoadFromStream(AStream);

  finally

    AStream.Free;

  end;

Open in new window

0
 

Author Comment

by:crestty
ID: 21838009
Mamouri,

as far as I know, ClientDataSet only accepts XML int its own format.

I have a STANDARD XML File, so the way to do it is to use a XMLTransformPRovider,

But his does not work since it seems that the only way to load the Transform File is from DISK.


I have also tried this Way:

But this also fails with an ERROR : XML not in correct Format;
So it seems that my XML is nowhere to be supported, yet it is standard XML.



{

  Example:

  ...

    ADOQuery1.Recordset:=RecordsetFromXML(Memo1.Lines.Text);

  ...

}
 

function 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;

Open in new window

0
 
LVL 3

Expert Comment

by:Mamouri
ID: 21855750
Hi

TXMLTransformat component provide property TransformationFile and TransformationDocument. It's possible to use TransformationDocument to feeding tranformation xml to component.
var

  TransformationXML: TXMLDocument;

begin

  TransformationXML := TXMLDocument.Create(Self);

  TransformationXML.LoadFromStream(AStream);

  XMLTransform1.TransformationDocument := TransformationXML.DOMDocument;

Open in new window

0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 

Author Comment

by:crestty
ID: 21856999
Thank you. I will need to test it though.
0
 

Author Comment

by:crestty
ID: 22086553
I used the Microsoft COM OLE Object Instead, and PARSED the XML Doc ( cycle Nodes );

While cycling the XML, I inserted the data into a Memory Dataset.
0
 
LVL 1

Accepted Solution

by:
Computer101 earned 0 total points
ID: 22859988
PAQed with points refunded (500)

Computer101
EE Admin
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The Problem How to write an Xquery that works like a SQL outer join, providing placeholders for absent data on the outer side?  I give a bit more background at the end. The situation expressed as relational data Let’s work through this.  I’ve …
Many times as a report developer I've been asked to display normalized data such as three rows with values Jack, Joe, and Bob as a single comma-separated string such as 'Jack, Joe, Bob', and vice versa.  Here's how to do it. 
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…
The viewer will learn how to synchronize PHP projects with a remote server in NetBeans IDE 8.0 for Windows.

896 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now