sql = "SELECT DISTINCT CountPrice, CountNum ,Money1 FROM DataEntry, mrBaseInf WHERE DataEntry.EmpID='2' and mrBaseInf.EmpID = DataEntry.EmpID and Money1=1000"
rs.Open sql, conn, adOpenKeyset, adLockReadOnly
查询结果应该只有一条记录符合,我去SQL Server验证了一下,确实是一条记录符合的,但到了报表却出现了以下情况,查询的结果是多条的,其中所有DataEntry的2个字段都是符合要求的,而Money1的字段则不符合要求,它的字段和表里的字段一模一样,意思就是说Money1的字段只是把表里的字段全都列出来,根本有按要求显示,每个Money1字段前都有一个符合记录的DataEntry字段。
各位大大不知道看懂了没,要不我把表的结果有数据显示下:
比方说我按结果查询的记录只有一条: 6.00 35 1000.00
我知道表mrBaseInf里的字段Money1 有4个,分别是 1000.00 1400.00 1450.00 1350.00
我运行语句之后结果是这样的:
6.00 35 1000.00
6.00 35 1400.00
6.00 35 1450.00
6.00 35 1350.00
说明下DataEntry里CountryNum,CountryPrice字段并不只有6.00 35一项,我想可能是建报表的时候有问题,希望各位大大帮帮忙啊!!!!!!1
9 个解决方案
#1
给你个折中的办法,将查询的结果存入临时表中
然后用这个临时表和水晶报表连上
然后用这个临时表和水晶报表连上
#2
你的水晶报表版本? 8.5?9.2?
但是看你这样的情况应该属于报表模班出问题
你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题
但是看你这样的情况应该属于报表模班出问题
你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题
#3
临时表怎么连啊,大大说清楚点啊,5555555555
#4
我看你这么简单的问题根本不需要临时表处理
你要钻到临时表那也没折,哎
你要钻到临时表那也没折,哎
#5
我临时表创建好了,然后把它连接给水晶报表。那SELECT语句不变就行了么?
#6
那怎么半啊????
#7
是啊,当然sql语句不需要变就可以
给你段代码
这是水晶报表生成的窗体
Dim rs As ADODB.Recordset
Dim Report As New CrystalReport1
Dim msgtext As String
Private Sub Form_Load()
Dim strsql As String
strsql = "select * from dw_table where dw_bm='" & Form2.Text1.Text & "'"
Set rs = ExecuteSQL(strsql, msgtext)
Report.Database.SetDataSource rs
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
Screen.MousePointer = vbDefault
End Sub
Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Report = Nothing
End Sub
Dim msgtext As String
Dim mrc As ADODB.Recordset
Public Function ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sTokens() As String
'Dim SQL As String
On Error GoTo ExecuteSQL_Error
sTokens = Split(sql)
Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
cnn.Execute sql
MsgString = sTokens(0) & "query successful"
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条纪录"
End If
ExecuteSQL_Exit:
Set rst = Nothing
Exit Function
Set cnn = Nothing
ExecuteSQL_Error:
MsgString = "查询错误:" & Err.Description
Resume ExecuteSQL_Exit
End Function
Public Function ConnectString() As String
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False"
'ConnectString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=aa;Data Source=RJB-CL"
End Function
给你段代码
这是水晶报表生成的窗体
Dim rs As ADODB.Recordset
Dim Report As New CrystalReport1
Dim msgtext As String
Private Sub Form_Load()
Dim strsql As String
strsql = "select * from dw_table where dw_bm='" & Form2.Text1.Text & "'"
Set rs = ExecuteSQL(strsql, msgtext)
Report.Database.SetDataSource rs
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
Screen.MousePointer = vbDefault
End Sub
Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Report = Nothing
End Sub
Dim msgtext As String
Dim mrc As ADODB.Recordset
Public Function ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sTokens() As String
'Dim SQL As String
On Error GoTo ExecuteSQL_Error
sTokens = Split(sql)
Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
cnn.Execute sql
MsgString = sTokens(0) & "query successful"
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条纪录"
End If
ExecuteSQL_Exit:
Set rst = Nothing
Exit Function
Set cnn = Nothing
ExecuteSQL_Error:
MsgString = "查询错误:" & Err.Description
Resume ExecuteSQL_Exit
End Function
Public Function ConnectString() As String
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False"
'ConnectString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=aa;Data Source=RJB-CL"
End Function
#8
請 問daisy8675(莫依 MS MVP-VB)
"你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题"這句是怎么解釋的
我有遇到這樣的問題"
一個水晶報表中﹐我用到了三個表記錄﹐它們都有相同的一個字段﹐表1是表2和表3的主表﹐表2和表3是明細表,
表3是由多條表2生成的﹐所以表2的記錄數有時會大過表3﹐
我在傳的時候它們的記錄數仍是相同的﹐但到了報表中﹐表2和表3的記錄數就相同了﹐請問怎么回事
不好意在這里問﹐幫我解決了﹐我會把分補上的﹐謝謝
"你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题"這句是怎么解釋的
我有遇到這樣的問題"
一個水晶報表中﹐我用到了三個表記錄﹐它們都有相同的一個字段﹐表1是表2和表3的主表﹐表2和表3是明細表,
表3是由多條表2生成的﹐所以表2的記錄數有時會大過表3﹐
我在傳的時候它們的記錄數仍是相同的﹐但到了報表中﹐表2和表3的記錄數就相同了﹐請問怎么回事
不好意在這里問﹐幫我解決了﹐我會把分補上的﹐謝謝
#9
請 問daisy8675(莫依 MS MVP-VB)
"你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题"這句是怎么解釋的
我有遇到這樣的問題"
一個水晶報表中﹐我用到了三個表記錄﹐它們都有相同的一個字段﹐表1是表2和表3的主表﹐表2和表3是明細表,
表3是由多條表2生成的﹐所以表2的記錄數有時會大過表3﹐
我在傳的時候它們的記錄數仍是正確的﹐但到了報表中﹐表2和表3的記錄數就相同了﹐請問怎么回事
不好意在這里問﹐請樓主見諒,各位幫我解決了﹐我會把分補上的﹐謝謝
"你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题"這句是怎么解釋的
我有遇到這樣的問題"
一個水晶報表中﹐我用到了三個表記錄﹐它們都有相同的一個字段﹐表1是表2和表3的主表﹐表2和表3是明細表,
表3是由多條表2生成的﹐所以表2的記錄數有時會大過表3﹐
我在傳的時候它們的記錄數仍是正確的﹐但到了報表中﹐表2和表3的記錄數就相同了﹐請問怎么回事
不好意在這里問﹐請樓主見諒,各位幫我解決了﹐我會把分補上的﹐謝謝
#1
给你个折中的办法,将查询的结果存入临时表中
然后用这个临时表和水晶报表连上
然后用这个临时表和水晶报表连上
#2
你的水晶报表版本? 8.5?9.2?
但是看你这样的情况应该属于报表模班出问题
你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题
但是看你这样的情况应该属于报表模班出问题
你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题
#3
临时表怎么连啊,大大说清楚点啊,5555555555
#4
我看你这么简单的问题根本不需要临时表处理
你要钻到临时表那也没折,哎
你要钻到临时表那也没折,哎
#5
我临时表创建好了,然后把它连接给水晶报表。那SELECT语句不变就行了么?
#6
那怎么半啊????
#7
是啊,当然sql语句不需要变就可以
给你段代码
这是水晶报表生成的窗体
Dim rs As ADODB.Recordset
Dim Report As New CrystalReport1
Dim msgtext As String
Private Sub Form_Load()
Dim strsql As String
strsql = "select * from dw_table where dw_bm='" & Form2.Text1.Text & "'"
Set rs = ExecuteSQL(strsql, msgtext)
Report.Database.SetDataSource rs
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
Screen.MousePointer = vbDefault
End Sub
Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Report = Nothing
End Sub
Dim msgtext As String
Dim mrc As ADODB.Recordset
Public Function ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sTokens() As String
'Dim SQL As String
On Error GoTo ExecuteSQL_Error
sTokens = Split(sql)
Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
cnn.Execute sql
MsgString = sTokens(0) & "query successful"
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条纪录"
End If
ExecuteSQL_Exit:
Set rst = Nothing
Exit Function
Set cnn = Nothing
ExecuteSQL_Error:
MsgString = "查询错误:" & Err.Description
Resume ExecuteSQL_Exit
End Function
Public Function ConnectString() As String
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False"
'ConnectString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=aa;Data Source=RJB-CL"
End Function
给你段代码
这是水晶报表生成的窗体
Dim rs As ADODB.Recordset
Dim Report As New CrystalReport1
Dim msgtext As String
Private Sub Form_Load()
Dim strsql As String
strsql = "select * from dw_table where dw_bm='" & Form2.Text1.Text & "'"
Set rs = ExecuteSQL(strsql, msgtext)
Report.Database.SetDataSource rs
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
Screen.MousePointer = vbDefault
End Sub
Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Report = Nothing
End Sub
Dim msgtext As String
Dim mrc As ADODB.Recordset
Public Function ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sTokens() As String
'Dim SQL As String
On Error GoTo ExecuteSQL_Error
sTokens = Split(sql)
Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
cnn.Execute sql
MsgString = sTokens(0) & "query successful"
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条纪录"
End If
ExecuteSQL_Exit:
Set rst = Nothing
Exit Function
Set cnn = Nothing
ExecuteSQL_Error:
MsgString = "查询错误:" & Err.Description
Resume ExecuteSQL_Exit
End Function
Public Function ConnectString() As String
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False"
'ConnectString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=aa;Data Source=RJB-CL"
End Function
#8
請 問daisy8675(莫依 MS MVP-VB)
"你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题"這句是怎么解釋的
我有遇到這樣的問題"
一個水晶報表中﹐我用到了三個表記錄﹐它們都有相同的一個字段﹐表1是表2和表3的主表﹐表2和表3是明細表,
表3是由多條表2生成的﹐所以表2的記錄數有時會大過表3﹐
我在傳的時候它們的記錄數仍是相同的﹐但到了報表中﹐表2和表3的記錄數就相同了﹐請問怎么回事
不好意在這里問﹐幫我解決了﹐我會把分補上的﹐謝謝
"你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题"這句是怎么解釋的
我有遇到這樣的問題"
一個水晶報表中﹐我用到了三個表記錄﹐它們都有相同的一個字段﹐表1是表2和表3的主表﹐表2和表3是明細表,
表3是由多條表2生成的﹐所以表2的記錄數有時會大過表3﹐
我在傳的時候它們的記錄數仍是相同的﹐但到了報表中﹐表2和表3的記錄數就相同了﹐請問怎么回事
不好意在這里問﹐幫我解決了﹐我會把分補上的﹐謝謝
#9
請 問daisy8675(莫依 MS MVP-VB)
"你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题"這句是怎么解釋的
我有遇到這樣的問題"
一個水晶報表中﹐我用到了三個表記錄﹐它們都有相同的一個字段﹐表1是表2和表3的主表﹐表2和表3是明細表,
表3是由多條表2生成的﹐所以表2的記錄數有時會大過表3﹐
我在傳的時候它們的記錄數仍是正確的﹐但到了報表中﹐表2和表3的記錄數就相同了﹐請問怎么回事
不好意在這里問﹐請樓主見諒,各位幫我解決了﹐我會把分補上的﹐謝謝
"你是不是才用多个ado去连接水晶报表???一般多个ado就会产生你这个问题"這句是怎么解釋的
我有遇到這樣的問題"
一個水晶報表中﹐我用到了三個表記錄﹐它們都有相同的一個字段﹐表1是表2和表3的主表﹐表2和表3是明細表,
表3是由多條表2生成的﹐所以表2的記錄數有時會大過表3﹐
我在傳的時候它們的記錄數仍是正確的﹐但到了報表中﹐表2和表3的記錄數就相同了﹐請問怎么回事
不好意在這里問﹐請樓主見諒,各位幫我解決了﹐我會把分補上的﹐謝謝