Mysql, Mydac, Xml

  • Автор темы ProESM
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

ProESM

#1
Доброго времени суток!

Перейду сразу к сути. Есть MySQL-БД. Необходимо реализовать импорт/экспорт данных в/из БД. С MySQL работаю через MyDAC.

Пока решил экспортировать данные через MyQuery в XML-файл. Благо, есть стандартная функция SaveToXML. Все замечательно экспортируется. А вот обратно как быть? Не хочется изобретать велосипеды, сочинять собственные функция для импорта. Есть ли возможность как-то просто импортировать данные из XML-файла в БД?

Заранее спасибо!
 

sinkopa

Well-known member
17.06.2009
344
4
#2
Доброго времени суток!

Перейду сразу к сути. Есть MySQL-БД. Необходимо реализовать импорт/экспорт данных в/из БД. С MySQL работаю через MyDAC.

Пока решил экспортировать данные через MyQuery в XML-файл. Благо, есть стандартная функция SaveToXML. Все замечательно экспортируется. А вот обратно как быть? Не хочется изобретать велосипеды, сочинять собственные функция для импорта. Есть ли возможность как-то просто импортировать данные из XML-файла в БД?

Заранее спасибо!
Хм... :) Вот и мне не понятно... зачем велосипеды изобретать, когда MyDAC все это (XML -экспорт/импорт) сам прекрасно умеет делать...
http://www.devart.com/mydac/features.html
Цитата с оффсайта MyDAC сказал(а):
Data exchange
Transferring data between all types of TDataSet descendants with TCRBatchMove component
Data export and import to/from XML (ADO format)
Ability to synchronize positions in different DataSets
Extended data management with TMyDump, TMyBackup components
 

sinkopa

Well-known member
17.06.2009
344
4
#4
А есть примеры импорта XML через MyDAC? Что-то не найду
А справку почитать? А примеры (родные MyDAC-овские) в код посмотреть? :)
Код:
// кладем на форму VirtualTable (TVirtualTable) // MyDAC приклеивает ее на закладку Data Access

var
i,j, fcount: Integer;
SQL,TableName: string;
begin
VirtualTable.UnPrepare;
VirtualTable.LoadFromFile('c:\vt.xml');
VirtualTable.Prepare;
VirtualTable.Active := True;

//TableName := //имя таблицы в базе данных. Если таблицы, нет - нужно создать (например другим запросом)

VirtualTable.First;
fcount := VirtualTable.FieldCount - 1;
SQL := '';
for i := 1 to VirtualTable.RecordCount do
begin
SQL := SQL + 'INSERT INTO '+TableName+ ' (';

for j := 0 to fcount do
begin
SQL := SQL + VirtualTable.Fields[j].FieldName;
if (j < fcount) then
SQL := SQL + ',';
end;

SQL := SQL + ') VALUES (';

for j := 0 to fcount do
begin
case VirtualTable.Fields[j].DataType of
ftString,
ftMemo	: begin
SQL := SQL + '''' + VirtualTable.Fields[j].AsString + '''';
end;
ftDateTime: begin
SQL := SQL + ''''
+ FormatDateTime('yyyy-mm-dd"T"hh:mm:ss',VirtualTable.Fields[j].AsDateTime)
+ '''';
end;
ftSmallint,
ftFloat,
ftInteger,
ftWord,
ftBoolean : begin
SQL := SQL + VirtualTable.Fields[j].AsString;
end;

//... и так далее

end;

if (j < fcount) then
SQL := SQL + ',';
end;

SQL := SQL + ');'#13#10;
VirtualTable.Next;
end;

MyQuery.SQL.Text:= SQL;
MyQuery.Execute;
end;
К слову о "велосипедах"... А чем собственно Вас не устраивают компоненты TMyDump и TMyBackup?
Этож их прямая задача - сохранять и восстанавливать таблицы...
 
P

ProESM

#5
К слову о "велосипедах"... А чем собственно Вас не устраивают компоненты TMyDump и TMyBackup?
Этож их прямая задача - сохранять и восстанавливать таблицы...

Спасибо! Справку читал, но пример найти не мог. Я тоже уже через VirtualTable реализовал, чуток по-другому только.

Насчет TMyDump и TMyBackup - так мне не всю табличку нужно импортировать и экспортировать, а только часть, отобранную по запросу
 
Статус
Закрыто для дальнейших ответов.