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,302 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
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

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

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

In our object-oriented world the class is a minimal unit, a brick for constructing our applications. It is an abstraction and we know well how to use it. In well-designed software we are not usually interested in knowing how objects look in memory. …
How to install Selenium IDE and loops for quick automated testing. Get Selenium IDE from http://seleniumhq.org (http://seleniumhq.org) Go to that link and select download selenium in the right hand columnThat will then direct you to their downlo…
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 use NetBeans IDE 8.0 for Windows to perform CRUD operations on a MySql database.

705 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

17 Experts available now in Live!

Get 1:1 Help Now