用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