2010-08-28 1 views
2

У меня есть приложение, работающее с доступом (.mdb), мое соединение выполняется с использованием Microsoft.Jet.OLEDB.4.0 и i nead для экспорта MasterTable и detailtables (1,2,3) для XML это возможно? Если возможно, я могу где-нибудь еще (отправить по электронной почте) Открыть и обновить или вставить в базу данных? таблицы одинаковы, мы только где-то, где невозможно подключиться к сети, в которой находится база данных.Delphi Open сохранить в XML с помощью Microsoft.Jet.OLEDB.4.0 (.mdb)

Thank's

ответ

2

Вы можете попытаться скопировать данные из наборов данных Access в некоторых ClientDataSets и затем сохранить их в XML.
Затем вы можете распространять XML-файлы, которые будут использоваться с ClientDataSets вашего приложения, если соединение отсутствует. (Модель BriefCase).
Я бы настоятельно рекомендовал прочитать о ClentDataSets (например, статьи Кэри Дженсена).

+0

Есть ли способ загрузить данные в мой набор данных ADOTable1.LoadFromFile ('c: \ test.xml') таким образом не применяет данные к моей базе данных –

0

Вы можете использовать ADOTable для экспорта или импорта таблиц в формате XML. коды: для экспорта:

ADOTable1.SaveToFile('c:\test.xml',pfXML); 

для импорта:

ADOTable1.LoadFromFile('c:\test.xml'); 
+0

да, это то, что я замешиваю. как я могу сэкономить и загрузить Поля полей и подробностей полей Masterdataset. master.First; в то время как не Mastertable.Eof do begin Masterfield1 ............... Mastertable.next; конец, detail.First; в то время как не детали.Есть действительно начинаются detailfield ........................ detail.next; ............ detailfiel_1 ............ detailfiel_2 Masterfield2 ............ detailfiel_1 ..... ....... detailfiel_2 –

+0

Привет, когда я пытаюсь использовать ADOTable1.Post; не работает ли другой путь? ADOTable1.LoadFromFile ('c: \ test.xml') ADOTable1.UpdateBatch (arall); ADOTable1.Post; –

0

Вы можете использовать SimpleStorage и свернуть свой собственный ADOTable адаптер данных.

Устройство Cromis.SSA.DataSet может служить хорошей отправной точкой для этой цели.

3

Когда вы используете ADODataSet1.LoadFromFile('c:\test.xml'), вы фактически создаете отключенный DataSet.

Ваш вариант заключается в создании временной погрешности TADODataSet (MyXMLDataSet).
MyXMLDataSet не нужен объект Connection (или строка подключения).

Использовать MyXMLDataSet.LoadFromFile('c:\test.xml'), а затем прокручивать его по строкам и публиковать новые строки до ADOTable1 или редактировать существующие строки.

Вот пример:

MyXMLDataSet := TADODataSet.Create(nil); 
try 
    MyXMLDataSet.LoadFromFile('c:\test.xml'); 

    ADOTable1.Connection.BeginTrans; 
    try 
    while not MyXMLDataSet.Eof do 
    begin   
     if not ADOTable1.Locate('ID', MyXMLDataSet.FieldByName('ID').AsString, []) then 
     begin 
     // add new record 
     ADOTable1.Append; 
     ADOTable1.FieldByName('ID').AsString := MyXMLDataSet.FieldByName('ID').AsString; 
     // other fields... 
     ADOTable1.Post; 
     end 
     else 
     begin 
     // edit record 
     end; 
     MyXMLDataSet.Next; 
    end; // while 
    ADOTable1.Connection.CommitTrans; 
    except 
    ADOTable1.Connection.RollbackTrans; 
    raise; 
    end; 
finally 
    MyXMLDataSet.Free; 
end; 

Примечание: приведенный выше код не оптимизирован/тестирование.