怎么在水晶报表中实现SQL 查询

已举报 回答 关注
怎么在水晶报表中实现SQL 查询
问在线客服
扫码问在线客服
  • 回答数

    8

  • 浏览数

    5,277

8个回答 默认排序
  • 默认排序
  • 按时间排序

G11

已采纳
给你一个例子 基本可以传递参数 到水晶报表 可以查询 并且可以将参数字段显示为你需要的值
以前采用vb6做的动态传递水晶报表参数字段,存在一个缺陷就是在设计水晶报表的时候没有按照注释的那里写的(直接拖参数字段到预览的界面)就不会出现水晶报表提示要输入离散值的消息框。其实也不完全是这样的,有时我按照这种方式操作仍然有这个输入离散值消息框的提示,具体是什么原因造成的还不是很清楚,估计开发水晶报表的明白内部机制的原因,我只想能顺畅的使用就可以了,可出现不相关的输入提示就直接影响到客户使用程序。

我在做DotNet2005时用的是水晶报表10,在传递参数后。有加入了设置显示报表控件的参数对象集合为传递的参数值【CRViewer91.ParameterFieldInfo = m_Report.ParameterFields 】运行程序就没有这个输入离散值的提示。vb6使用水晶报表9.0不知道加入这个设置是否能解决问题。暂时我还没有条件测试主要是计算机上没有安装水晶报表9,不过也是一种解决这个问题的办法。先在这里保存起来,待有条件了测试下,没有这条语句可能在设计报表rpt文件的时候和程序动态调用可就要来回的测试了 。 哈~~~~~~

Private Sub DisplayReport1()
'' ==========================================================
' 开发人员:段利庆
' 编写时间:2008-09-01
' 过程名称:DisplayReport
' 参数说明:
' 功能说明:动态载入水晶报表文件(*.rpt)显示打印预览
'
' 其他说明:程序采用的是Crystal Reports 9.1版本
' 工程引用:Crystal Reports 9 ActiveX Designer Design and Runtime Library
' 控件:CRViewer91
'
'
'' ==========================================================

'*中央错误处理
On Error GoTo PROC_ERR

Dim m_Application As New CRAXDDRT.Application
Dim m_Report As CRAXDDRT.Report

Dim strSQL As String
strSQL = "SELECT * FROM 视图_收费_计量仪表 "

Dim strRptPath As String
strRptPath = App.Path & "\Crystal_RPT_Para\Sell_Meter.rpt"
Debug.Print "strRptPath:" & strRptPath

Set m_Report = Nothing
Set m_Report = m_Application.OpenReport(strRptPath, 1)
'*防止弹出水晶报表数据库登录对话框
m_Report.Database.Tables.Item(1).TestConnectivity
m_Report.Database.Tables.Item(1).ConnectBufferString = objdata.ConnectionString
m_Report.SQLQueryString = strSQL

'****************************************************
'*参数字段传递参数
'*
'*搞了2天了终于找到原因了 08-09-03
'*1.在新建一个参数字段,一定要直接拖放到预览里面
'* 否则拖到设计里面就要弹出输入离散值的消息框
'*
'*2.GetItemByName("MyParaT") 参数是参数字段的名称
'*
m_Report.DiscardSavedData
m_Report.ParameterFields.GetItemByName("MyParaT").ClearCurrentValueAndRange
m_Report.ParameterFields.GetItemByName("MyParaT").AddCurrentValue (Text1.Text)

m_Report.ParameterFields.GetItemByName("k1").ClearCurrentValueAndRange
m_Report.ParameterFields.GetItemByName("k1").AddCurrentValue (Text1.Text)

m_Report.ParameterFields.GetItemByName("k2").ClearCurrentValueAndRange
m_Report.ParameterFields.GetItemByName("k2").AddCurrentValue (Text1.Text)

'*-----------------------------------------------------
'* 以下这句是否能彻底解决弹出离散值输入框问题
'*是根据vb2005 Crystal Report10 顺畅的处理结果得出的
'*2009-08-26
'CRViewer91.ParameterFieldInfo = m_Report.ParameterFields
'*传递的对象 用下面的语句
'*Set CRViewer91.ParameterFieldInfo = m_Report.ParameterFields
'*-----------------------------------------------------
'****************************************************

CRViewer91.DisplayGroupTree = False
CRViewer91.ReportSource = m_Report
CRViewer91.Zoom 1
CRViewer91.ViewReport

'*结束子程序
PROC_EXIT:
Exit Sub
'*错误处理,显示出错信息
PROC_ERR:

MsgBox " ErrNumber: " & Err.Number & vbCrLf & _
"ErrDescription: " & Err.Description & vbCrLf & _
" Module: " & Me.Caption & vbCrLf & _
" Procedure: " & "DisplayReport"

GoTo PROC_EXIT
End Sub
取消 评论
mysql使用limit进行筛选
select * from user where 1=1 limit 10;(取10条)
oracle用number
select * from user where 1=1 number 10;(取10条)
取消 评论
SQL 关键字 where ,类型转换Convert
历史数据,多久后的数据,假如有表A,有2个字段a,b
a 为int 类型,b 为日期类型
转换日期以及日期范围SQL 如下:
select * from A where b between convert(datetime,'2015-08-01 08:08:08' ) and convert(datetime, '2015-08-01 08:12:08')
以上SQL 就是查询历史记录,日期为'2015-08-01 08:08:08'与 '2015-08-01 08:12:08'
之间的数据
创建报表可以通过Microsoft SQL Server 2008 R2中的Business Intelligence Development Studio创建,也可以在Microsoft visual studio中通过使用ReportView控件来创建报表。本实例采用Microsoft SQL Server 2008 R2中的Business Intelligence Development Studio创建报表。
创建报表服务器项目
在制作报表之前,要先创建一个报表服务器项目,在其中可以存放若干报表供用户调用。在Business Intelligence Development Studio中创建报表服务器项目的操作步骤如下。
选择【开始】|【所有程序】|【Microsoft SQL Server 2008 R2】|【Business Intelligence Development Studio】,启动商业智能开发环境。在菜单栏中选择【文件】|【新建】|【项目】命令,弹出【新建项目】对话框。在【项目类型】列表中选择【商业智能项目】选项,在【模板】列表中选择【报表服务器项目向导】选项,在【名称】文本框中输入【报表项目4】,单击【确定】按钮以创建项目。

单击【下一步】按钮进入创建数据源的操作。
创建数据源
数据源从本质上讲就是对从中获取数据位置的连接的定义,它可以是与一个SQL Server数据源的连接,也可以是与任意OLE DB或ODBC数据源的连接。
数据源是Reporting Services中最为重要的内容。无论建立的报表是何种类型,也无论报表是使用报表模型器还是报表项目,它都以某种方式发挥着作用。数据源有以下两种类型:嵌入式和共享式。
在【新建数据源名称】中输入【bookshop】、在【连接字符串】中输入【Data source=localhost;Initial catalog=bookshop】,单击【下一步】进入【设计查询】界面;

设计报表:
在Business Intelligence Development Studio的菜单栏中选择【视图】|【工具箱】命令,使用【工具箱】中的【报表项】设计报表,完善报表。
发布报表
报表设计完成后,接下来需要对报表进行部署,操作步骤如下:
在Business Intelligence Development Studio的菜单栏中选择【项目】|【报表项目4属性】命令,弹出【报表项目4属性页】对话框。在TargetReportFolder字段中,设置登录到报表管理器时想驻留报表的文件夹。在TargetServerURL字段中,输入报表服务器的Web服务URL。在本例中,该URL很简单,为http://localhost/ReportServer 。确定这些参数后,单击【确定】按钮返回Business Intelligence Development Studio准备进行部署。
启动浏览器,打开地址http://localhost/Reports ,就可以看到SQL Server Reporting Services 主文件夹,在文件夹中可以进行一些设置。

取消 评论
这类似于卡片分栏报表,用finereport报表轻松实现,找了一个效果图:

取消 评论
create table #A (empname char(10),dat datetime)
insert into #a select '张三','2014-01-02'
insert into #a select '张三','2014-01-06'
insert into #a select '李四','2014-01-02'
create table #b (dat datetime)
declare @a datetimedeclare @b datetime
select @a=min(dat) from #a
select @b=max(dat) from #a
while (@a<=@b)
begin
insert into #b
select @a
set @a=dateadd(day,1,@a)
end

select t3.* from (select distinct t1.empname,t2.dat from #a t1, #b t2) t3where t3.empname not in (select empname from #a where t3.dat=#a.dat)order by t3.empname,t3.dat
取消 评论
select * from 表名 这事查找该表的所有数据
select * from 表名 where tdate='日期'查找莫一时间的数据,你的问题描述不清楚呀,如果调出来,可把查出来的数据复制出来即可
取消 评论
select t.*from(select 表名.*,row_number () over (order by rowid) rn from 表名) twhere rn<=100第二次限制下rn的取值范围就行啊
select t.*from(select 表名.*,row_number () over (order by rowid) rn from 表名) twhere rn>100 and rn<=200
取消 评论
善用oracle的rownum, 这些个问题都能解决
取消 评论
ZOL问答 > 相机 > 其他分类 > 怎么在水晶报表中实现SQL 查询

举报

感谢您为社区的和谐贡献力量请选择举报类型

举报成功

经过核实后将会做出处理
感谢您为社区和谐做出贡献

扫码参与新品0元试用
晒单、顶楼豪礼等你拿

扫一扫,关注我们
提示

确定要取消此次报名,退出该活动?