|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Экспорт из XML в Access
Доброго времени суток!!
Уважаемые форумчане помогите, пожалуйста с моей проблемой: Мне поступают XML-файлы для загрузки в основную БД. Количество строк в файлах может быть от одной до нескольких десятков тысяч. Файлы содержат логические, текстовые и цифровые данные. Также в данных могут быть ошибки и для их исправления приходится вручную колупать основную БД. Это очень тяжело и трудоемко. Я хочу сделать утилиту для проверки данных в файлах. Для этого загрузить данные во временную БД (например Access), проверить и очистить БД. Изменять и переписывать в XML-файлах ничего не нужно. Структуру файлов тоже изменить не могу. Саму БД сделаю заранее и поля в ней будут соответствовать тегам XML-файла. Подскажите с помощью каких инструментов в Delphi и какими методами сделать загрузку данных из XML-файлов! В интернете роюсь уже несколько дней и ничего подходящего не нашел. Я не профессиональный программист и в Delphi не очень силен. Пытаюсь разораться самостоятельно, потому опишите подсказки по подробней или дайте рабочий текст кода (если это не тяжело). Помогите, пожалуйста, очень нужно!!! У меня стоит Win XP SP2 и Delphi 7. Урезанный пример XML-файла прикрепил к теме. Огромное спасибо за помощь. |
#2
|
|||
|
|||
Ну если просто перечислить, то:
1. ADOQuery (и с ним другие ADO компоненты) - работы с БД 2. TXMLDocument - чтение xml 3. Прямые руки - написание связующего кода 4. Книжка по проектированию БД (не обязательно, но полезно будет, т.к. у тебя там как минимум 2 таблицы получаются. Или заголовок не нужен, а только сами табличные данные?) |
#3
|
|||
|
|||
С ADO сталкивался (должен разобраться).
А вот о TXMLDocument - чтение xml можно по подробней рассказать. Я уже натыкался на него в инете, но как его использовать не разберу и описания не нашел. Дайте, плиз, ссылки на книги-статьи где все это можно прочитать подробно. С написанием кода как раз и есть проблемы. В принципе нужны только данные. Или вставлять для каждой записи в таблице данные из заголовка (так получается если открываю файл в Excel). Спасибо! |
#4
|
||||
|
||||
проще говоря тебе нужно все <ROW></ROW> в таблицу бд загнать?
добавлено позже: кста, твой test.xml "корявенький". его ни браузер, ни TXMLDocument не открывает - нужно будет "предварительно руками" исправлять ошибки. Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 02.09.2011 в 09:24. |
#5
|
||||
|
||||
Можно поступить попроще. Открыть ваш xml файл в экселе. При этом вы получите результат в табличном виде, а уже таблицу то вы сможете в акцес принять.
ПС: Хотя нет, эксель ваш файл не сможет открыть правильно. Видимо действительно TXMLDocument использовать надо. ПСС: Мда блин. В общем получается такая хрень, как я понял документ ваш подготовлен с учетом формата XML который появляется в Net Framework 4.0. Думал в семерке будет без проблем его открыть, тоже не вышло. TXMLDocument тоже не удалось натравить на ваш файл видимо по той-же причине. Не установлен Net Framework 4.0 Можно конечно и ручками все распарсить, но как-то стремно. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 02.09.2011 в 10:12. |
#6
|
|||
|
|||
Да все верно: мне нужно все <ROW></ROW> в таблицу БД загрузить.
А файл кривой наверно я сделал, когда урезал данные в нем. Прикрепил новый. В Excel-е открывается так как нужно. Страдалецъ Открывать через Excel я думал, но возможно ли это сделать программно в утилите? Или опять таки вручную открывать сохранять и загружать в Акцес. Я сейчас и так проверяю их в Excel-е вручную. Глаза рвать целый день - утомительно. Хочу все сделать автоматом: по нажатии кнопки провести проверку и если есть ошибки вернуть файл со списком ошибок для исправления. |
#7
|
||||
|
||||
А где описатель схемы E04T06D.xsd к этому файлу?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
||||
|
||||
вот один из вариантов:
Код:
type TForm1 = class(TForm) Button1: TButton; DataSource1: TDataSource; ClientDataSet1: TClientDataSet; DBGrid1: TDBGrid; OpenDialog1: TOpenDialog; XMLDocument1: TXMLDocument; var l: Integer; i: Integer; ADOMNodeList: IDOMNodeList; ADOMNode: IDOMNode; j: Integer; begin if OpenDialog1.Execute then begin XMLDocument1.LoadFromFile(OpenDialog1.FileName); ADOMNodeList:=XMLDocument1.DOMDocument.getElementsByTagName('ROW'); l:=ADOMNodeList.length; for i:=0 to l-1 do begin ADOMNode:=ADOMNodeList.item[i]; if i=0 then begin ClientDataSet1.FieldDefs.Clear; for j:=0 to ADOMNode.childNodes.length-1 do begin ClientDataSet1.FieldDefs.Add(ADOMNode.childNodes.item[j].nodeName, ftString, 10); end; ClientDataSet1.CreateDataSet; end; ClientDataSet1.Append; for j:=0 to ADOMNode.childNodes.length-1 do begin if ADOMNode.childNodes.item[j].childNodes.length>0 then ClientDataSet1.FieldByName(ADOMNode.childNodes.item[j].nodeName).AsString:= ADOMNode.childNodes.item[j].childNodes.item[0].nodeValue else if ADOMNode.childNodes.item[j].attributes.length>0 then ClientDataSet1.FieldByName(ADOMNode.childNodes.item[j].nodeName).AsString:= ADOMNode.childNodes.item[j].attributes.item[0].nodeValue; end; ClientDataSet1.Post; end; end; Пишу программы за еду. __________________ |
#9
|
|||
|
|||
сколько готов заплатить?
|
#10
|
|||
|
|||
Цитата:
Да! Это то что нужно!! Примерно понял как нужно делать, теперь буду подстраивать под свою утилиту. Спасибо, огромное NumLock за помощь!!! P.S. Хотел еще вот что спросить: читал в сети, что с XML-файлами можно работать как с готовой таблицей БД. Так ли это? В чем отличия от работы с СУБД Access или другими? Есть ли преимущества? Слишком это сложно? Вопросы чисто для спортивного интереса, свою программку буду делать на том, что знаю... Спасибо! Последний раз редактировалось manco, 04.09.2011 в 00:13. |
#11
|
||||
|
||||
да, xml можно запросто использовать для хранения данных. TClientDataSet к примеру умеет это делать.
Пишу программы за еду. __________________ |