iT邦幫忙

0

VB.NET2010無法傳遞值給Crystal Report

作業環境 OS:XP SP3 、Visual Studio 2010(使用VB開發)
下列是我的程式碼
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Windows.Forms
Imports System.Collections
Imports System.Data.OleDb

Public Class Form1
Dim str As String = "Provider=sqloledb;Data Source=dbserver;Initial
Catalog=MG;User Id=sa;Password=11350;"

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Form2.Show()
Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(str)
conn.Open()
Dim str1 As String = "select MB001,MB002,MB003,MB032,MA002,MB038
from MG.dbo.INVMB left join MG.dbo.PURMA on MB001 = MA002 WHERE
MB032 <> ' and MB001 ='1201K50001'"
Dim adp1 As OleDb.OleDbDataAdapter = New
OleDb.OleDbDataAdapter(str1, conn)
Dim set1 As DataSet = New DataSet adp1.Fill(set1, "1a")
DataGridView1.DataSource = set1.Tables("1a")
Dim cryRpt As New ReportDocument
cryRpt.Load("C:\test1\WindowsApplication1\WindowsApplication1\
CrystalReport1.rpt")
cryRpt.SetDatabaseLogon("sa", "11350")
cryRpt.SetDataSource(set1.Tables("la")) '---此段似乎沒有動作
Form2.CrystalReportViewer1.ReportSource = cryRpt

End Sub
End Class

上面是我查詢網路資料所寫出來的
我的SQL語法篩選出來應該只有一筆資料,在DataGridView也確實只顯示一筆資料,可是當我把Crystal Report 的來源也設定為此SQL語法,但是執行時,CrystalReportViewer看到的卻是把整個資料庫的資料全部抓出來了,我在Crystal Report上也只是擺上了這6個B001,MB002,MB003,MB032,MA002,MB038攔位而已,煩請幫我看看有哪邊虛曜再做修正的,執行時媒出現任何錯誤訊息

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
player
iT邦大師 1 級 ‧ 2014-01-22 16:30:21
最佳解答

1a ? la ?
你是數字1 與英文L小寫的 l
分不清楚嗎 ?

而且你都要用塞DataTable給報表了
為何還用 SetDatabaseLogon 設帳密?

ADO.NET 的 DataSet 與 DateTable
一但資料用Fill塞進去, 就可以離線抓資料了
所以報表的部份, 真的不用再給它資料庫的帳密

isaepfkeyr iT邦研究生 4 級 ‧ 2014-01-23 08:00:36 檢舉

關於la那邊我是用複製的,應該不會有問題
而用 SetDatabaseLogon 設帳密是因為只要一拿掉,執行的話就會跑出要我輸入帳號密碼的部份,我有試過把它拿掉,但是輸入密碼之後,依舊是抓取全部資料

isaepfkeyr iT邦研究生 4 級 ‧ 2014-01-23 09:30:36 檢舉

很莫名奇妙的,新開一個專案,把程式碼COPY過去,完全沒動啥..就出現我要的答案了,但是
訊息1找不到項目 'supportedRuntime' 的結構描述資訊。
訊息2找不到屬性 'version' 的結構描述資訊。
訊息3找不到屬性 'sku' 的結構描述資訊。
網路上有提到在<startup> 標籤內要加上 useLegacyV2RuntimeActivationPolicy="true"
但加上之後便會出現第4個訊息
訊息4找不到屬性 'sku' 的結構描述資訊。
這些東西還在

0
sam0407
iT邦大師 1 級 ‧ 2014-01-24 14:26:15

isaepfkeyr提到:

Dim set1 As DataSet = New DataSet adp1.Fill(set1, "1a")
DataGridView1.DataSource = set1.Tables("1a")
Dim cryRpt As New ReportDocument
cryRpt.Load("C:\test1\WindowsApplication1\WindowsApplication1\
CrystalReport1.rpt")
cryRpt.SetDatabaseLogon("sa", "11350")
cryRpt.SetDataSource(set1.Tables("la")) '---此段似乎沒有動作

player大已經把問題都點出了,還看不出來嗎?
看我節錄原PO的程式碼,第一行是從資料庫撈資料出來的DataSet裡的1a這個DataTable,
第二行是設定DataGridView1的資料來源是1a,到目前都還正常,相信沒有問題,
但您看最後一行cryRpt.SetDataSource(set1.Tables("la")),為什麼這裡變成la了,資料出不來是正常的

isaepfkeyr iT邦研究生 4 級 ‧ 2014-01-24 17:31:14 檢舉

聽你一提醒,仔細看了一下還真的是這樣,真是眼殘了,在測試過程中改了太多東西,謝謝提醒

我要發表回答

立即登入回答