Преобразование Delphi ClientDataSet в dfXML

Я только что установил Delphi 7 для личного использования и пытаюсь преобразовать файл Delphi ClientDataSet в dfXMLUTF8. Все, что мне действительно нужно, это структура xml. Этот сайт предлагает запустить 4 строки кода будет генерировать желаемый результат. Обратите внимание, однако, что мой файл имеет формат .cds, а не .dat, как в примере. Я не знаю, имеет ли это значение.

ClientDataSet1.Active := false;
ClientDataSet1.CreateDataSet;
ClientDataSet1.LoadFromFile('MyBinaryFile.dat');
ClientDataSet1.SaveToFile('MyXMLFile.XML', dfXMLUTF8);

Я получаю сообщения об ошибках, и, поскольку я никогда раньше не пользовался Delphi, я надеюсь, что кто-то, кто знает, что он делает, может просто опубликовать для меня очень короткую структуру xml. Вот файл (486 байт), с которым я работаю. Я присуждаю правильный ответ первому автору с полным выводом dfXMLUTF8. Спасибо!

Обновление:

Хорошо, я только что начал проект с нуля, и я думаю, что у меня есть некоторые настройки. Я добавил uses DBClient;, var ClientDataSet1: TClientDataSet и, наконец, процедуру:

ClientDataSet1.LoadFromFile('C:\Documents and Settings\XPMUser\Desktop\DelphiCDS\Master.cds');
  ClientDataSet1.SaveToFile('C:\Documents and Settings\XPMUser\Desktop\DelphiCDS\output.XML', dfXMLUTF8);

Выдает следующую ошибку:

Нарушение прав доступа по адресу 004588B6 в модуле Project.exe. Чтение адреса 00000000.

Обновление 2:

Вот что у меня получилось:

unit Script3;

interface

uses
  Forms, DBClient;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;
  CDS: TClientDataSet;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  CDS := TClientDataSet.Create(nil);
  try
    CDS.LoadFromFile('.\input.cds');
    CDS.SaveToFile('.\output.xml', dfXMLUTF8);
  finally
    CDS.Free;
  end;
end;

end.

person skibulk    schedule 20.11.2012    source источник
comment
Когда вы говорите, что я получаю сообщения об ошибках, очень полезно указать ошибки в тексте вопроса, поскольку мы не можем видеть ваш экран с того места, где мы находимся. Измените свой вопрос и предоставьте точное сообщение об ошибке, которое вы получаете. Спасибо.   -  person Ken White    schedule 20.11.2012
comment
Я дал вам конкретный код о том, как создать и использовать код TClientDataSet в моем ответе ниже. Если вы получаете это нарушение прав доступа, вы не используете код, который я разместил. Пожалуйста, прочтите еще раз; вы, видимо, пропустили части CDS := TClientDataSet.Create(nil) и CDS.Free;.   -  person Ken White    schedule 20.11.2012


Ответы (1)


Вы делаете гораздо больше, чем нужно, для того, чтобы совершить обращение. При условии, что MyBinaryFile.dat на самом деле является TClientDataSet файлом Delphi в двоичном формате, эти две строки кода (без дополнительной настройки) будут работать:

ClientDataSet1.LoadFromFile('D:\Temp\MyBinaryFile.dat');
ClientDataSet1.SaveToFile('D:\Temp\MyXMLFile.xml', dfXMLUTF8);

Не зная больше о том, что такое ваш MyBinaryFile.dat, и не имея информации об ошибках, которые вы получаете, довольно сложно предоставить дополнительную информацию. Протестировано и работает со стандартным animals.cds в Delphi 7 (из C:\Program Files\Common Files\Borland Shared\Data в стандартной установке D7 на виртуальной машине Windowx XP).

Из вашего комментария ниже кажется, что реальная проблема, с которой вы столкнулись, - это ошибка компилятора, связанная с неопознанным идентификатором TClientDataSet, когда вы пытаетесь создать его в коде. Если у вас есть достаточно высокий номер SKU для Delphi 7, который включает TClientDataSet (IIRC, Professional и выше), вы можете просто добавить DBClient в пункт uses:

implementation

uses 
  DBClient;

procedure TForm1.FormShow(Sender: TObject);
var
  CDS: TClientDataSet;
begin
  CDS := TClientDataSet.Create(nil);
  try
    CDS.LoadFromFile('MyBinaryFile.dat');
    CDS.SaveToFile('MyXMLFile.xml', dfXMLUTF8);
  finally
    CDS.Free;
  end;
end;

Или, что еще лучше, если вы создаете приложение VCL Forms, просто поместите TClientDataSet в свою форму; вы найдете его на вкладке DataAccess в палитре компонентов.

person Ken White    schedule 20.11.2012
comment
Я абсолютный новичок. Я объявляю [code]var ClientDataSet1: TClientDataSet;[/code] и получаю необъявленный идентификатор TClientDataSet. - person skibulk; 20.11.2012
comment
Мой фактический файл CDS связан с моим вступительным вопросом. Я просто ничего не знаю о Delphi. Какой тип переменной должен быть CLientDataSet1? - person skibulk; 20.11.2012
comment
Если TClientDataSet доступен в версии Delphi 7, которую вы используете (Professional и более поздние SKU, IIRC), просто добавьте DBClient к разделу uses. (Или поместите TClientDataSet в свою форму на вкладке DBAccess в палитре компонентов.) Если бы вы упомянули об этом в своем исходном вопросе, я мог бы также указать это в своем ответе. - person Ken White; 20.11.2012
comment
Хорошо, я думаю, что добавил это правильно. Как запустить этот скрипт? Запуск отображается серым цветом. - person skibulk; 20.11.2012
comment
Обновил ОП моим последним. - person skibulk; 20.11.2012
comment
Delphi не является языком сценариев. Это скомпилированный язык программирования, который создает собственные исполняемые файлы Win32. Вам нужно поместить код в проект (File|New|VCL Forms Application или File|New|Other|Console Application), а затем скомпилировать и запустить этот проект. StackOverflow не является учебным сайтом по программированию. Вам нужно найти сайт, который учит основам. Попробуйте О Delphi или Сайт Марко Канту. - person Ken White; 20.11.2012