将三个字段,5000条记录的小型数据库写入字符串表格,有何高招???

解决方案 »

  1.   

    用.net倒是有方法 批量插入字符串资源到资源文件,VB的我UP
      

  2.   

    我的机子是vb6.0。多谢大家,打包时不愿意添加DAO,ADO连接库之类,所以想用纯粹字符串的操作完成查询,修改等功能(三个字段均为字符串型)。另一个问题就是生成用于编译的*.rc文件采用什么编排格式?
      

  3.   

    生成资源文件的代码,这段代码你不能完全照搬,因为我当时需要在资源文件中同时写入Big5和GB码的汉字,所以对Big5码作了一些处理,你可以把这段去掉另处,如果你不了解资源文件的格式,可能也需要多调试一下。Private Sub SaveResFile(ByVal FileName As String)
        On Error GoTo Err
        
        '保存资源文件
        Dim lngFile         As Long
        Dim bytFix(31)      As Byte
        Dim bytHeader(31)   As Byte
        Dim lngX            As Long
        Dim strFix          As String
        Dim lngRow          As Long
        Dim lngID           As Long
        Dim strMsg          As String
        Dim lngDataSize     As Long             '数据区大小,文件中的Datasize
        Dim lngResName      As Long             '资源项标识符
        Dim lngPad          As Long             '标识符补0的开始位置
        Dim bytData()       As Byte             '资源数据
        Dim bytBig5()       As Byte             'Big5 Unicode码
        Dim lngRealSize     As Long             '数据区的真实大小
        Dim lngResi         As Long
        Dim lngHi           As Long
        Dim lngLo           As Long
        Dim strTable        As Variant
        Dim lngGroup        As Long
        Dim lngCount        As Long
        Dim lngHeader       As Long
        Dim lngTotal        As Long
        Dim lngResCount     As Long             '每个资源组的资源项数
        Dim lngPadCount     As Long             '已补字节数
        
        lngFile = FreeFile
        If Dir(FileName) <> "" Then
            Kill FileName
        End If
        '首32位固定字节
        strFix = "0000000020000000FFFF0000FFFF000000000000000000000000000000000000"
        
        For lngX = 1 To 32
            bytFix(lngX - 1) = Val("&h" & Mid(strFix, lngX * 2 - 1, 2))
        Next
        strTable = GetStringTable           '获得要写入的字符串
        Open FileName For Binary As #lngFile
        Put #lngFile, , bytFix
        
        '资源组数量
        lngGroup = UBound(strTable, 3)
        
        For lngRow = 1 To lngGroup
            If strTable(lngCount, 0, lngRow) = "" Then Exit For
            lngID = strTable(lngCount, 0, lngRow)
    '        If lngID = 1061 Then Stop
            lngResName = lngID \ 16 + 1
            lngPad = lngID Mod 16           '资源组的第一个资源项在数据数组中的位置
            lngPadCount = lngPad            '资源组的第一个资源项需补0的字节数
            lngResCount = 1                 '资源项数量
            strMsg = strTable(0, 1, lngRow)
            lngDataSize = LenB(strMsg) + lngPad * 2 + 2
            ReDim bytData(lngDataSize - 1)
            Call LongToWord(Len(strMsg), lngHi, lngLo)
            bytData(lngPad * 2) = lngLo
            bytData(lngPad * 2 + 1) = lngHi '第一个资源项的长度
            
            '字符串转为Unicode代码
            If lngID Mod 2 = 0 Then     'Big5码
                bytBig5 = Big5ToUnicode(strMsg)
                For lngX = 0 To UBound(bytBig5)
                    bytData(lngPad * 2 + lngX + 2) = bytBig5(lngX)
                Next
            Else
                For lngX = 1 To LenB(strMsg)
                    bytData(lngPad * 2 + lngX + 1) = AscB(MidB(strMsg, lngX, 1))
                Next
            End If
            For lngCount = 1 To UBound(strTable, 1)
                If strTable(lngCount, 0, lngRow) = "" Then Exit For
    '            If strTable(lngCount, 0, lngRow) = "1071" Then Stop
                lngResCount = lngResCount + 1
                strMsg = strTable(lngCount, 1, lngRow)
                lngPad = strTable(lngCount, 0, lngRow) - lngID - 1 '需要补充的字节数
                lngPadCount = lngPadCount + lngPad                  '已补的字节数
                lngDataSize = lngPad * 2 + lngDataSize
                lngPad = lngDataSize            '资源项开始位置
                lngDataSize = lngDataSize + 2 + LenB(strMsg)
                ReDim Preserve bytData(lngDataSize - 1)
                Call LongToWord(Len(strMsg), lngHi, lngLo)
                bytData(lngPad) = lngLo
                bytData(lngPad + 1) = lngHi
                '字符串转为Unicode代码
                If strTable(lngCount, 0, lngRow) Mod 2 = 0 Then   'Big5码
                    bytBig5 = Big5ToUnicode(strMsg)
                    For lngX = 0 To UBound(bytBig5)
                        bytData(lngPad + lngX + 2) = bytBig5(lngX)
                    Next
                Else
                    For lngX = 1 To LenB(strMsg)
                        bytData(lngPad + lngX + 1) = AscB(MidB(strMsg, lngX, 1))
                    Next
                End If
                lngID = strTable(lngCount, 0, lngRow)
            Next
            lngDataSize = lngDataSize + 2       '数据结束加Null字符
            lngDataSize = lngDataSize + (28 - (lngResCount - 1) * 2) - lngPadCount * 2 '加上未补完的字节
            lngResi = lngDataSize Mod 4
            If lngResi <> 0 Then            'DataSize是否能被4整除,不能整除则补所差的字节数
    '            lngDataSize = lngDataSize + (4 - lngResi) / 2
                lngRealSize = lngDataSize + (4 - lngResi)
    '            lngDataSize = lngRealSize
            Else
                lngRealSize = lngDataSize
            End If
            Call LongToWord(lngDataSize, lngHi, lngLo)
            bytHeader(0) = lngLo
            bytHeader(1) = lngHi
            bytHeader(4) = &H20             'HeaderSize
            bytHeader(8) = &HFF             '
            bytHeader(9) = &HFF             '
            bytHeader(10) = &H6             '8,9,10,11-Type,值FFFF0600
            bytHeader(12) = &HFF
            bytHeader(13) = &HFF
            Call LongToWord(lngResName, lngHi, lngLo)
            bytHeader(14) = lngLo
            bytHeader(15) = lngHi           '12,13,14,15-Name 值FFFF Hi,Lo
            bytHeader(22) = &H4
            bytHeader(23) = &H8             '22,23-Language 此处等于常量&H0804-中文
            
            '资源组头文件的位置
            lngHeader = 33 + (lngRow - 1) * 32 + lngTotal
            '写入资源组头文件
            Put #lngFile, lngHeader, bytHeader
            lngTotal = lngTotal + lngRealSize
            
            '写入数据,重定义数组大小为RealSize
            ReDim Preserve bytData(lngRealSize - 1)
            Put #lngFile, lngHeader + 32, bytData
            
            lngCount = 0
        Next
        Close #lngFile
        mblnNotSave = False
        Exit Sub
    Err:
        MsgBox Err.Description, vbExclamation
    End Sub
      

  4.   

    //打包时不愿意添加DAO,ADO连接库之类,所以想用纯粹字符串的操作完成查询,修改等功能(三个字段均为字符串型)。效率是个问题,用odbc api试试
      

  5.   

    rainstormmaster(rainstormmaster)兄弟请详细讲讲,谢谢!!!
    一个简单的生成资源文件方法已搞定,谢谢大家,尤其是天火兄弟,很热心:
    1 创建XXXX。RC文件
    2。按下面格式写入数据库内容:stringtanble
    begin
    1001,"........"
    1002,".........."
    ....
    end3。shell调用RC.EXE编译