2017-01-25 10 views
0
Dim Rs As New `Adodb.Recordset` 
Rs.Open "select * from Customer ",Conn,adOpenDynamic,adLockOptimistic 
if Rs.RecordCount > 0 then 
    rs.Save App.Path & "\Customer.xml" , adPersistXML 
end if 

問題は、レコードがNULLで、データがxmlに格納されていない場合です。VB 6.0でレコードセットからXMLにデータを保存

したがって、保存されたすべてのデータをnullを含むxmlデータにする方法。

答えて

0

もし私たちが私たちにXML構造を示すことができれば、もっと役に立つでしょう。 nullをXMLに直接格納することはできません。しかし、あなたは

  • メイク属性ヌルとさせていただきます2つのオプション

    • 不足しているタグのいずれかを持っている真= NULLに

  • 0

    あなたがXMLとしてエクスポートするnull値を強制することはできませんそうですね。 ADO行セットスキーマは、意図的に「省略」するように設計されています。

    作成する特定のスキーマも指定しませんでしたが、必要に応じて簡単にADOスキーマを模倣することができます。

    最高の方法は、プロセスを自分で管理することです。私はここにADOスキーマを模倣するために気にしませんでしたがここではSAXの例である:

    Option Explicit 
    ' 
    'Requires references to: 
    ' 
    ' Microsoft ActiveX Data Objects, version 2.5 or later. 
    ' Microsoft XML 6.0, can be rewritten to use 3.0 as well. 
    ' 
    
    Private Enum HRESULT 
        S_OK = 0 
    End Enum 
    
    Private Enum STGM 
        STGM_READ = &H0& 
        STGM_WRITE = &H1& 
        STGM_READWRITE = &H2& 
        STGM_SHARE_EXCLUSIVE = &H10& 
        STGM_SHARE_DENY_WRITE = &H20& 
        STGM_SHARE_DENY_READ = &H30& 
        STGM_SHARE_DENY_NONE = &H40& 
        STGM_FAILIFTHERE = &H0& 
        STGM_CREATE = &H1000& 
    End Enum 
    
    Private Declare Function SHCreateStreamOnFile Lib "shlwapi" _ 
        Alias "SHCreateStreamOnFileW" (_ 
        ByVal pszFile As Long, _ 
        ByVal grfMode As STGM, _ 
        ByRef stm As IUnknown) As HRESULT 
    
    Private Sub CustomSaveXML(_ 
        ByVal Recordset As ADODB.Recordset, _ 
        ByVal FilePath As String) 
        Dim Stream As IUnknown 
        Dim HRESULT As HRESULT 
        Dim Attributes As SAXAttributes60 
        Dim Writer As MSXML2.MXXMLWriter60 
        Dim Handler As MSXML2.IVBSAXContentHandler 
        Dim Field As ADODB.Field 
        Dim StringValue As String 
    
        Set Stream = Nothing 'Force creation on 64-bit Windows. Not sure why 
             'this is required or why it works. 
        HRESULT = SHCreateStreamOnFile(StrPtr(FilePath), _ 
                STGM_CREATE _ 
               Or STGM_WRITE _ 
               Or STGM_SHARE_EXCLUSIVE, _ 
                Stream) 
        If HRESULT <> S_OK Then 
         Err.Raise &H80044900, _ 
            "CustomSaveXML", _ 
            "SHCreateStreamOnFile error " & Hex$(HRESULT) 
        End If 
        Set Attributes = New MSXML2.SAXAttributes60 
        Set Writer = New MSXML2.MXXMLWriter60 
        Set Handler = Writer 
        With Writer 
         .omitXMLDeclaration = True 
         .standalone = True 
         .disableOutputEscaping = False 
         .indent = True 
         .encoding = "utf-8" 
         .output = Stream 
        End With 
        With Handler 
         .startDocument 
         .startElement "", "", "data", Attributes 
         Do Until Recordset.EOF 
          With Attributes 
           For Each Field In Recordset.Fields 
            Select Case VarType(Field.Value) 
             Case vbNull 
              'Force as empty String: 
              StringValue = "" 
             Case vbString 
              StringValue = Field.Value 
             Case Else 
              'This converts to a String value using the 
              'Invariant Locale: 
              StringValue = LTrim$(Str$(Field.Value)) 
            End Select 
            .addAttribute "", "", Field.Name, "", StringValue 
           Next 
          End With 
          .startElement "", "", "row", Attributes 
          .endElement "", "", "row" 
          Attributes.Clear 
          Recordset.MoveNext 
         Loop 
         .endElement "", "", "data" 
         .endDocument 
        End With 
    End Sub 
    
    Private Sub Main() 
        Dim RS As ADODB.Recordset 
    
        With New ADODB.Connection 
         .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='.';" _ 
           & "Extended Properties='Text;CSVDelimited=True;Hdr=True'" 
         Set RS = .Execute("sample.csv", , adCmdTableDirect) 
         CustomSaveXML RS, "sample2.xml" 
         RS.Close 
         .Close 
        End With 
    End Sub 
    

    入力データ:

    LongVal,StringVal,DoubleVal 
    65536,Fred,3.5 
    ,Has-Null,1.23456 
    65537,Barney,37 
    

    出力XML:

    <data> 
        <row LongVal="65536" StringVal="Fred" DoubleVal="3.5"/> 
        <row LongVal="" StringVal="Has-Null" DoubleVal="1.23456"/> 
        <row LongVal="65537" StringVal="Barney" DoubleVal="37"/> 
    </data> 
    

    あなたは可能性もbrute-物事を強制し、従来のロジックと組み込みのVB6 I/Oステートメントを使用してファイルとして書き出します。真のUTF-8出力が必要な場合や、XMLスキーマがより複雑な場合はちょっとトリッキーです。

    +0

    サーバーブ77 .. あなたはメールを持っていますか? –

    +0

    現在就職活動は行っていません。 – Bob77

    関連する問題