Mysql, Mydac, Xml

Тема в разделе "Delphi - Базы данных", создана пользователем ProESM, 22 дек 2011.

Статус темы:
Закрыта.
  1. ProESM

    ProESM Гость

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

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

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

    Заранее спасибо!
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Хм... :) Вот и мне не понятно... зачем велосипеды изобретать, когда MyDAC все это (XML -экспорт/импорт) сам прекрасно умеет делать...
    http://www.devart.com/mydac/features.html
     
  3. ProESM

    ProESM Гость

    А есть примеры импорта XML через MyDAC? Что-то не найду
     
  4. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    А справку почитать? А примеры (родные MyDAC-овские) в код посмотреть? :)
    Код (Delphi):
    // кладем на форму 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?
    Этож их прямая задача - сохранять и восстанавливать таблицы...
     
  5. ProESM

    ProESM Гость


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

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

Поделиться этой страницей