回 帖 发 新 帖 刷新版面

主题:[原创]浅谈编程注意要点

很多人在初学编程的时候会遇到这样那样的问题,我也是一样。在这些问题的探索中,我们会慢慢的了解VB的特性,进入VB的神奇世界,体验简单编程的乐趣!
在我最近开发的一款小型使用软件中,有这样一段代码:
Private Sub ListView1_Click()
    On Error Resume Next
    shengchanriqi = ListView1.SelectedItem.ListSubItems.Item(3)
    timecount = Abs(DateDiff("y", shengchanriqi, Date))
    baozhiqi = Val(ListView1.SelectedItem.ListSubItems.Item(2))
    If timecount > baozhiqi Then
        Pbar1.Visible = False       'forbidden the appear of Prossess Bar
        Frame2.Visible = False       'Frobidden the appear of Frame2
        Label4.Visible = True        'show the label
        Label4.Caption = "食品已过期" & timecount - ListView1.SelectedItem.ListSubItems.Item(2) & "天,请不要食用或使用!"
    Else
        Label4.Visible = False      'forbidden label
        Pbar1.Visible = True           'show prossess bar
        Frame2.Visible = True           'show frame2
        baozhiqi = ListView1.SelectedItem.ListSubItems.Item(2)
        bili = (timecount / baozhiqi) * 100
        Pbar1.Value = bili
        bili = 0
    End If
End Sub
原来,使用的是 If timecount > ListView1.SelectedItem.ListSubItems.Item(2) Then
后来发现,在运行过程中,VB会跳过if 直接运行紧接着IF的程序段。这让我想起了一种可能性:在使用ListView1.SelectedItem.ListSubItems.Item(2)语句与IF这个函数进行组合时,系统会有一个优先原则,到底是哪一个优先?答案是:IF
   也就是说,这个语句中,由于timecount变量的值是已经赋予了的正数值,而ListView1.SelectedItem.ListSubItems.Item(2)则表示了一个获取数据的过程,这个过程来不及执行系统就进行了比对。系统认为timecount比ListView1.SelectedItem.ListSubItems.Item(2)大,于是执行了下面进阶的程序。
   所以,要像上面一样(baozhiqi = Val(ListView1.SelectedItem.ListSubItems.Item(2)))将数据预先储存在一个变量中,然后在执行比对,这样才不容易出错!
还有一个例子,大家自己分析一下:
VB延时函数
Declare   Sub   Sleep   Lib   "kernel32"   (ByVal   dwMilliseconds   As   Long)  
   sleep   1000'1秒
记住,在使用延时函数的同时,要使用DoEvents
例程:
/*****************************
a = 0
Do While a < 11
  Label1.Caption = a
  a = a + 1
   DoEvents
   Sleep 1000
  Loop
/*****************************
函数声明
Private Declare   Sub   Sleep   Lib   "kernel32"   (ByVal   dwMilliseconds   As   Long)   
这里,DoEvents与Sleep函数的位置如果放反了,就会失去Sleep函数的延时效果。
大家自己思考一下原因!谢谢~!

回复列表 (共11个回复)

11 楼

在数据库操作中,“删除”操作的语句不能使用close方法。
Set Res = New ADODB.RecordSet
Res.Open "delete * from txl",conn,1,1
这里就不能加上一句“Res.Close”

我来回复

您尚未登录,请登录后再回复。点此登录或注册