Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 控件  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1701889
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

如何去掉选择查询布局的保存提示?

作者:cg1  摘自:access911.net  :cg1  更新日期:2009-5-20  浏览人次:

 

问题:

如何去掉选择查询布局的保存提示


谢谢版主这么年来一直在维护 access911.net ,她一直对我深入应用ACCESS的帮助很大.
很多问题都能通过搜索给解决了.

今天遇到了一个问题,还麻烦版主给予解答.
•打开任一选择查询,当你调整了列宽,就会出现保存提示,如下图所示。
图片如下:
按此在新窗口浏览图片 
•当你将选择查询绑订至子窗体,这个提示就会很烦人。 
•不知如何将此提示去掉。 
这个问题是前两年遇到的,后来用 DoCmd.SetWarnings False解决了

但现在使用SetWarnings 后,发现系统总是选择默认按钮,我现在不需要保存布局,有何办法
很烦,
有没有更好的方法去掉这个对话框呢.或者控制这个对话框呢

 


方法一:

方法有很多种,比如:

1、不要让用户手动关闭窗体,而是编程关闭。说白了,就是更改窗体的“关闭按钮”属性为否,然后在窗体上加个退出窗体的按钮,在里面编程即可。
DoCmd.Close acForm, "DatabaseSet", acSaveNo
注意第三个参数


•打开任一选择查询,当你调整了列宽,就会出现保存提示,如下图所示。 ------------不要让用户去开查询,而是应该用窗体把查询绑定起来,显示窗体即可。如果要让软件更安全更人性化,设计时的界面一律不能显示,比如数据库窗口、查询、表等,只能显示窗体、报表。而且如果你对窗体的格式有特别要求,也应该在报表中完成,而不是在窗体中。
•当你将选择查询绑订至子窗体,这个提示就会很烦人。 ------------能解决
•不知如何将此提示去掉。 ---------- 看Docmd.close的第三个参数

 


方法二:

2、SetWarnings false 肯定是选择默认的“是”的。你尝试每次都编程去恢复你的默认设置,也就是说不是让他别保存,而是每次打开的时候再改回来。
下面提供一段保存设置到内存,然后再读取出来应用在窗体上的代码,仅供参考

  Public Sub LoadUserColumnSetup(ByRef frm As Form)
      Dim ctl As Control
      Dim strBlob As String
      Dim strColumns() As String
      Dim intColumns As Integer
      Dim intColumn As Integer
      Dim strValues() As String
      Const cDatasheetView As Long = 2
      
      On Error Resume Next
      
      ' Only apply to forms in datasheet view.
      ' Otherwise, exit the sub to cease processing
      If frm.CurrentView <> cDatasheetView Then Exit Sub
      
      ' Grab previous settings from Registry as a blob of data
      strBlob = GetSetting("Demo", "Settings", frm.Name, "")
      
      ' Blob data looks like this:
      '    name : postion : hidden : size
      '    ------------------------------
      '    fname:1:False:855
      '    lname:3:False:870
      '    hire_date:4:False:3090
      '    minit:2:False:840
      ' Only continue if blob contains data.
      If strBlob <> "" Then
        ' This is the clever bit.  For the code to work right,
        ' the columns must be assigned in correct order.  This 
        ' method reorders the blob entries.
        Call GetOrderedColumns(strBlob, strColumns)
        
        ' Loop through the columns (if any exist) and set the
        ' properties of the corresponding control
        intColumns = UBound(strColumns) + 1
        If intColumns <> 0 Then
          For intColumn = 0 To intColumns - 1
            If Trim(strColumns(intColumn)) <> "" Then
               ' Split the line into values and assign properties
               strValues = Split(strColumns(intColumn), ":")
               Set ctl = frm.Controls(strValues(0))
               
               ctl.ColumnOrder = CInt(strValues(1))
               ctl.ColumnHidden = CBool(strValues(2))
               ctl.ColumnWidth = CLng(strValues(3))
            End If
          Next
        End If
      End If
  End Sub
  Private Sub GetOrderedColumns(ByVal strData As String, _
                                ByRef strColumns() As String)
      
      ' The data is passed, along with the empty array.
      ' I tried returning an array, but couldn't get it
      ' to work, so fell back to passing the array ByRef.
      
      Dim strTemp() As String
      Dim intCols As Integer
      Dim intCol As Integer
      Dim intCurr As Integer
      Dim strValues() As String
      
      On Error Resume Next
      
      ' Each datasheet control's info is on its own line,
      ' so split the blob by Line Feed/Carriage Returns
      strTemp = Split(strData, vbCrLf)
      intCols = UBound(strTemp) - 1
      ReDim strColumns(intCols)
      
      ' Loop through the unordered array and convert it into a
      ' sorted list: Col 1 at the top and Col n at the bottom.
      For intCol = 0 To intCols
          For intCurr = 0 To intCols
              strValues = Split(strTemp(intCurr), ":")
              If CInt(strValues(1)) = intCol + 1 Then
                  strColumns(intCol) = strTemp(intCurr)
                  Exit For
              End If
          Next
      Next
      
  End Sub
  Public Sub SaveUserColumnSetup(ByRef frm As Form)
      Dim ctl As Control
      Dim strBlob As String
      Dim strCtl As String
      Const cDatasheetView As Long = 2
      
      On Error Resume Next
      
      ' Only apply to forms in datasheet view.
      If frm.CurrentView <> cDatasheetView Then Exit Sub
      
      ' Loop through the controls, processing only those that matter.
      For Each ctl In frm.Controls
        Select Case ctl.ControlType
          Case acLabel, acLine, acSubform, acCommandButton
              ' do nothing for these controls.
          Case Else
            strCtl = ctl.Name & ":" & _
                     ctl.ColumnOrder & ":" & _
                     ctl.ColumnHidden & ":" & _
                     ctl.ColumnWidth & vbCrLf
            strBlob = strBlob & strCtl
        End Select
      Next
      
      SaveSetting "Demo", "Settings", frm.Name, strBlob
  End Sub


 


本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接

 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利