用vb得随机文件方式进行数据的存取!使用了一个自定义类型!然后却无法正确的读出!写进去是对的,然而在打开文件,读取就是错的!
重新建立一个工程,读取数据是正确的,但在原过程中读取数据就是错的。
希望高手指点一下。
源程序如下:
Option Explicit
Private Type fhqktype
ch As String * 20 '车号
mz As Double '毛重
zzs As Double '杂质数
jz As Double '净重
cbkkdj As Currency '超标扣款单价
kks As Currency '扣款数
dhrq As Date '到货日期
ph As Double '批号
End Type
Dim fhqk As fhqktypePrivate Type dkqktype
dkrq As Date '打款日期
dks As Currency '打款数
jhdj As Currency '进货单价
ph As Double '批号
dhbz As Boolean '到货标志
End Type
Dim dkqk As dkqktype
Private Sub 录入完毕_Click()
Dim lengthdkqk As Long '发货情况打款情况单条记录长度
Dim lengthfhqk As Long
Dim recorddkqk As Long '发货情况打款情况记录条数
Dim recordfhqk As Long
Dim i As Long
Dim ffdkqkwj As Integer
Dim fffhqkwj As Integer
ffdkqkwj = FreeFile
lengthdkqk = Len(dkqk)
Open "e:\temp\dkqkwj.sys" For Random As #ffdkqkwj Len = lengthdkqk '打开dkqkwj.sys读取最后一条记录到dkqk
recorddkqk = LOF(ffdkqkwj) \ Len(dkqk)fffhqkwj = FreeFile
lengthfhqk = Len(fhqk)
Open "e:\temp\fhqkwj.sys" For Random As #fffhqkwj Len = lengthfhqk
recordfhqk = LOF(fffhqkwj) \ Len(fhqk)Seek #fffhqkwj, recordfhqk
Get #fffhqkwj, , fhqk
i = 1
Seek #ffdkqkwj, i
Get #ffdkqkwj, i, dkqk
Do While dkqk.dhbz And fhqk.ph <> dkqk.ph
i = i + 1
Seek #ffdkqkwj, i
Get #ffdkqkwj, i, dkqk
Loop
If fhqk.ph = dkqk.ph Then
dkqk.dhbz = True
Put #ffdkqkwj, i, dkqk
End If
Unload 发货情况
Close #fffhqkwj
Close #ffdkqkwj
End SubPrivate Sub 存储数据_Click()
Dim lengthfhqk As Long ' 单条记录长度
Dim lengthdkqk As Long
Dim dhrqtxt1 As String, chtxt2 As String, mztxt3 As String, zzstxt4 As String, jztxt5 As String, cbkkdjtxt6 As String, kkstxt7 As String
Dim recordfhqk As Long '文件中记录数
Dim recorddkqk As Long
Dim chtemp1 As String '车号临时变量
Dim chtemp2 As String
Dim i As Integer '循环变量
Dim ffdkqkwj As Integer
Dim fffhqkwj As Integer
dhrqtxt1 = Trim(Text7.Text)
chtxt2 = Trim(Text1.Text)
mztxt3 = Trim(Text2.Text)
zzstxt4 = Trim(Text3.Text)
cbkkdjtxt6 = Trim(Text5.Text)
fhqk.ch = CStr(chtxt2)
fhqk.mz = CDbl(mztxt3)
fhqk.zzs = CDbl(zzstxt4)
fhqk.cbkkdj = CCur(cbkkdjtxt6)
fhqk.dhrq = CDate(dhrqtxt1)
If fhqk.zzs >= 20 Then
fhqk.jz = fhqk.mz - fhqk.zzs / 1000 + 20 / 1000
Else
fhqk.jz = fhqk.mz
End If
jztxt5 = CStr(fhqk.jz)
Text4.Text = jztxt5
ffdkqkwj = FreeFile
lengthdkqk = Len(dkqk)
Open "e:\temp\dkqkwj.sys" For Random As #ffdkqkwj Len = lengthdkqk '写入打款文件
recorddkqk = LOF(ffdkqkwj) \ Len(dkqk)
For i = 1 To recorddkqk
Get #ffdkqkwj, i, dkqk
Print dkqk.dhbz
Print dkqk.dkrq
Print dkqk.dks
Print dkqk.jhdj
Print dkqk.ph
'Print dkqk.ykyhbz
Next i
For i = 1 To recorddkqk
Seek #ffdkqkwj, i
Get #ffdkqkwj, , dkqk
Next i
fhqk.ph = dkqk.ph :在此读出的dkqk.ph的数据是错的,希望高手指点
Print "fhqk.ph="; fhqk.ph
fffhqkwj = FreeFile
lengthfhqk = Len(fhqk)
Open "e:\temp\fhqkwj.sys" For Random As #fffhqkwj Len = lengthfhqk
recordfhqk = LOF(fffhqkwj) \ Len(fhqk)
If fhqk.cbkkdj = 0 Then '如果cbkkdj为0则向文件中写一条新纪录,此外按ch查询并计算扣款数并写入相应记录号处
recordfhqk = recordfhqk + 1
Put #fffhqkwj, recordfhqk, fhqk
Else
For i = 1 To recordfhqk
Seek #fffhqkwj, i '定位到第i条记录
Get #fffhqkwj, , fhqk '读取该记录
chtemp1 = Trim(fhqk.ch)
chtemp2 = Trim(Text1.Text)
If chtemp1 = chtemp2 Then
chtxt2 = CStr(fhqk.ch)
mztxt3 = CStr(fhqk.mz)
zzstxt4 = CStr(fhqk.zzs)
dhrqtxt1 = CStr(fhqk.dhrq)
jztxt5 = CStr(fhqk.jz)
cbkkdjtxt6 = Text5.Text
fhqk.cbkkdj = CCur(cbkkdjtxt6)
fhqk.kks = fhqk.cbkkdj * fhqk.jz
kkstxt7 = CStr(fhqk.kks)
Text7.Text = dhrqtxt1
Text1.Text = chtxt2
Text2.Text = mztxt3
Text3.Text = zzstxt4
Text4.Text = jztxt5
Text5.Text = cbkkdjtxt6
Text6.Text = kkstxt7
fhqk.dhrq = CDate(dhrqtxt1)
fhqk.ch = CStr(chtxt2)
fhqk.mz = CDbl(mztxt3)
fhqk.zzs = CDbl(zzstxt4)
fhqk.jz = CDbl(jztxt5)
fhqk.cbkkdj = CDbl(cbkkdjtxt6)
fhqk.kks = CCur(kkstxt7)
Put #fffhqkwj, i, fhqk
End If
Next i
End If
Close #fffhqkwj
Close #ffdkqkwj
End SubPrivate Sub 查询车号_Click()
Dim lengthfhqk As Long
Dim dhrqtxt1 As String, chtxt2 As String, mztxt3 As String, zzstxt4 As String, jztxt5 As String, cbkkdjtxt6 As String, kkstxt7 As String
Dim record As Integer
Dim i As Integer
Dim chtemp1 As String
Dim chtemp2 As String
Dim fffhqkwj As Integer
fffhqkwj = FreeFile
lengthfhqk = Len(fhqk)
Open "e:\temp\fhqkwj.sys" For Random As #fffhqkwj Len = lengthfhqk
record = LOF(fffhqkwj) \ Len(fhqk) '求记录数
For i = 1 To record
Seek #fffhqkwj, i '定位到第i条记录
Get #fffhqkwj, , fhqk '读取该记录
chtemp1 = Trim(fhqk.ch)
chtemp2 = Trim(Text1.Text)
If chtemp1 = chtemp2 Then
chtxt2 = CStr(fhqk.ch)
mztxt3 = CStr(fhqk.mz)
zzstxt4 = CStr(fhqk.zzs)
cbkkdjtxt6 = CStr(fhqk.cbkkdj)
dhrqtxt1 = CStr(fhqk.dhrq)
jztxt5 = CStr(fhqk.jz)
fhqk.kks = fhqk.cbkkdj * fhqk.jz
kkstxt7 = CStr(fhqk.kks)
Text7.Text = dhrqtxt1
Text1.Text = chtxt2
Text2.Text = mztxt3
Text3.Text = zzstxt4
Text4.Text = jztxt5
Text5.Text = cbkkdjtxt6
Text6.Text = kkstxt7
End If
Next i
Close #fffhqkwj
End Sub
重新建立一个工程,读取数据是正确的,但在原过程中读取数据就是错的。
希望高手指点一下。
源程序如下:
Option Explicit
Private Type fhqktype
ch As String * 20 '车号
mz As Double '毛重
zzs As Double '杂质数
jz As Double '净重
cbkkdj As Currency '超标扣款单价
kks As Currency '扣款数
dhrq As Date '到货日期
ph As Double '批号
End Type
Dim fhqk As fhqktypePrivate Type dkqktype
dkrq As Date '打款日期
dks As Currency '打款数
jhdj As Currency '进货单价
ph As Double '批号
dhbz As Boolean '到货标志
End Type
Dim dkqk As dkqktype
Private Sub 录入完毕_Click()
Dim lengthdkqk As Long '发货情况打款情况单条记录长度
Dim lengthfhqk As Long
Dim recorddkqk As Long '发货情况打款情况记录条数
Dim recordfhqk As Long
Dim i As Long
Dim ffdkqkwj As Integer
Dim fffhqkwj As Integer
ffdkqkwj = FreeFile
lengthdkqk = Len(dkqk)
Open "e:\temp\dkqkwj.sys" For Random As #ffdkqkwj Len = lengthdkqk '打开dkqkwj.sys读取最后一条记录到dkqk
recorddkqk = LOF(ffdkqkwj) \ Len(dkqk)fffhqkwj = FreeFile
lengthfhqk = Len(fhqk)
Open "e:\temp\fhqkwj.sys" For Random As #fffhqkwj Len = lengthfhqk
recordfhqk = LOF(fffhqkwj) \ Len(fhqk)Seek #fffhqkwj, recordfhqk
Get #fffhqkwj, , fhqk
i = 1
Seek #ffdkqkwj, i
Get #ffdkqkwj, i, dkqk
Do While dkqk.dhbz And fhqk.ph <> dkqk.ph
i = i + 1
Seek #ffdkqkwj, i
Get #ffdkqkwj, i, dkqk
Loop
If fhqk.ph = dkqk.ph Then
dkqk.dhbz = True
Put #ffdkqkwj, i, dkqk
End If
Unload 发货情况
Close #fffhqkwj
Close #ffdkqkwj
End SubPrivate Sub 存储数据_Click()
Dim lengthfhqk As Long ' 单条记录长度
Dim lengthdkqk As Long
Dim dhrqtxt1 As String, chtxt2 As String, mztxt3 As String, zzstxt4 As String, jztxt5 As String, cbkkdjtxt6 As String, kkstxt7 As String
Dim recordfhqk As Long '文件中记录数
Dim recorddkqk As Long
Dim chtemp1 As String '车号临时变量
Dim chtemp2 As String
Dim i As Integer '循环变量
Dim ffdkqkwj As Integer
Dim fffhqkwj As Integer
dhrqtxt1 = Trim(Text7.Text)
chtxt2 = Trim(Text1.Text)
mztxt3 = Trim(Text2.Text)
zzstxt4 = Trim(Text3.Text)
cbkkdjtxt6 = Trim(Text5.Text)
fhqk.ch = CStr(chtxt2)
fhqk.mz = CDbl(mztxt3)
fhqk.zzs = CDbl(zzstxt4)
fhqk.cbkkdj = CCur(cbkkdjtxt6)
fhqk.dhrq = CDate(dhrqtxt1)
If fhqk.zzs >= 20 Then
fhqk.jz = fhqk.mz - fhqk.zzs / 1000 + 20 / 1000
Else
fhqk.jz = fhqk.mz
End If
jztxt5 = CStr(fhqk.jz)
Text4.Text = jztxt5
ffdkqkwj = FreeFile
lengthdkqk = Len(dkqk)
Open "e:\temp\dkqkwj.sys" For Random As #ffdkqkwj Len = lengthdkqk '写入打款文件
recorddkqk = LOF(ffdkqkwj) \ Len(dkqk)
For i = 1 To recorddkqk
Get #ffdkqkwj, i, dkqk
Print dkqk.dhbz
Print dkqk.dkrq
Print dkqk.dks
Print dkqk.jhdj
Print dkqk.ph
'Print dkqk.ykyhbz
Next i
For i = 1 To recorddkqk
Seek #ffdkqkwj, i
Get #ffdkqkwj, , dkqk
Next i
fhqk.ph = dkqk.ph :在此读出的dkqk.ph的数据是错的,希望高手指点
Print "fhqk.ph="; fhqk.ph
fffhqkwj = FreeFile
lengthfhqk = Len(fhqk)
Open "e:\temp\fhqkwj.sys" For Random As #fffhqkwj Len = lengthfhqk
recordfhqk = LOF(fffhqkwj) \ Len(fhqk)
If fhqk.cbkkdj = 0 Then '如果cbkkdj为0则向文件中写一条新纪录,此外按ch查询并计算扣款数并写入相应记录号处
recordfhqk = recordfhqk + 1
Put #fffhqkwj, recordfhqk, fhqk
Else
For i = 1 To recordfhqk
Seek #fffhqkwj, i '定位到第i条记录
Get #fffhqkwj, , fhqk '读取该记录
chtemp1 = Trim(fhqk.ch)
chtemp2 = Trim(Text1.Text)
If chtemp1 = chtemp2 Then
chtxt2 = CStr(fhqk.ch)
mztxt3 = CStr(fhqk.mz)
zzstxt4 = CStr(fhqk.zzs)
dhrqtxt1 = CStr(fhqk.dhrq)
jztxt5 = CStr(fhqk.jz)
cbkkdjtxt6 = Text5.Text
fhqk.cbkkdj = CCur(cbkkdjtxt6)
fhqk.kks = fhqk.cbkkdj * fhqk.jz
kkstxt7 = CStr(fhqk.kks)
Text7.Text = dhrqtxt1
Text1.Text = chtxt2
Text2.Text = mztxt3
Text3.Text = zzstxt4
Text4.Text = jztxt5
Text5.Text = cbkkdjtxt6
Text6.Text = kkstxt7
fhqk.dhrq = CDate(dhrqtxt1)
fhqk.ch = CStr(chtxt2)
fhqk.mz = CDbl(mztxt3)
fhqk.zzs = CDbl(zzstxt4)
fhqk.jz = CDbl(jztxt5)
fhqk.cbkkdj = CDbl(cbkkdjtxt6)
fhqk.kks = CCur(kkstxt7)
Put #fffhqkwj, i, fhqk
End If
Next i
End If
Close #fffhqkwj
Close #ffdkqkwj
End SubPrivate Sub 查询车号_Click()
Dim lengthfhqk As Long
Dim dhrqtxt1 As String, chtxt2 As String, mztxt3 As String, zzstxt4 As String, jztxt5 As String, cbkkdjtxt6 As String, kkstxt7 As String
Dim record As Integer
Dim i As Integer
Dim chtemp1 As String
Dim chtemp2 As String
Dim fffhqkwj As Integer
fffhqkwj = FreeFile
lengthfhqk = Len(fhqk)
Open "e:\temp\fhqkwj.sys" For Random As #fffhqkwj Len = lengthfhqk
record = LOF(fffhqkwj) \ Len(fhqk) '求记录数
For i = 1 To record
Seek #fffhqkwj, i '定位到第i条记录
Get #fffhqkwj, , fhqk '读取该记录
chtemp1 = Trim(fhqk.ch)
chtemp2 = Trim(Text1.Text)
If chtemp1 = chtemp2 Then
chtxt2 = CStr(fhqk.ch)
mztxt3 = CStr(fhqk.mz)
zzstxt4 = CStr(fhqk.zzs)
cbkkdjtxt6 = CStr(fhqk.cbkkdj)
dhrqtxt1 = CStr(fhqk.dhrq)
jztxt5 = CStr(fhqk.jz)
fhqk.kks = fhqk.cbkkdj * fhqk.jz
kkstxt7 = CStr(fhqk.kks)
Text7.Text = dhrqtxt1
Text1.Text = chtxt2
Text2.Text = mztxt3
Text3.Text = zzstxt4
Text4.Text = jztxt5
Text5.Text = cbkkdjtxt6
Text6.Text = kkstxt7
End If
Next i
Close #fffhqkwj
End Sub
http://download.csdn.net/source/325194
这个代码里用于保存和读取配置也是通过文件方法来进行的。
同样也是自定义数据结构,应该对楼主有所帮助。