![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток!!
Уважаемые форумчане помогите, пожалуйста с моей проблемой: Мне поступают 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 к примеру умеет это делать.
|