Prikazi cijelu temu 12.12.2015 22:03
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Lokacija:Tuzla


Predmet:Re: Kako uvesti podatke iz XML-a
Evo ti .
Nisam testirao pa ti malo istestiraj.
Ne zaboravi na pocetku upisati putanju do fajla u kontsantu ili pak tu napravi kod za ucitavanje fajla a mozda do i imas.
Ako hoces da ucitavas imam jakod ako nemas.
PreuzmiIzvorni kôd (Visual Basic):
  1. Option Compare Database
  2. Option Explicit
  3. Const Putanja = "c:\_Forum\Obrada\bbb.txt" ' putanja do fajla
  4. Dim Db As Database
  5. Dim Rs As Recordset
  6. Dim tdf As TableDef
  7. Dim fld As Field
  8. Function ImportXML()
  9. Dim ImeTabele As String, temp As String
  10. Dim Poz As Integer, I As Integer
  11.  
  12. ImeTabele = "program"
  13. I = 1
  14. Set Db = CurrentDb
  15. Close #1
  16. Open Putanja For Input As 1
  17. While Not EOF(1)
  18. Line Input #1, temp
  19. Poz = InStr(1, temp, ImeTabele)
  20.  If Poz > 0 Then
  21.   If ImeTabele = "<tabela" Or ImeTabele = "podaci godina" Then
  22.   ImeTabele = temp
  23.   End If
  24.   Call PripremiTabelu(ImeTabele)
  25.   If I < 4 Then
  26.   I = I + 1
  27.   End If
  28.   ImeTabele = Choose(I, "program", "subjekt", "podaci godina", "<tabela")
  29.  End If
  30. Wend
  31. Close #1
  32. End Function
  33.  
  34. Private Sub PripremiTabelu(ImeT)
  35. Dim Podatak As String, Tabela As String
  36. Dim I As Integer, Poz(2) As Integer
  37.  
  38. Poz(0) = InStr(1, ImeT, "tabela")
  39. Poz(1) = InStr(1, ImeT, "podaci godina")
  40.     If Poz(0) > 0 Then
  41.         Poz(1) = InStr(1, ImeT, "=") + 2
  42.         Poz(2) = InStr(1, ImeT, ">") - 1
  43.         Tabela = Mid(ImeT, Poz(1), Poz(2) - Poz(1))
  44.         ImeT = "tabela"
  45.         Set tdf = Db.CreateTableDef(Tabela)
  46.         Set fld = tdf.CreateField("ID", dbText, 6)
  47.         tdf.Fields.Append fld
  48.     ElseIf Poz(1) > 0 Then
  49.         Dim Podatak2 As String
  50.         Poz(0) = InStr(1, ImeT, "godina=") + 8
  51.         Poz(1) = InStr(1, ImeT, "period=") - 2
  52.         Poz(2) = InStr(1, ImeT, ">") - 11
  53.         Podatak = Mid(ImeT, Poz(0), Poz(1) - Poz(0))
  54.         Podatak2 = Mid(ImeT, Poz(1) + 10, Poz(2) - Poz(1))
  55.         ImeT = "podaci godina"
  56.         Set tdf = Db.CreateTableDef(ImeT)
  57.         Set fld = tdf.CreateField("ID", dbText, 6)
  58.         tdf.Fields.Append fld
  59.     Else
  60.         Set tdf = Db.CreateTableDef(ImeT)
  61.         Set fld = tdf.CreateField("ID", dbLong)
  62.         fld.Attributes = dbAutoIncrField
  63.         tdf.Fields.Append fld
  64.     End If
  65.     On Error Resume Next
  66.     Db.TableDefs.Append tdf
  67.     If Err.Number = 3010 Then
  68.     Err.Clear
  69.     On Error GoTo 0
  70.     DoCmd.DeleteObject acTable, tdf.Name
  71.     Db.TableDefs.Append tdf
  72.     ElseIf Err.Number > 0 Then
  73.     MsgBox "DoÅ¡lo je do greÅ¡ke"
  74.     End
  75.     End If
  76.  
  77. Select Case ImeT
  78.  
  79. Case "Program"
  80. tdf.Fields.Append tdf.CreateField("Verzija", dbText, 50)
  81. Podatak = UcitajP
  82. Set Rs = Db.OpenRecordset(ImeT)
  83. Rs.AddNew
  84. Rs.Fields(1) = Podatak
  85. Rs.Update
  86. Rs.Close
  87. Set tdf = Nothing
  88. Case "Subjekt"
  89. tdf.Fields.Append tdf.CreateField("id_broj", dbText, 13)
  90. tdf.Fields.Append tdf.CreateField("cert_racunovodja", dbText, 20)
  91. tdf.Fields.Append tdf.CreateField("cert_rac_lic", dbText, 15)
  92. tdf.Fields.Append tdf.CreateField("email", dbText, 50)
  93. tdf.Fields.Append tdf.CreateField("pvelicina", dbText, 15)
  94. tdf.Fields.Append tdf.CreateField("velicina", dbText, 15)
  95. Set Rs = Db.OpenRecordset(ImeT)
  96. Rs.AddNew
  97. For I = 1 To 6
  98. Podatak = UcitajP
  99. If Trim(Podatak) <> "" Then
  100. Rs.Fields(I) = Podatak
  101. End If
  102. Next I
  103. Rs.Update
  104. Rs.Close
  105. Case "podaci godina"
  106. tdf.Fields.Append tdf.CreateField("godina", dbText, 4)
  107. tdf.Fields.Append tdf.CreateField("period", dbText, 20)
  108. Set Rs = Db.OpenRecordset(ImeT)
  109. Rs.AddNew
  110. Rs.Fields(1) = Podatak
  111. Rs.Fields(2) = Podatak2
  112. Rs.Update
  113. Rs.Close
  114. Case "Tabela"
  115. Dim Naziv As String, Podatak1 As String, temp As String
  116. Dim Nazivi As String
  117. If Tabela = "promjene_u_kapitalu" Then
  118. tdf.Fields.Append tdf.CreateField("DK", dbSingle)
  119. tdf.Fields.Append tdf.CreateField("RR", dbSingle)
  120. tdf.Fields.Append tdf.CreateField("ND", dbSingle)
  121. tdf.Fields.Append tdf.CreateField("OR", dbSingle)
  122. tdf.Fields.Append tdf.CreateField("AND", dbSingle)
  123. tdf.Fields.Append tdf.CreateField("U", dbSingle)
  124. tdf.Fields.Append tdf.CreateField("MI", dbSingle)
  125. tdf.Fields.Append tdf.CreateField("UK", dbSingle)
  126. Else
  127. tdf.Fields.Append tdf.CreateField("bruto", dbSingle)
  128. tdf.Fields.Append tdf.CreateField("ispravka", dbSingle)
  129. tdf.Fields.Append tdf.CreateField("tekuca_godina", dbSingle)
  130. tdf.Fields.Append tdf.CreateField("prosla_godina", dbSingle)
  131. End If
  132. Set Rs = Db.OpenRecordset(Tabela)
  133. Line Input #1, temp
  134. Nazivi = ""
  135. Rs.AddNew
  136. Do While InStr(1, temp, "</tabela") = 0
  137. Nazivi = Nazivi & Naziv
  138. UpisPod temp, Naziv, Podatak, Podatak1
  139. If InStr(1, Nazivi, Naziv) > 0 Then
  140. Rs.Update
  141. Rs.AddNew
  142. Nazivi = ""
  143. End If
  144. Rs.Fields(0) = Val(Podatak)
  145. Rs(Naziv) = Val(Podatak1)
  146. Line Input #1, temp
  147. Loop
  148. Rs.Close
  149. End Select
  150.  
  151. End Sub
  152.  
  153. Private Sub UpisPod(temp, Naziv, Podatak, Podatak1)
  154. Dim Poz(4) As Integer
  155. Poz(0) = InStr(1, temp, "aop id=") + 8
  156. Poz(1) = InStr(1, temp, "kolona=") - 2
  157. Poz(2) = InStr(1, temp, "kolona=") + 8
  158. Poz(3) = InStr(1, temp, ">") - 1
  159. Poz(4) = InStr(1, temp, "</")
  160. Podatak = Mid(temp, Poz(0), Poz(1) - Poz(0))
  161. Naziv = Mid(temp, Poz(2), Poz(3) - Poz(2))
  162. Podatak1 = Mid(temp, Poz(3) + 2, Poz(4) - Poz(3) - 2)
  163. End Sub
  164. Function UcitajP() As String
  165. Dim temp As String
  166. Dim Poz(1) As Integer
  167.  
  168. Line Input #1, temp
  169. Poz(0) = InStr(1, temp, ">") + 1
  170. Poz(1) = InStr(1, temp, "</")
  171. UcitajP = Mid(temp, Poz(0), Poz(1) - Poz(0))
  172. End Function

Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.