数据库路径:C:\PROG\2008-3.MDB   (当月数据)
            C:\PROG\BACKUP\2008-2.MDB   (以前数据)
            C:\PROG\BACKUP\2008-1.MDB   (以前数据)
   在FORM1启动时先显示当月数据在DATAGRID上,按COMMAND1(查以前记录)后在DATAGRID上显示以前的记录,能实现这样功能的源代码吗?
   我是VB的初学者,VB的高手请提供例子,谢谢!

解决方案 »

  1.   

    你最好检查下每个数据文件的创建日期,然后选择最后创建的文件打开.
    检查每个数据文件的创建日期用FSO(file system object).
    使用方法看FSO帮助.
      

  2.   

    如果你的数据库命名方式都是这样的话就可以用一个循环来读取数据

    for i=1 to Year(now)-1
       strDbName=Year(now) & "-" & i & ".mdb"
       检查这个文件名是否存在
       如存在就打开数据库并将数据显示到datagrid中
          
    next
      

  3.   

    查看不同路径 ? 总要有个路径吧? 难道你要 c d e f 搜遍硬盘每个盘符 ?何谓 "最先" ? 2008-1.MDB 是最先的吗? 如果有 2007-1.MDB 那这是不是最先 ?问问题自己要先表达清楚, 俺懒得猜, 否则早就帮你搞掂了.
      

  4.   

    TO:CBM666
       路径是一个,是C盘,"最先"是指"最早的",就是当前的数据,是保存日期最近的一个,因为保存数据库命名方式是按月命名,"最先"就是指当月的啦!
      补充一点,显示出来后还要有打印预览后打印出来.
      

  5.   

    sub COMMAND1_click()
      CommonDialog1.ShowOpen
      mymdb=CommonDialog1.FileName
      strConn = "Driver={Microsoft Access Driver(*.mdb)};DBQ=" & mymdb & ";"
      Set curConnection = New ADODB.Connection
      Set rs = New ADODB.Recordset
      curConnection.Provider = "Microsoft.Jet.OLEDB.4.0" '3.51"
      curConnection.Open strConn
      If curConnection.State = adStateOpen Then
        strSQL = "select * from mytable"
        rs.Open strSQL, curConnection, adOpenStatic, adLockReadOnly
        DATAGRID.datesource=rs
      end if
    end sub
      

  6.   

    在窗体上放一个 DataGrid 控件,一个 ADODC 控件,一个 CombBox 控件,一个 Command 控件:
    窗体打开时显示当月数据,选择 ComboBox 列表(包括备份数据和当月数据)后,单击按钮显示响应数据。没有调试。权当提供思路吧。Private Sub Form_Load()
    Dim strFile As StringstrFile = Dir("C:\PROG\BACKUP\*.MDB")
    Do Until strFile = ""
        Combo1.AddItem strFile
    Loop
    If Combo1.ListCount Then Combo1.ListIndex = 0strFie = Dir("C:\PROG\*.MDB")
    If strFile > "" Then
        Combo1.AddItem strFile
        Combo1.ItemData(Combo1.NewIndex) = 1
        ADODC1.DatabaseName = "C:\PROG\" & strFile
        ADODC1.RecordSource = "SELECT * FROM 你的表名称"
        Set DataGrid1.DataSource = ADODC1
        DataGrid1.Refresh
    End IfCommand1.Caption = "查看记录(&V)"End SubPrivate Sub Command1_Click()
    Dim strPathFile As String
    strPathFile = "C:\PROG\" & IIf(Combo1.ItemData(Combo1.ListIndex), "", "BACKUP\") & Combo1.List(Combo1.ListIndex)
    If Dir(strPathFile) > "" Then
        ADODC1.DatabaseName = strPathFile
        ADODC1.RecordSource = "SELECT * FROM 你的表名称"
        Set DataGrid1.DataSource = ADODC1
        DataGrid1.Refresh
    End If
    End Sub
      

  7.   

    '下面代码是遍历 c 盘下面所有的 .mdb , 找出 200开头的.mdb 利用 List1的Sort排序属性(当然要用数组排序也行,多几行代码有点懒), 最下面一笔就是最靠近今天的.mdb, 剩下的你自己玩了.'添加 Command1 List1 记住 List1的属性 sorted 要设为 TrueOption Explicit
    Dim objWMIService, objProcess, colProcesslist
    Dim i%, j%, aa$, bb$, fname$, DriveNm$(), Filestr$(), Trec&, sPrivate Sub Command1_Click()
       ReDim Preserve Filestr$(0)
       Trec = 0: Filestr(0) = ""
       fname = "c:\tmpstr.txt"
       List1.Clear
       If Dir(fname) <> "" Then Kill fname
       Me.Caption = "搜索中,请稍侯......!!"
       Call Shell("cmd /c dir c:\*.mdb /s/b >" & fname, vbHide)
       Do
          DoEvents
          If Not Isrunexe("cmd.exe") Then Exit Do
       Loop
       If FileLen(fname) > 0 Then
          List1.Visible = False
          Open fname For Input As #1
          While Not EOF(1)
             Line Input #1, aa
             ReDim Preserve Filestr$(Trec)
             Filestr(Trec) = aa
             If InStr(aa, "200") > 0 Then
                bb = Getdate(aa)
                If bb <> "" Then List1.AddItem bb & "," & Filestr(Trec)
             End If
             Trec = Trec + 1
          Wend
          Close #1
          List1.Visible = True
          For i = 0 To List1.ListCount - 1
             aa = List1.List(i)
             s = Split(aa, ",")
             Filestr(i) = s(1)
             Print Filestr(i)
          Next i
       End If
       Me.Caption = "搜索完成!!"
       If Trec = 0 Then MsgBox "未搜索到欲查找的文件": Exit Sub
       MsgBox "共搜到 " & CStr(Trec) & " 个数据库" & vbCrLf & Chr(10) & "日期命名的有:" & CStr(List1.ListCount) & " 个文件"
    End SubPublic Function Isrunexe(ExeNm As String) As Boolean
       Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
       Set colProcesslist = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & ExeNm & "'")
       Isrunexe = IIf(colProcesslist.Count > 0, True, False)
       Set objWMIService = Nothing
       Set colProcesslist = Nothing
    End FunctionFunction Getdate(Tstr$) As String
       Getdate = ""
       j = InStrRev(Tstr, "\")
       If j > 0 Then
          Tstr = Mid(Tstr, j + 1)
          Tstr = Replace(Tstr, "-", "")
          j = InStr(Tstr, ".")
          If j > 0 Then
             Tstr = Mid(Tstr, 1, j - 1)
             If Len(Tstr) < 6 Then Tstr = Mid(Tstr, 1, 4) & "0" & Mid(Tstr, 5, 1)
             Getdate = Tstr
          End If
       End If
    End Function
      

  8.   

       分数再多都没有用,可能大家对我的提问不了解,造成提出的问题没有人能够详细地提供代码,归根到底都是我的错,没有把提问的内容描述清楚,现将提问内容再一次写出来,看哪位高手能提代码。    要做一个显示数据库及打印出显示数据的例子,这个数据库有按月备份的,分为记录当月数据的数据库和按月备份的数据库,它们分别存放在C盘不同的目录下,如:C:\PROG\OK.MDB (当月数据) ,备份的数据库: C:\PROG\BACKUP\2008-1.MDB ,C:\PROG\BACKUP\2008-2.MDB,C:\PROG\BACKUP\2008-3.MDB    
    现要求:   在FORM1启动时先显示当月数据在DATAGRID上,按COMMAND1(查以前记录)后在DATAGRID上显示备份的数据库记录,按COMMAND2 打印出显示数据,能实现这样功能的源代码吗? 
                
      

  9.   

    10F 代码已经帮你完成了找出最近日期的那个月份的 mdb 这个动作是比较有点技巧性,我的代码已帮你完成了搜索与排序.剩下的就是简单的DataGrid调出与显示打印, 这个部份难道你不会, 还要等别人来帮你完成吗?
      

  10.   

    先建个日期型字段表,把2008-1.MDB   以200801开式存入表中,把2008-2.MDB   以200802存入表中,然后调用哪个字段你就打开哪个数据库就行
      

  11.   

    "它们分别存放在C盘不同的目录下"  要找出最近的这一月份的数据库?.mdb, 难道你不用搜索 ? 用眼睛来找是吗 ?当然, 如果你是初学者, 上面的话我收回, 但我只想告诉你, .mdb 使用DataGrid来显示数据, 这种代码是非常普遍,可以说到处都是, 你何不花点时间搜索一下呢 ? 你越搜见得越多,学得越快, 进步越快不是吗 ?晚上回家后再帮你完善DataGrid的显示与打印.
      

  12.   

       多谢CBM666指点,今后会不断学习VB,增加自己的知识,但我总有个缺点,看别人的代码才知道怎么写,看书真的不懂。都不知哪本书写的合我学习,我找了很久都没有找到VB与数据库结合的书来。不是单一写数据库的就是写VB的。
      

  13.   

    已发到你邮箱了, 里面 rssort 这个文件夹的代码就是 找出你最近一个月份并以DtaGrid显示出来.里面还有好几个 rs ado sql msflexgrid datagrid 的代码, 与几个打印的代码,都是我平时测试与练习用的,我没时间整理,你自己能从中学到多少算多少吧.
      

  14.   

    不好意思!来迟了,已收到邮件,很详细,多谢CMB666.
      

  15.   

    不好意思!应该加分给CBM666的,现错加给OF123,不知如何改变.
      

  16.   

    没有加分给CBM666,再次表示歉意!