问题﹕
在VB中调用Access报表﹐以下的是Access对象的引用. 
Dim  MSAccess  As  Access.Application  
Set  MSAccess  =  New  Access.Application  
MSAccess.OpenCurrentDatabase  (“D:\SalaryCount\SalaryCount.mdb”)  MSAccess.DoCmd.OpenReport "salary",acViewPreview,FilterName,WhereCondition
            
我想问 FilterName参数主要怎样用?
       WhereCondition 条件参数的具体写法是怎样?

解决方案 »

  1.   

    MSAccess9.0 OpenReport方法:DoCmd.OpenReport reportname[, view][, filtername][, wherecondition]reportname 字符串表达式,代表当前数据库中的报表的有效名称 。 
      如果在程序数据库中执行包含 OpenReport 方法的 Visual Basic 代码,Microsoft  Access 将首先在程序数据库中,使用该名称搜索报表,然后再到当前数据库中搜索。 view 下列固有常量之一: 
      acViewDesign
      acViewNormal(默认值)
      acViewPreview 
      如果该参数空缺,将假设为默认常量 (acViewNormal)。acViewNormal 将立刻打印报表。 filtername 字符串表达式,代表当前数据库中查询的有效名称。 wherecondition 字符串表达式,不包含 WHERE 关键字的有效 SQL WHERE 子句。 说明wherecondition 参数的最大长度为 32,768 个字符(而“宏”窗口中的 Where Condition 操作参数的最大长度为 256 个字符)。语法中的可选参数允许空缺,但是必须包含参数的逗号。如果有一个或多个位于末端的参数空缺,在指定的最后一个参数后面不需使用逗号。
    你先看看帮助吧,能自己解决的就自己解决,这样提高会快些.
      

  2.   

    这是不一定要高手也能解决的问题: OpenReport 操作
            使用 OpenReport 操作,可以在“设计”视图或“打印预览”中打开报表或立即打印报表。也可以限制需要在报表中打印的记录。设置OpenReport 操作具有下列参数:操作参数 说明 
    Report Name 打开报表的名称。“宏”窗口“操作参数”中的“报表名称”框中显示了当前数据库中所有的报表。这是必需的参数。 
    如果在程序数据库中执行包含 OpenReport 操作的宏,Microsoft Access 将首先在程序数据库中查找具有该名称的报表,然后再到当前数据库中查找。
     
    View 打开报表的视图。可在“视图”框中选择“打印”(立刻打印报表)、“设计”或“打印预览”。默认值为“打印”。 
    Filter Name 用于限制报表记录的筛选。可以输入一个已有的查询名称或保存为查询的筛选名称。不过,查询必须包含要打开的报表的所有字段,或将查询的 OutputAllFields 属性设置为“是”。 
    Where Condition 有效的 SQL WHERE 子句(不包含 WHERE 关键字),或 Microsoft Access 用来从报表的基表或基础查询中选择记录的表达式。如果选择“筛选名称”参数指定的筛选,Microsoft Access 将把 WHERE 子句应用于筛选的结果。 
    如果要打开报表,并使用某个窗体控件的数值来限制报表中的记录,可使用下列表达式:[fieldname] = Forms![formname]![controlname on form]FieldName 参数是要打开的报表的基础表或基础查询的名称。ControlNameon form 参数是窗体控件的名称,该控件包含需要报表记录与之匹配的数值。
     
      注意   Where 条件参数最长为 256 个字符。如果需要输入更复杂、更长的 SQL WHERE 子句,可使用 Visual Basic 中 DoCmd 对象的 OpenReport 方法。在 Visual Basic 中可以输入最长为 32,768 个字符的 SQL WHERE 子句。 
    说明View 参数的“打印”设置将使用当前的打印机设置立即打印报表,而不打开“打印”对话框。也可以使用 OpenReport 操作打开并设置报表,然后使用 PrintOut 操作进行打印。例如,可能要在打印前修改报表,或使用 PrintOut 操作改变打印机设置。用户所应用的筛选和 Where 条件将成为报表的 Filter 属性设置。OpenReport 操作与选择报表后单击“数据库”窗口中的“设计”按钮、“预览”按钮或“文件”菜单上的“打印”命令的功能相似。提示 如果要用不同的数据设置来打印类似的报表,可以使用筛选或 WHERE 子句来限制打印在报表上的记录,然后编辑宏,以应用不同的筛选或改变 Where Condition 参数。
    可以在“数据库”窗口中选择报表,并将其拖动到宏的操作行中,来自动创建在“打印预览”中打开报表的 OpenReport 操作。 
      

  3.   

    你用database连接不就可以了吗?
      

  4.   

    TO : stonegoldaustin(特纯中南海)
    TO  :  qingming81(晴明)我还有一个问题请教你们﹐我做的Access报表是根据Access的两个查询得到的﹐一个主表里面加上一个子报表﹐他们的输入参数相同﹐但我在VB里面调用
    Access报表时报表打不开。我不知道是查询条件写错还是其它问题﹐麻烦你们给看一下。代码如下﹕主报表的查询﹕
    SELECT w.CardID, s.SalaryYear+"年"+s.SalaryMonth+"月" AS SalaryDate, s.TotalSalary, s.Tax, s.PaySalary, s.WorkID
    FROM salary_count AS s, worker_info AS w
    WHERE w.CardID= [txtcardid] And s.SalaryYear=[txtyear] And s.SalaryMonth= [txtmonth] And s.WorkID=w.workid子报表的查询﹕
    SELECT w.workid, w.outlayid, outlayname, outlay
    FROM worker_outlay AS w, param_outlay AS p, worker_info m
    WHERE w.outlayid=p.outlayid and w.workid=m.workid and m.cardid=[txtcardid] And year(begindate)=[txtyear] And month(begindate)=[txtmonth]VB调用过程﹕
    Private Sub ExecuteReport(CardID As String, theYear As Integer, theMonth As Integer)
        Dim MSAccess As Access.Application
        Set MSAccess = New Access.Application
        MSAccess.OpenCurrentDatabase ("D:\SalaryCount\SalaryCount.mdb"
        strCondition = "[PayRoll]![txt_cardid]='" & CardID & "' 
    and [PayRoll].[txtYear]=" & theYear & " 
    and [PayRoll].[txtMonth]=" & theMont
        MSAccess.DoCmd.OpenReport "PayRoll_Main", acViewPreview
        MSAccess.CloseCurrentDatabase
        Set MSAccess = Nothing
        '注﹕[PayRoll]是报表名称
    End Sub
      

  5.   

    更正上句﹕
    MSAccess.DoCmd.OpenReport "PayRoll_Main", acViewPreview,, strCondition