当前位置:编程学习 > VB >>

关于数据库和日期时间相关的几个问题,占用大家宝贵时间 还请帮忙看下 谢谢了

Dim objRs As New ADODB.Recordset, objCn As New ADODB.Connection, strsql As String
Private Sub Command1_Click()

Dim DD1 As String, DD2 As String, DD3 As String
Dim AA As String, BB As String, CC As String, DD As String, EE As String, FF As String

If objCn.State = adStateOpen Then
objRs.Close
objCn.Close
Set objRs = Nothing
Set objCn = Nothing
Label10 = ""
Else

If Combo1.Text = "" Then
MsgBox "请选择年份!", vbOKOnly + vbExclamation, ""
Combo1.SetFocus
Exit Sub
End If

If Combo2.Text = "" Then
MsgBox "请选择月份!", vbOKOnly + vbExclamation, ""
Combo2.SetFocus
Exit Sub
End If

If Combo3.Text = "" Then
MsgBox "请选择号数!", vbOKOnly + vbExclamation, ""
Combo3.SetFocus
Exit Sub
End If

If Combo4.Text = "" Then
MsgBox "请选择小时数!", vbOKOnly + vbExclamation, ""
Combo4.SetFocus
Exit Sub
End If


If Combo7.Text = "" Then
MsgBox "请选择电源号数!", vbOKOnly + vbExclamation, ""
Combo7.SetFocus
Exit Sub
End If

AA = Trim(Combo1.Text)
BB = Trim(Combo2.Text)
CC = Trim(Combo3.Text)
DD = Trim(Combo4.Text)
EE = Trim(Combo7.Text)
FF = "号电源"

DD1 = Format(AA, "0000") & "-" & Format(BB, "00") & "-" & Format(CC, "00") & " " & Format(DD, "00") & ":" & Format(0, "00") & ":" & Format(0, "00")
DD2 = Format(AA, "0000") & "-" & Format(BB, "00") & "-" & Format(CC, "00") & " " & Format(DD, "00") & ":" & Format(59, "00") & ":" & Format(59, "00")
DD3 = EE & FF


Set objCn = New Connection
    strcn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & App.Path & "\data.mdb;" & "Persist Security Info=False"
    objCn.ConnectionString = strcn
    objCn.Open
    
    
   
    strsql = "Select * from " & DD3 & "  where 时间 <= #" + CStr(DD2) + "# and 时间 >= #" + CStr(DD1) + "# "
    
      
    Set objRs.ActiveConnection = objCn
    objRs.CursorLocation = adUseClient
    objRs.CursorType = adOpenStatic
    objRs.Open strsql
    Set DataGrid1.DataSource = objRs
   
    
    Label10 = "共获得" & objRs.RecordCount & "条查询结果"
End If

End Sub



Private Sub Command3_Click()
If objCn.State = adStateOpen Then
objRs.Close
objCn.Close
Set objRs = Nothing
Set objCn = Nothing
Unload Me
Else
Unload Me
End If
End Sub


上面是我编的查询数据库数据(根据判断数据库数据保存时的时间)的程序,这个程序是让人输入年、月、日、时  然后选择在那个小时内的数据(以小时为单位查询) 并且通过DataGrid1输出  上面程序编译成功 已经能查询和显示数据 现在的问题是:

 (1)、当我只让人输入年、月、日  小时等不用输入 从而查询的时候(以日为单位查询 ),语句变为
DD1 = Format(AA, "0000") & "-" & Format(BB, "00") & "-" & Format(CC, "00") & " " & Format(0, "00") & ":" & Format(0, "00") & ":" & Format(0, "00")
DD2 = Format(AA, "0000") & "-" & Format(BB, "00") & "-" & Format(CC, "00") & " " & Format(23, "00") & ":" & Format(59, "00") & ":" & Format(59, "00")
即如查询2009-05-25 00:00:00到2009-05-25 23:59:59期间的数据, 但是我数据库里面明明有如2009-5-25 5:30:22这样的数据 但我查询的结果只有2009-5-25 2:30:30或者2009-5-25 17:30:30这样的数据 即小时数为5、4、3 等的数据如(2009-5-25 5:30:22)查询不出来 当时我以为是不是数据库数据保存格式和比较的格式不一样的原因 就把数据库关于时间的操作cnnrs!时间 = Now改为cnnrs!时间 = Format(Now, "yyyy-mm-dd hh:mm:ss")  照理说这样应该更准确 比如数据库里面时间就存成2009-05-25 05:30:30这样的格式 与程序里面DD1格式一模一样 本以为应该能成功 但是改之后产生的数据连上面那个程序都不能查询 错得更多了 昨晚想了老久都想不通  不知道哪儿的原因 或者该怎么修改 希望大家多多帮忙了  谢啦 

(2)上面说的两种情况都还让用户输入年、月、日了  如果下面只让用户输入年和月呢 比如查询b年a月(b,a是用户输入的数据)的数据  现在总不至于让我判断b是闰年与否?a是31天还是28天?这时我想是不是可以把数据库里面的保存的时候拆分成几个整数来分别保存年、月、日  然后编程比较它们 然后在查询。这儿就有几个问题了:
      1、如果变量是now的话,我还会用year(now)等来提取数据 如果只是一个普通字符串的话,
 如a="2009-05-25 12:23:23" 再用year(a)就是错的了  现在该怎么用呢?
      2、假如编程如下

strcn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & App.Path & "\data.mdb"
     conn.Open strcn
   
asql = "select * from 1号电源"
         
    connrs.Open asql, conn, adOpenKeyset, adLockOptimistic
  connrs.Movefirst  
aaa = connrs.Fields("时间").Value
Do while Not connrs.EOF
(......)
connrs.movenext
loop
上面的程序(......)代表的是对年、月、日是否相等的判断,相等则输出当前记录(在DataGrid1里面输出),不相等则移到下条记录。那我这段程序该怎么和下面的
 strsql = "Select * from " & DD3 & "  where 时间 <= #" + CStr(DD2) + "# and 时间 >= #" + CStr(DD1) + "# "
       
    Set objRs.ActiveConnection = objCn
    objRs.CursorLocation = adUseClient
    objRs.CursorType = adOpenStatic
    objRs.Open strsql
    Set DataGrid1.DataSource = objRs
   
    相结合呢?也就是(....)里面该用什么语句来实现满足条件的数据的输出?请哪位大哥指教下啦  谢谢了


(3)数据库编程如
Private Sub Command3_Click()
If objCn.State = adStateOpen Then
objRs.Close
objCn.Close
Set objRs = Nothing
Set objCn = Nothing
Unload Me
Else
Unload Me
End If
End Sub  '退出按钮的程序
这段代码 如果我不判断数据库是否打开,刚进入程序就退出,此时数据库尚未打开 这时它就会系统报错,说数据库关闭情况下不能再关闭 然后会弹出提示框 但是没有继续按钮,里面只有结束或者调试 一点的话程序就结束了,如果我不想要这种情况发生即产生上面的错误我就自己报个msgbox 提示用户出错 然后提供返回继续操作,而不是直接结束程序 ,这样该怎么编呢?毕竟成功的软件编出来总不至于操作有点错就直接关掉软件吧
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,