'----------------------------
'     模块功能:启动程序
'     模块属性:公有
'-----------------------------Option Explicit
Option Base 0Sub Main()
'On Error GoTo ErrHandle
    Call InitDataExit Sub
ErrHandle:
    'Err.Raise Err.Number
End SubPrivate Function InitData()
    Const DBPathName = "C:\WINNT\system\date.mdb"
    Const DBTableName = "Date"
    Const DBField_FirstTime = "FirstTime"
    Const DBField_LastTime = "LastTime"
    Const DBField_Times = "Times"
    Dim l_intTimes As Integer
    Dim l_DB As Database
    Dim l_RS As Recordset
    Dim l_TDF As TableDef
    Dim l_Field As Field
    If Dir(DBPathName) = "" Then
        Set l_DB = CreateDatabase(DBPathName, dbLangGeneral)
        Set l_TDF = l_DB.CreateTableDef(DBTableName)
        Set l_Field = l_TDF.CreateField(DBField_FirstTime, dbText, 10)
        l_TDF.Fields.Append l_Field
        Set l_Field = l_TDF.CreateField(DBField_LastTime, dbText, 10)
        l_TDF.Fields.Append l_Field 'Fied first_time
        Set l_Field = l_TDF.CreateField(DBField_Times, dbInteger, 2)
        l_TDF.Fields.Append l_Field
        l_DB.TableDefs.Append l_TDF
        l_DB.Close
        Set l_DB = OpenDatabase(DBPathName)
        Set l_RS = l_DB.OpenRecordset(DBTableName)
        With l_RS
            .AddNew
            .Fields(DBField_FirstTime) = Date
            .Fields(DBField_LastTime) = Date
            .Fields(DBField_Times) = 1
            .Update
        End With
        l_DB.Close
        MsgBox "这是你第1次使用本系统!你的试用期为30天,今天是第一天,谢谢使用!", 48, "作者:余挺"
        Call strartPro             '新建联接
        Call ConnectServer         '启动联接
  
        frmLogin.Show
    Else '系統有dste.mdb文件,则不是第一次运行
        
        Set l_DB = OpenDatabase(DBPathName)
        Set l_RS = l_DB.OpenRecordset(DBTableName)
        l_RS.MoveFirst
        '判断用戶是否修改了系统日期
        If DateDiff("D", CDate(l_RS.Fields(DBField_LastTime).Value), Date) > 0 Then
            MsgBox "对不起,你在本软件的试用期內不可以修改系统日期,否則您將无权进入本系统,如果你想继续 使用本軟件。請您恢复系統日期,或申請注冊.謝謝合作!", 48, "HS-LEO IT工作室"
            End
        End If
        '判断是否过期
        If Date - CDate(l_RS.Fields(DBField_FirstTime)) >= 30 Then '設定試用期為30天
            MsgBox "你已经使用本系统" & l_RS.Fields(DBField_Times) & "次,而且已經到了30天的試用期如果你想繼續使用本軟件,請你到本公司注冊并購買正版軟件!", 48, "HS-LEO IT工作室"
            End
        Else
            '仍在试用期
            l_intTimes = l_RS.Fields(DBField_Times)
            'l_RS.Edit
            l_RS.Fields(DBField_LastTime) = Date
            l_RS.Fields(DBField_Times) = l_intTimes + 1
            l_RS.Update
            MsgBox "這是你第" & l_RS.Fields(DBField_Times) & "次使用本系統,你有" & 30 - (Date - CDate(l_RS.Fields(DBField_FirstTime))) & "天的試用期,祝您今天工作愉快!", 48, "HS-LEO IT工作室"
            Call strartPro             '新建联接
            Call ConnectServer         '启动联接
            frmLogin.Show
        End If
    End If
End Function---------------------------------------
这是主模块的代码。
这一段是在网上找到的代码,基本上没有做修改。但我运行时出错,第一运行时会在"C:\WINNT\system\date.mdb"建立一个date.mdb的文件,但下面这一句:
 Set l_Field = l_TDF.CreateField(DBField_FirstTime, dbText, 10)
会报类型错误,
第二次程序运行到
       Set l_RS = l_DB.OpenRecordset(DBTableName)
会报jet引擎找不到输入表或查询的错误,我想原因可能就是上一句CreateField没有被正确创建?问题:
(1)请解决上面的错误,并靠知这个是什么原因???????
我已加了DAO引用,不知是否需要。
 (2).用这种方法,能否让文件date.mdb不能被修改和删除???
(3).如果大家有别的更好的办法,请贴源码,刚用VB,请多包涵!!!!谢谢!!!

解决方案 »

  1.   

    想法好但估计不行
    这样的程序好做
    但mdb的密码太好破了
    数据库访问的事你可以看我的例子,你面有一个数据访问模块 不过使用adohttp://www.freewebs.com/xshlm/
      

  2.   

    to:hlm750908(pro dog) 
    谢谢:你发给我的例子我看了一下,但是没有试用期这方面的内容啊,还有别的源码吗?麻烦你了!
      

  3.   

    最好要把MDB放到一个很长路径的文件夹下,然后隐藏.
      

  4.   

    to:ryuginka(ryuginka)
    如何隐藏呢?系统中也许并不存在很长路径的文件夹啊(2k和98还不一样),如果用户用高级搜索,按时间搜索刚加的文件,那不是还是查得出来吗?
    我上面的还有错误,能帮我看一下是什么原因吗?
      

  5.   

    先反.mdb文件的扩展名改掉,放到一个文件很多的地方,程序启动时再改回来,然后打开
      

  6.   

    将*.mdb文件改为*.dll,再用ADO进行读取与写入就安全多了
      

  7.   

    最保险的试用版不要放时间限制,功能限制更有效(而且千万别用Enabled=False这种愚蠢办法封锁功能,要删除功能代码)
      

  8.   

    不好意思,今天才上csdn,十分感谢大家的赐教。
    to:ryuginka(ryuginka)如何隐藏呢?系统中也许并不存在很长路径的文件夹啊(2k和98还不一样),如果用户用高级搜索,按时间搜索刚加的文件,那不是还是查得出来吗?
    我上面的还有错误,能帮我看一下是什么原因吗?to:starrain95(随风2003) & liuberlin(软件边缘) :你们的想法很好,用ADO的方法如何在.dll里文件里建库并且打开呢?不好意思,这个问题可能很弱。。,,(我写vc,用vc写这个怕累死,vb我很差的。)to:haowg(當我遇上妳) : pigpag(噼里啪啦 - 爆竹声中一命呼 ) liul17(vb无极) ( ) :这个软件并不想发到网上去,有特定的用户群。。我想先让用户试用一次,不必进行网上注册,甚至可以口头通知。所以把功能限制了,用户可能觉得不够好不于使用了。再次感谢大家的帮助!!!请继续支持,分不多,汗。。
      

  9.   

    使用日期放在一个二进制文件中或者放在注册表中。
    日期数据必须加密后才存储。
    加密可以用md5或rsa,没有必要使用数据库。
    或者觉得二进制文件可能不删除,就存在可执行文件中。