我自定义了一个type
type
   Name as string
   Id as integer
   Class as string
end type 想把它写到一个文件中去,文件名自己定
 比如,今天写了3,4个rec进去了。明天想删除其中一个,或者想增加两个.
后天想查询.
 就是说想实现文件象数据库那样的操作,可以吗? 不想用数据库。...因为数据量不是很大,而且很容易出问题.就想用文件来解决

解决方案 »

  1.   

    如果要实现删除操作,最快的方法是加入删除标记,而不是真的删除,而且每隔一段时间可以让用户选择优化一次文件。不然的话效率会很低。
    type
       Delete as boolean'删除标记,只有优化文件的时候才真正删除数据
       Name as string
       Id as integer
       Class as string
    end type
      

  2.   

    当然可以了啊~~思路是这样的,一般来说,对于记录形式的文件操作使用“随即访问模式”
    Open "C:\a.txt" For Random As #1 Len=Len(Typename)对于写入:
    Put #文件号,[记录号],变量名
    Put #1,,Record1
    上面一句省略记录号,则表示在当前记录后插入一条记录,常用于连续写入时。对于读取操作:
    Get #文件号,[记录号],变量名
    Get #1,1,FirstRec
    读取文件1的第一个记录到FirstRec中去
    如果省略记录号,则表示读出当前记录后的一条记录,也用于连续读取。对于查询操作:
    一般来说,有两种方法,一种是查询法,一种是直接取得。
    查询法很简单就是用一个循环比较ID:
    Count= Lof(1)/Len(Record)
    For i=1 to Count 
      Get #1,i,TmpRec
      if TmpRec=ID Then Exit For
    Next
    if i = Count + 1 then
      Msgbox "NULL"
    else
      QueryRec = TmpRec
    end if还有一种是直接取得法,更快捷,是利用记录大小和记录ID来直接求得记录起始地址。
    Get #1,QueryRec.ID,QueryRec
    当然,前提是有一个递增的ID,就像ACCESS中的自动增长字段类型一样。
      

  3.   

    删除文件,不太好操作,qiqi5521() 的建议可以采纳
      

  4.   

    同意 rainstormmaster(暴风雨 v2.0) 的思路
      

  5.   

    以二进制方式打开文件,则当你用put语句的时候,就是直接覆写当前文件指针处的数据。
    比方说我要覆盖文件的第一个字节,put #1,1,255
      

  6.   

    可是直接在rec里面定位指针很困难吧.不可能知道是哪一个字节的
      

  7.   

    用LenB()函数可以得到结构的所占用的字节数。
      

  8.   

    如果数据量不是很大,用 XML 或文本文件处理起来会更方便,也比较便于调试。毕竟现在不是Dos时代了,用文本文件虽然要多占一些硬盘空间,但与换来的开发效率比起来,是非常值得的。
      

  9.   

    XML...很不错的东东,可惜不会用.
      

  10.   

    XML我还没学呀!
    下一期的课程!