Toon posts:

[ XML ] XML weer naar ADO

Pagina: 1
Acties:

Verwijderd

Topicstarter
*D

Ik zit een beetje met een probleem. We zetten databases van klanten om naar XML ( ADO kan van een recordset heel makkelijk een XML document maken ). Vervolgens willen we SOAP enzo gaan gebruiken om die gegevens van de klant ( artikkelen, orders, etc ), weer in onze database weg te laten schrijven. Dus het XML moet weer naar onze SQL Server 7 database.

Leuk dat ADO van recordsets XML kan maken, maar ongekeerd lukt ( mij ) niet. Weet iemand een zinnige manier om een XML database weer terug te plaatsen?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
apottjewijd: Leuk dat ADO van recordsets XML kan maken, maar ongekeerd lukt ( mij ) niet. Weet iemand een zinnige manier om een XML database weer terug te plaatsen?
Je hebt daarvoor een specificatie nodig die het XML model en het relationele model aan elkaar breidt. Je kunt dit op een hoop manieren doen: zelf de XML inlezen en handmatig omzetten naar records, een specificatie taal gebruiken zoals in DB2 of een transformatie uitvoeren op de XML data die de data transformeert naar records... Wat wil je dus precies?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Even in lokale MSDN gezocht...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Public Sub SaveRecordset()
    Dim rst As ADODB.Recordset
    Dim strFile As String
   
    Set rst = New ADODB.Recordset
   
    ' Open the recordset from the database
    rst.Open "tblCustomers", CurrentProject.Connection, _
     adOpenStatic, adLockOptimistic
   
    ' Construct a file name to use
    strFile = CurrentProject.Path & "\Customers.adtg"
   
    ' Destroy any existing file
    On Error Resume Next
    Kill strFile
    Err.Clear
   
    ' Now save the recordset to disk
    rst.Save strFile, adPersistADTG
    ' Close the recordset in memory
    rst.Close
End Sub

Public Sub RetrieveRecordset()
    Dim rst As ADODB.Recordset
    Dim strFile As String
   
    Set rst = New ADODB.Recordset
   
    ' Construct a file name to use
    strFile = CurrentProject.Path & "\Customers.adtg"
   
    ' Make sure the file exists
    If Len(Dir(strFile)) > 0 Then
      ' Open the recordset from the file
      rst.Open strFile, , adOpenStatic, adLockOptimistic
      ' Show that we've got data
      Debug.Print rst.Fields("ContactTitle")
      ' Reconnect the recordset to the database
      rst.ActiveConnection = CurrentProject.Connection
      ' Make a change and save it
      rst.Fields("ContactTitle") = "Sales Rep"
      rst.Update
    End If
    rst.Close
    Set rst = Nothing
End Sub

Ze hebben het hier over adtg files (adPersistADTG) maar het lijkt me dat het met xml ook moet werken.

Exact expert nodig?


Verwijderd

Topicstarter
Op dinsdag 08 januari 2002 12:54 schreef mbravenboer het volgende:

[..]

Je hebt daarvoor een specificatie nodig die het XML model en het relationele model aan elkaar breidt. Je kunt dit op een hoop manieren doen: zelf de XML inlezen en handmatig omzetten naar records, een specificatie taal gebruiken zoals in DB2 of een transformatie uitvoeren op de XML data die de data transformeert naar records... Wat wil je dus precies?
Zelf de XML inlezen en aan elkaar breiden heb ik al aan gedacht, maar dat is best wel intensief, helemaal omdat wij ook een XML schema ( DTD ) hebben, moet het volgens mij toch 'directer' mogelijk zijn om het daardoor ook flexibeler op te kunnen zetten.

Het liefst wil ik dus van het XML document gewoon weer een ADO database maken om dan gewoon insert into queries uit te kunnen voeren.

Verwijderd

Zoek op in de MSDN library :

Convert ADO Recordsets to XML with our WSC Component

Code in het artikel. Copy/paste en klaar.

Verwijderd

Topicstarter
Op dinsdag 08 januari 2002 14:10 schreef FRANS BOUMA :) het volgende:
Zoek op in de MSDN library :

Convert ADO Recordsets to XML with our WSC Component

Code in het artikel. Copy/paste en klaar.
Nee, dat is van ADO naar XML :'(, daar zit het internet vol mee, ik moet juist die slag omgekeerd maken, ik heb XML en wil een ADO database.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Nou wil ik niet ongeduldig doen, maar uhhh werkte die code die uit MSDN had gecopy-paste niet?

Exact expert nodig?


Verwijderd

Topicstarter
Op dinsdag 08 januari 2002 14:40 schreef CrazyD_at_work het volgende:
Nou wil ik niet ongeduldig doen, maar uhhh werkte die code die uit MSDN had gecopy-paste niet?
In het rood:
Apottjewijd geeft CrazyD_at_work een dikke zoek.
einde in het rood.

Ik was je tip alweer helemaal vergeten. Moet wel even wat extra info bij, het kan ( volgens mij ) alleen nog maar als je XML echt goed is opgemaakt, anders krijg je problemen, maar als het XML document met bijvoorbeeld ADO ook is aangemaakt, heeft ie geen probleem hem ook weer in te lezen op de manier die je omschreef.

Thnx!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op dinsdag 08 januari 2002 14:52 schreef apottjewijd het volgende:
In het rood:
Apottjewijd geeft CrazyD_at_work een dikke zoek.
einde in het rood.
/me bloost :P
Ik was je tip alweer helemaal vergeten. Moet wel even wat extra info bij, het kan ( volgens mij ) alleen nog maar als je XML echt goed is opgemaakt, anders krijg je problemen, maar als het XML document met bijvoorbeeld ADO ook is aangemaakt, heeft ie geen probleem hem ook weer in te lezen op de manier die je omschreef.
Tjah het komt uit MSDN dus is het _net_ niet rechstreeks bruikbaar :P Maar wel handig om te weten dat het bruikbaar is :) (kwou er nog wel naar kijken maar die !@#*(&$(@ blijft maar rinkelen hier :()

Exact expert nodig?


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
apottjewijd: het kan ( volgens mij ) alleen nog maar als je XML echt goed is opgemaakt, anders krijg je problemen
Tja, wat is 'goed' ;) . Vanuit het oogppunt van XML zou ik dat waarschijnlijk niet direct goed willen noemen. Een rechtstreekse vertaling van een record-set naar XML levert in principe geen XML structuren op waar je echt vrolijk van wordt. Als je fraaiere structuren wilt gebruiken of vast zit aan een of andere standaard of afspraak moet je de zaak dus gaan transformeren/inlezen/watdanook zoals ik in m'n eerste reply zei...
maar als het XML document met bijvoorbeeld ADO ook is aangemaakt, heeft ie geen probleem hem ook weer in te lezen op de manier die je omschreef.
Als je een record-set serializeert en datzelfde formaat weer inleest gaat dat inderdaad best, maar deze xml voldoet dan wel aan een bepaald schema. Het is dus zeker geen generieke oplossing om XML in te lezen,wat uiteraard ook niet mogelijk is zonder meer werk en specificaties ... :)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op dinsdag 08 januari 2002 15:09 schreef mbravenboer een heel zinnig stuk.
En je hebt inderdaad gelijk. Er moet een schema definitie zijn. Iets als:

<?xml version="1.0" encoding="UTF-8"?>
<!--XML-Data generated by XML Spy v4.0.1 U (http://www.xmlspy.com)-->
<Schema name="Untitled-schema" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="ADVERTISEMENTGROUPS" model="closed" content="eltOnly" order="seq">
<AttributeType name="xmlns" dt:type="string"/>
<attribute type="xmlns"/>
<group minOccurs="1" maxOccurs="1" order="seq">
<element type="AG_ID" minOccurs="1" maxOccurs="1"/>
<element type="NAME" minOccurs="1" maxOccurs="1"/>
<element type="SH_SH_ID" minOccurs="1" maxOccurs="1"/>
<element type="PARENT_AG_AG_ID" minOccurs="1" maxOccurs="1"/>
<element type="MINIMUM_PRODUCTLEVEL" minOccurs="1" maxOccurs="1"/>
<element type="MASTERTEXT" minOccurs="1" maxOccurs="1"/>
<element type="TRANSLATION_1" minOccurs="1" maxOccurs="1"/>
<element type="TRANSLATION_2" minOccurs="1" maxOccurs="1"/>
<element type="TRANSLATION_3" minOccurs="1" maxOccurs="1"/>
<element type="TRANSLATION_4" minOccurs="1" maxOccurs="1"/>

</ElementType>
</Schema>

*D Zulke zooi is makkelijk aan te maken met bijvoorbeeld XML Spy. Dit defineerd hoe je database velden zijn opgemaakt ( lengte, verplichte invoer, etc, etc ). I.p.v. zo'n schema kan je ook een DTD file gebruiken ( Data Type Definition ).

Je row namen komen overeen met namen uit het schema, zodat XML weet hoe die opgemaakt dienen te worden. Vervolgens weet ADO dus ook hoe hij het recordset moet structureren. Het enigste is dat je geen moeilijke connectionstring nodig hebt ( waar ik het aan het zoeken was ), maar dat je gewoon de file kan openen.

*D Bedank voor de info!

Verwijderd

fok, idd, dat is van ADO naar XML en dat heb je in 1 minuut zelf geschreven of als je die verschrikkelijke ADO schema's wilt gebruiken, middels de .save method zo voor elkaar.

Met dat stream object lukt het ook niet?
Pagina: 1