LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Добавление данн...
 Добавление данных из XML-файла в таблицу...
 
 11.01.2011 0:06:01
АлексБ
24 сообщения


Добавление данных из XML-файла в таблицу...

Здрастье. Надеюсь, праздники у вас уже закончились и были удачными?

Вопрос следующий: программа читает XML-файл и в переменную strPOLYA собирет названия полей (тэгов) (например strPOLYA = 'Pole1, Pole2, ..., PoleN'),  а в переменную strVALUES собираются значения данных полей (тэгов). Когда пробегается полность одна запись создается переменная для добавления данных в таблицу:

strSQL = "INSERT INTO " & Tablica & " (" & strPOLYA & ") VALUES (" & strVALUES & ");"

Application.CurrentDb.Execute strSQL, dbFailOnError

Всё бы хорошо, но количество полей колеблется от 150 до 200, а про длину переменной strVALUES я просто боюсь предсказать длину (многие поля текстовые и длиной не менее 50, а есть еще и поля типа MEMO).

Каким образом можно добавить данные из XML-файла (каждую запись в отдельности) в таблицу?

(Двигаться по тэгам XML-файла я уже научился, использую childNodes, hasChildNodes и т.д.)

 11.01.2011 17:30:19
Admin1
731 сообщения
1-ый


Re: Добавление данных из XML-файла в таблицу...

1. Для записи в базу данных используется функция DAO или ADO. 

2. Вот пример из программы импорта данных xml http://www.leadersoft.ru/Rus/Market/db/Default.aspx?go=product&pid=400 Суть алгоритма. Создаем переменную типа xml_program и в нее загружаем данные некоторого узла. Далее все из переменной сохраняем в файл (Используется пример для сложного файла allsoft.xml с программами, ценами и версиями)

' Определяем типы переменных, куда будем считывать данные
' В обратном порядке для встроенных типов цена - версия - программа

' Цены программы
Public Type xml_price
    id As Long
    name As String
    url As String
    range_name As String
    value As String
End Type

' Версия программы
Public Type xml_version
    id As Long
    url As String
    name As String
    fullname As String
    image As String
    description As String
    downurl As String
    os As String
    license_type As Long
    cdate As String
    screens() As String ' Картинки программы
    prices() As xml_price ' Цены
End Type

' Базовая программа
Public Type xml_program
    id As Long
    name As String
    image As String
    full_desc As String
    short_desc As String
    url As String
    vendor As String
    categories() As Long ' Категории программы
    versions() As xml_version ' Версии программы
End Type


' Сохраняем данные в таблицах Текущей или удаленной базы
Public Function SaveData(pr As xml_program, Optional FileMdb As String = "") As Variant
    On Error GoTo 999
   
    Dim dbs As dao.Database, rst As dao.Recordset, r2 As dao.Recordset, prc As xml_price
   
    If FileMdb = "" Then
        ' Текущая база
         Set dbs = CurrentDb
    Else
        ' Открываем удаленную базу
        Set dbs = DBEngine.OpenDatabase(FileMdb, , True)
    End If
   
    ' 1. Сохраняем данные по программе allsoft.ru
    Set rst = dbs.OpenRecordset("SELECT * FROM AllsoftOffers WHERE OfferID=" & pr.id)
    With rst
        If .RecordCount = 0 Then
            .AddNew
        Else
            .Edit
        End If
        !OfferID = pr.id
        !name = pr.name
        !image = pr.image
        !url = pr.url
        !vendor = pr.vendor
        !full_desc = pr.full_desc
        !short_desc = pr.short_desc
        .Update
    End With
    rst.Close
    Set rst = Nothing
   
    ' 2. Сохраняем данные по категориям allsoft.ru
    Set rst = dbs.OpenRecordset("SELECT * FROM AllsoftCategories WHERE OfferID=" & pr.id)
    Dim cat As Variant
    With rst
        For Each cat In pr.categories
            rst.Filter = "id=" & cat
            If .RecordCount = 0 Then
                .AddNew
            Else
                .Edit
            End If
            !OfferID = pr.id
            !id = cat
            .Update
        Next
    End With
    rst.Close
    Set rst = Nothing
   
    ' 3. Сохраняем данные по версиям allsoft.ru
    Set rst = dbs.OpenRecordset("SELECT * FROM AllsoftVersions WHERE OfferID=" & pr.id)
    With rst
        Dim ver As xml_version, m As Long, n As Long
        For m = 0 To UBound(pr.versions)
            ver = pr.versions(m)
            rst.Filter = "id=" & ver.id
            If .RecordCount = 0 Then
                .AddNew
            Else
                .Edit
            End If
            !OfferID = pr.id
            !VersionID = ver.id
            !name = ver.name
            !description = ver.description
            !os = ver.os
            !downurl = ver.downurl
            !license_type = ver.license_type
            !fullname = ver.fullname
            !image = ver.image
            !cdate = ver.cdate
            .Update
           
            ' 3-1. Сохраняем данные по картинкам allsoft.ru
            Set r2 = dbs.OpenRecordset("SELECT * FROM AllsoftScreens WHERE versionid=" & ver.id)
            Dim scr As Variant
            For Each scr In ver.screens
                r2.Filter = "versionid=" & ver.id & " And Screen='" & scr & "'"
                If r2.RecordCount = 0 Then
                    r2.AddNew
                Else
                    r2.Edit
                End If
                r2!VersionID = ver.id
                r2!screen = scr
                r2.Update
            Next
            r2.Close
            Set r2 = Nothing
           
            ' 3-2. Сохраняем данные по ценам allsoft.ru
            Set r2 = dbs.OpenRecordset("SELECT * FROM AllsoftPrices WHERE versionid=" & ver.id)
            For n = 0 To UBound(ver.prices)
                prc = ver.prices(m)
                r2.Filter = "versionid=" & ver.id & " And priceid='" & prc.id & "'"
                If r2.RecordCount = 0 Then
                    r2.AddNew
                Else
                    r2.Edit
                End If
                r2!VersionID = ver.id
                r2!PriceID = prc.id
                r2!name = prc.name
                r2!range_name = prc.range_name
                r2!url = prc.url
                r2!value = prc.value
                r2.Update
            Next
            r2.Close
            Set r2 = Nothing
        Next
    End With
    rst.Close
    Set rst = Nothing
   
    ' Закрываем базу
    If FileMdb <> "" Then dbs.Close
    Set dbs = Nothing
   
    Exit Function
999:
    MsgBox Err.description, vbCritical, "Admin"
    Err.Clear
End Function

  Программирование  Microsoft Access. Файлы mdb и accdb  Добавление данн...
ПоискПоиск  Список форумовСписок форумов  
right