查看: 1929|回复: 38
|
Johe07的VS2005~VB.Net问题集 - 不能加入parameter进query (#38楼)
[复制链接]
|
|
各位,以下是我写的code来show出报告。。。
Imports System.data.sqlclient
Imports System.Data
----------------------------------------------------------
Public Class frmMPL
Private Sub CrystalReportViewer1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CrystalReportViewer1.Load
End Sub
Private Sub frmMPL_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim objConn As SqlConnection
Dim daT1 As SqlDataAdapter
Dim DataSet1 As DataSet
Dim strConnection As String
Dim strSQL As String
strConnection = "User ID=" & Lid & " ; Password =" & Lpwd & " ; Persist Security Info=False;Initial Catalog=mrpdb_dom ;Data Source=store-svr"
objConn = New SqlConnection(strConnection)
objConn.Open()
strSQL = "SELECT DISTINCT line_mst.line_c, line_mst.line_nm, bom_mst.material_no, bom_mst.bom_qty, material_mst.material_nm, " _
& "material_mst.bag_qty,material_mst.material_kd, mps_data.lot_no, proc_combi_mst.product_no, proc_combi_mst.cusdesch_c1, " _
& "proc_combi_mst.cusdesch_c2(, proc_combi_mst.intdesch_c, mps_data.plan_qty)" _
& "FROM line_mst INNER JOIN" _
& "proc_combi_mst ON line_mst.line_c = proc_combi_mst.assy_line_c INNER JOIN" _
& "bom_mst ON proc_combi_mst.product_no = bom_mst.product_no AND" _
& "proc_combi_mst.cusdesch_c1 = bom_mst.cusdesch_c1 AND proc_combi_mst.cusdesch_c2 = bom_mst.cusdesch_c2 AND" _
& "proc_combi_mst.intdesch_c = bom_mst.intdesch_c INNER JOIN" _
& "material_mst ON bom_mst.material_no = material_mst.material_no INNER JOIN" _
& "mps_data ON proc_combi_mst.product_no = mps_data.product_no AND" _
& "proc_combi_mst.cusdesch_c1 = mps_data.cusdesch_c1 AND proc_combi_mst.cusdesch_c2 = mps_data.cusdesch_c2 AND" _
& "proc_combi_mst.intdesch_c = mps_data.intdesch_c And line_mst.line_c = mps_data.line_c" _
& "WHERE (line_mst.line_c = 'HYAL5DM') AND (bom_mst.issue_dest = 'C&C') AND (mps_data.plan_qty <> '0') AND" _
& "(LEFT(material_mst.material_kd, 1) <= 'A') AND (mps_data.lot_no = '2') OR" _
& "(line_mst.line_c = 'HYAL5DM') AND (bom_mst.issue_dest = 'C&C') AND (mps_data.plan_qty <> '0') AND (mps_data.lot_no = '2') AND" _
& "(material_mst.material_kd = 'TER')" _
& "ORDER BY material_mst.material_kd, bom_mst.material_no"
daT1 = New SqlDataAdapter(strSQL, objConn)
DataSet1 = New DataSet
daT1.FillSchema(DataSet1, SchemaType.Source, "line_mst" )
daT1.Fill(DataSet1, "line_mst,proc_combi,bom_mst,material_mst,mps_data" )
Dim rpt As New MatRpt1
rpt.SetDataSource(DataSet1)
CrystalReportViewer1.ReportSource = rpt
objConn.Close()
End Sub
End Class
然后,当跑道我红色那两行时。。。就给我error message
"Line 1: Incorrect syntax near ','."
请问,我的code是哪里出了问题吗?
[ 本帖最后由 johe07 于 15-9-2006 09:46 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 10-3-2006 02:17 PM
|
显示全部楼层
如果不用红色那两行,直接用以下这一行代替会怎样?
daT1.Fill(DataSet1) |
|
|
|
|
|
|
|

楼主 |
发表于 10-3-2006 02:19 PM
|
显示全部楼层
还是得到一样的error message
还是我在DATASET那里,需要注意些什么吗?
[ 本帖最后由 johe07 于 10-3-2006 02:47 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 10-3-2006 02:49 PM
|
显示全部楼层
>>proc_combi_mst.cusdesch_c2(, proc_combi_mst.intdesch_c, mps_data.plan_qty)"
请问这行的cusdesch_c2(, 是...? |
|
|
|
|
|
|
|

楼主 |
发表于 10-3-2006 03:07 PM
|
显示全部楼层
啊!!!!!
可以了可以了!!!!!
谢谢astral兄的细心观察!!!!
我真是太自信了。。。以为自己的query没有错。。。。
它通过了。。。
可是,里面的资料是空的。。。。
我CR里面design的data应该是拿我dataset.xsd里面tabel的field的是吗?
pass parameter的话,我CR里面的"Parameter Field",是不是要设定,然后是从我的coding里pass过去的?我这样的概念对吗? |
|
|
|
|
|
|
|
发表于 10-3-2006 03:23 PM
|
显示全部楼层
原帖由 johe07 于 10-3-2006 03:07 PM 发表
啊!!!!!
可以了可以了!!!!!
谢谢astral兄的细心观察!!!!
我真是太自信了。。。以为自己的query没有错。。。。
它通过了。。。
可是,里面的资料是空的。。。。
我CR里面design的data应该 ...
你是用push method? 为何不尽量用pull method呢? |
|
|
|
|
|
|
|

楼主 |
发表于 10-3-2006 04:15 PM
|
显示全部楼层
原帖由 astral 于 10-3-2006 15:23 发表
你是用push method? 为何不尽量用pull method呢?
pull 是要怎样的呢?
我pass parameter就是属于push method了吗? |
|
|
|
|
|
|
|
发表于 10-3-2006 11:07 PM
|
显示全部楼层
原帖由 johe07 于 10-3-2006 04:15 PM 发表
pull 是要怎样的呢?
我pass parameter就是属于push method了吗?
如果我没记错的话。。。
pull: 由CR送出statement来retrieve data
push: 准备好datasource然后送给CR. |
|
|
|
|
|
|
|

楼主 |
发表于 13-3-2006 11:59 AM
|
显示全部楼层
我始终还是没有解决到问题。。。
我不知道发生了什么事,也许我少做一个步骤。。。。
由谁可以告诉我发生了什么事?
在我的dataset里面的table, 当我去preview data时,是有data的。
但是,当我把field拉到CR里面是,看不到data...
(就是说在CR里browse data时,是空的)
所以,show report时,我是看到field的header。。。。没有资料的。。。
  |
|
|
|
|
|
|
|
发表于 13-3-2006 11:36 PM
|
显示全部楼层
能不能大概描述你在CR里是怎样design? 包括如何取得fields |
|
|
|
|
|
|
|

楼主 |
发表于 14-3-2006 08:25 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 14-3-2006 09:11 AM
|
显示全部楼层
你可以试看:
dim ds as new MPLS.DataSet1
然后fill ds
再把ds pass给CR
看看会结果如何 |
|
|
|
|
|
|
|

楼主 |
发表于 31-3-2006 08:53 AM
|
显示全部楼层
之前的问题,已经解决了。。。。问题出现在我的dataset design有问题。。。
经过一番“折磨”。。。终于解决了。。。
但是,有遇到了另一个问题,就是无法update dataset
以下是我program要做的方法:
同一个dataset里,有3个table,
1个是table,给CR show out data的
2个是tableAdapter,从我SQL svr里面拉出来的table
我写了一个query,他成功通过了我的dataset在CR里显示出来了。。。
不过现在,我要把那些用query拉出来的data 储存进我的SQL table里面
于是,我就DS.Fill进了我tableAdapter里,也成功Fill进去了。。。
但是,当我去DS.Update时,却没有update到任何data 进我的SQL table里
以下是我的coding:
- Imports System
- Imports System.data.sqlclient
- Imports System.Data
- ------------------------------------------------------
- Public Class frmMPL
- Inherits System.Windows.Forms.Form
- #Region " Windows Form Designer generated code "
- ------------------------------------------------------
- Private Sub frmMPL_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Dim objConn As SqlConnection
- Dim daT1 As SqlDataAdapter
- Dim datTEMP As SqlDataAdapter
-
- Dim strConnection As String
- Dim strSQL, ln_cd(10), sSQL As String
- Dim i, k, m As Integer
- strConnection = "User ID=" & Lid & " ;Password =" & Lpwd & " ;Persist Security Info=False;Initial Catalog=mrpdb_dom ;Data Source=store-svr"
- objConn = New SqlConnection(strConnection)
- i = 1
- k = 1
- For i = 1 To Max - 1
- ln_cd(k) = "(line_mst.line_c = '" & l_cd(i) & "') AND (bom_mst.issue_dest = 'C&C') AND (mps_data.plan_qty <> '0') AND " & _
- "(LEFT(material_mst.material_kd, 1) <= 'A') AND (LEFT(mps_data.lot_no,2) = " & wk_no & ") OR " & _
- "(line_mst.line_c = '" & l_cd(i) & "') AND (bom_mst.issue_dest = 'C&C') AND (mps_data.plan_qty <> '0') AND (LEFT(mps_data.lot_no,2) = " & wk_no & ") AND " & _
- "(material_mst.material_kd = 'TER')"
- k = k + 1
- Next
- m = 1
- For m = 1 To k - 1
- If m = 1 Then
- sSQL = ln_cd(m)
- Else
- sSQL = sSQL + " OR " + ln_cd(m)
- End If
- m = m + 1
- Next
- strSQL = _
- "SELECT DISTINCT " & _
- "line_mst.line_c, line_mst.line_nm, bom_mst.material_no, bom_mst.bom_qty, material_mst.material_nm, material_mst.bag_qty, " & _
- "material_mst.material_kd, mps_data.lot_no, proc_combi_mst.product_no, proc_combi_mst.cusdesch_c1, proc_combi_mst.cusdesch_c2, " & _
- "proc_combi_mst.intdesch_c, mps_data.plan_qty " & _
- "FROM ((((line_mst INNER JOIN " & _
- "proc_combi_mst ON line_mst.line_c = proc_combi_mst.assy_line_c) INNER JOIN " & _
- "bom_mst ON proc_combi_mst.product_no = bom_mst.product_no AND proc_combi_mst.cusdesch_c1 = bom_mst.cusdesch_c1 AND " & _
- "proc_combi_mst.cusdesch_c2 = bom_mst.cusdesch_c2 AND proc_combi_mst.intdesch_c = bom_mst.intdesch_c) INNER JOIN " & _
- "material_mst ON bom_mst.material_no = material_mst.material_no) INNER JOIN " & _
- "mps_data ON proc_combi_mst.product_no = mps_data.product_no AND proc_combi_mst.cusdesch_c1 = mps_data.cusdesch_c1 AND " & _
- "proc_combi_mst.cusdesch_c2 = mps_data.cusdesch_c2 AND proc_combi_mst.intdesch_c = mps_data.intdesch_c AND " & _
- "line_mst.line_c = mps_data.line_c) " & _
- "where " & sSQL & " ORDER BY material_mst.material_kd, bom_mst.material_no"
- daT1 = New SqlDataAdapter(strSQL, objConn)
- datTEMP = New SqlDataAdapter(strSQL, objConn)
- Dim DS As New DataSet1
- Dim DS2 As New DataSet1
- ' Create command builder. This line automatically generates the
- ' update commands for you, so you don't
- ' have to provide or create your own.
- Dim datTEMPCommandBuilder As SqlCommandBuilder = New SqlCommandBuilder(datTEMP)
- ' Set the MissingSchemaAction property to AddWithKey because
- ' Fill will not cause primary key & unique key information to
- ' be retrieved unless AddWithKey is specified.
- datTEMP.MissingSchemaAction = MissingSchemaAction.AddWithKey
- datTEMP.Fill(DS, "MPLTemp")
- datTEMP.Update(DS, "MPLTemp")
- daT1.Fill(DS, "line_mst")
- Dim test As New MatRpt1
- test.SetDataSource(DS)
- CrystalReportViewer1.ReportSource = test
- objConn.Close()
- End Sub
- End Class
复制代码

我的Dataset1
我是要update data回去我的MPLTemp的SQL table 里
以下是我跑program是检测到它有Fill到data进去

我找了一些资料,都说要assign一些parameter然后才可以update回去。。。
但是我不知道,我的data是query出来的。。。。
我要如何assign parameter给它update回去呢? |
|
|
|
|
|
|
|
发表于 3-4-2006 09:13 AM
|
显示全部楼层
>datTEMP.Fill(DS, "MPLTemp")
>datTEMP.Update(DS, "MPLTemp")
不明白这连续的两行是为了什么呢? |
|
|
|
|
|
|
|

楼主 |
发表于 3-4-2006 12:04 PM
|
显示全部楼层
原帖由 astral 于 3-4-2006 09:13 发表
>datTEMP.Fill(DS, "MPLTemp")
>datTEMP.Update(DS, "MPLTemp")
不明白这连续的两行是为了什么呢?
>datTEMP.Fill(DS, "MPLTemp")
这行是我把query出来的data, 放进我的DS里的"MPLTemp" table
>datTEMP.Update(DS, "MPLTemp")
这行是我要把data update 回去我SQL的MPLTemp table
这个MPLTemp table,是我直接从我的SQL拉出来,放在我的DS里。
也就是说,如果我在我的DS里要preview MPLTemp里面的data, 我是可以看到和在SQL里面一抹一样的data...
(希望我这样说,大家会明白吧?) |
|
|
|
|
|
|
|
发表于 3-4-2006 01:33 PM
|
显示全部楼层
原帖由 johe07 于 3-4-2006 12:04 PM 发表
>datTEMP.Fill(DS, "MPLTemp")
这行是我把query出来的data, 放进我的DS里的"MPLTemp" table
>datTEMP.Update(DS, "MPLTemp")
这行是我要把data update 回去我SQL的 ...
你能不能messagebox.show列出你的update command的commandtext啊? 我想看看你的sqlcommandbuilder帮你弄出了什么update statement... |
|
|
|
|
|
|
|

楼主 |
发表于 3-4-2006 01:51 PM
|
显示全部楼层
原帖由 astral 于 3-4-2006 13:33 发表
你能不能messagebox.show列出你的update command的commandtext啊? 我想看看你的sqlcommandbuilder帮你弄出了什么update statement...
我没有update的command...
我上网找了几个例子, 都说,那个sqlcommandbuilder会自动帮我们create command...我们不用自己写。。。。所以,那些例子中,都没有show出,我们需要些什么command去update它。。。。
这就是我奇怪的一点。。。
我附上一个例子,我就是参考那样的做法。。。
可能我看错,或露了几个步骤,或许你们可以看得出来。。。
例子按这里 |
|
|
|
|
|
|
|
发表于 3-4-2006 02:28 PM
|
显示全部楼层
原帖由 johe07 于 3-4-2006 01:51 PM 发表
我没有update的command...
我上网找了几个例子, 都说,那个sqlcommandbuilder会自动帮我们create command...我们不用自己写。。。。所以,那些例子中,都没有show出,我们需要些什么command去update它。。 ...
对,它会根据你的SQLDataAdapter的SelectCommand来generate 其它的command.
不过是single table哦...
用这个列出你的update command来看看
Dim mysqlcmdbuilder As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(SqlDataAdapter1)
MessageBox.Show(mysqlcmdbuilder.GetUpdateCommand.CommandText) |
|
|
|
|
|
|
|

楼主 |
发表于 3-4-2006 03:11 PM
|
显示全部楼层
原帖由 astral 于 3-4-2006 14:28 发表
对,它会根据你的SQLDataAdapter的SelectCommand来generate 其它的command.
不过是single table哦...
用这个列出你的update command来看看
Dim mysqlcmdbuilder As SqlClient.SqlCommandBuilder = New SqlC ...
你是说,在我的.Update(DS,"xxxx") 之后,放这个message box? |
|
|
|
|
|
|
|
发表于 3-4-2006 03:15 PM
|
显示全部楼层
原帖由 johe07 于 3-4-2006 03:11 PM 发表
你是说,在我的.Update(DS,"xxxx") 之后,放这个message box?
不是...是在你用了sqlcommandbuilder过后,show那个commandbuilder里的updatecommand来看看 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|