我用commondialog和 SHFileOperation备份和恢复数据库文件(.mdb),当数据库文件存在时,便会弹出 确认文件替换 对话框,故向高人请教如下三个问题:
1. 不论我点“是”还是点“否”,都执行复制了。按钮“否”根本就没起作用。请问该怎么控制啊?2. 我设置的Comdlg1.Filter = "*.mdb"怎么没起作用呢?只想在选择文件时只能看到.mdb文件,可是我那么设置了,选择
   文件时所有文件都显示啊,不是.mdb的文件也能够选择上?这到底是怎么回事啊?3. 在保存和打开通用对话框打开时,想只能选择一个.mdb文件,把ctrl和shift键都屏蔽了,该怎么处理?
 
以下是代码片段:
    '数据库备份
    Comdlg1.DialogTitle = "数据库备份"
    Comdlg1.Filter = "*.mdb"
    Comdlg1.InitDir = App.Path & "\DataBase\"
    Comdlg1.FileName = "feipin.mdb"
    Comdlg1.CancelError = True
    Comdlg1.ShowSave
    On Error GoTo ErrHandler
    Dim SHFileOp As SHFILEOPSTRUCT
    Call SHFileOperation(SHFileOp)
    ...    '数据库恢复
    Comdlg1.DialogTitle = "数据库恢复"
    Comdlg1.Filter = "*.mdb"
    Comdlg1.InitDir = App.Path & "\BackUp"
    Comdlg1.FileName = ""
    Comdlg1.CancelError = True
    Comdlg1.ShowOpen
    ...

解决方案 »

  1.   

    我先说说第二个问题,格式应该是这样的吧?
    Comdlg1.Filter = "All Files (*.*)|*.*|" & "库文件("*.mdb)|"*.mdb| "
      

  2.   

    CancelError 属性
          返回或设置一个值,该值指示当选取“取消”按钮时是否出错。语法object.CancelError [= boolean]CancelError 属性语法有下列部分:部分 描述 
    object 对象表达式,其值是“应用于”列表中的对象。 
    boolean 布尔表达式,如“设置值”中所描述,用以指示是否出错。 
    设置值用于 boolean 的设置有:设置值 描述 
    True 有错。 
    False (缺省值)没错。 
    说明当该属性设置为 True 时,无论何时选取“取消”按钮,均产生 32755 (cdlCancel) 号错误。既然这样,捕捉这个错误不就可以解决第一个问题了
      

  3.   

    我测试第二个问题的解答:
    正确格式为:Comdlg1.Filter = "库文件(*.mdb)|*.mdb|"
    但是,文件名的下拉框里怎么出现了其它目录下的.mdb文件啊?
    比如说:Comdlg1.InitDir = App.Path & "\DataBase\"目录下只有一个feipin.mdb文件,
    在App.Path & "\BackUp\"目录下有两个.mdb文件。因为我将Comdlg1.InitDir 属性设置到DataBase,
    所以保存对话框打开后,默认路径是DataBase。为什么BackUp目录下的两个.mdb文件也跑到文件名的下拉框了?而且还是绝对路径的(E:\废品\BackUp\feipin 2009-11-2.mdb)。想把文件名的下拉框屏蔽掉,不知道我说明白没,就是不让文件名下拉框里头有东西。我再测试下cancelerror
      

  4.   

    已成功捕获cdlcancel,非常感谢您的指教。望助我解决其它问题!好像文件名的下拉框是ComboBox,要是在vb工程的窗体,直接设置Style属性即可。但是系统的对话框我就不知道怎么使用了。
      

  5.   

    你看一下注册表:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\mdb
    下的内容。你那两个‘垃圾文件’是不是在那儿了.........
      

  6.   

    chen8013 说:那个是记录在注册表中的。 什么意思啊?
      

  7.   

    1.Comdlg1.Filter = "库文件(*.mdb)|*.mdb"
    2.If vbYes = MsgBox("确定?", vbYesNo) Then
          ...
      End If
    3.Comdlg1.Flags = cdlOFNAllowMultiselect Or cdlOFNFileMustExist Or cdlOFNExplorer
      

  8.   

    3.不要多个文件,不要设置Comdlg1.Flags就行了
      

  9.   


    能否选择多个文件,可以通过 .Flags 属性来设置:
    常数:cdlOFNAllowMultiselect
     值:&H200
    说明:它指定文件名列表框允许多重选择。 
      运行时,通过按 SHIFT 键以及使用 UP ARROW 和 DOWN ARROW 键可选择多个文件。
      作完此操作后,FileName 属性就返回一个包含全部所选文件名的字符串。串中各文件名用空格隔开。
    因此,只要你没有设置 &H200 标志位,通用对话框就只能选择一个文件;设置了该标志位后,才能选择多个。