关于资源文件

northwolves 2003-12-21 05:16:34
将三个字段,5000条记录的小型数据库写入字符串表格,有何高招???
...全文
58 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
nik_Amis 2003-12-22
  • 打赏
  • 举报
回复
用VC写成dll吧
northwolves 2003-12-22
  • 打赏
  • 举报
回复
rainstormmaster(rainstormmaster)兄弟请详细讲讲,谢谢!!!
一个简单的生成资源文件方法已搞定,谢谢大家,尤其是天火兄弟,很热心:
1 创建XXXX。RC文件
2。按下面格式写入数据库内容:

stringtanble
begin
1001,"........"
1002,".........."
....
end

3。shell调用RC.EXE编译
rainstormmaster 2003-12-21
  • 打赏
  • 举报
回复
//打包时不愿意添加DAO,ADO连接库之类,所以想用纯粹字符串的操作完成查询,修改等功能(三个字段均为字符串型)。

效率是个问题,用odbc api试试
northwolves 2003-12-21
  • 打赏
  • 举报
回复
谢谢,我试试
flc 2003-12-21
  • 打赏
  • 举报
回复
学习
关注
firechun 2003-12-21
  • 打赏
  • 举报
回复
生成资源文件的代码,这段代码你不能完全照搬,因为我当时需要在资源文件中同时写入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
firechun 2003-12-21
  • 打赏
  • 举报
回复
是这样的,因为有一次需要在写好的软件中添加大量的字符串资源,字符串也是放在数据库中,用手工一条条在VB的资源编辑器中输入比较麻烦,于是写了一个小工具,把字符串从数据库中取出来,然后生成一个资源文件。不知道是不是符合你的要求,我找找,不知道代码还在不在。
northwolves 2003-12-21
  • 打赏
  • 举报
回复
天火请详细讲讲,谢谢!
northwolves 2003-12-21
  • 打赏
  • 举报
回复
我的机子是vb6.0。多谢大家,打包时不愿意添加DAO,ADO连接库之类,所以想用纯粹字符串的操作完成查询,修改等功能(三个字段均为字符串型)。另一个问题就是生成用于编译的*.rc文件采用什么编排格式?
firechun 2003-12-21
  • 打赏
  • 举报
回复
自己编程写一个资源文件,我原来写过。
online 2003-12-21
  • 打赏
  • 举报
回复
关注
onlineboy 2003-12-21
  • 打赏
  • 举报
回复
等待高手吧
SoHo_Andy 2003-12-21
  • 打赏
  • 举报
回复
用.net倒是有方法 批量插入字符串资源到资源文件,

VB的我UP
rainstormmaster 2003-12-21
  • 打赏
  • 举报
回复
用excel对象如何

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧