问题描述:
在我的数据库有两张表,一是产品表,其中 有ID,产品名称,规格,类别等字段,第二张表是“产品销售清单”,有字段ID,年,月,日,客户名称,业务员,客户名称,数量,单价,金额等字段。我现在想做一个查询,是按类别来查询,我不知道这个SQL该如何写了?是通过窗体来实现,并非在数据库中直接做视图。下面的代码是我的SQL前半部份,
Sql = "SELECT ID,年,月,日,发货单号,业务员,客户名称,产品名称,规格,单位,数量,单价,金额" &" FROM sale" & _
" WHERE (((CDate([月] & '-' & [日] & '-' & [年])) Between #" & CDate(TextBox1.Text) & "# And #" & CDate(TextBox2.Text) & "#))"&_问题就出在下面这句上,因为我是要求通过在窗体上输入产品类别在ComboBox1.Text 输入,所以接下来的这个SQL语句该如何写?
If ComboBox1.Text <> "" Then Sql = Sql & "and (????(cpda.cpmc = sale.产品名称))cpda.cprb='%" & ComboBox1.Text & "%')"
在我的数据库有两张表,一是产品表,其中 有ID,产品名称,规格,类别等字段,第二张表是“产品销售清单”,有字段ID,年,月,日,客户名称,业务员,客户名称,数量,单价,金额等字段。我现在想做一个查询,是按类别来查询,我不知道这个SQL该如何写了?是通过窗体来实现,并非在数据库中直接做视图。下面的代码是我的SQL前半部份,
Sql = "SELECT ID,年,月,日,发货单号,业务员,客户名称,产品名称,规格,单位,数量,单价,金额" &" FROM sale" & _
" WHERE (((CDate([月] & '-' & [日] & '-' & [年])) Between #" & CDate(TextBox1.Text) & "# And #" & CDate(TextBox2.Text) & "#))"&_问题就出在下面这句上,因为我是要求通过在窗体上输入产品类别在ComboBox1.Text 输入,所以接下来的这个SQL语句该如何写?
If ComboBox1.Text <> "" Then Sql = Sql & "and (????(cpda.cpmc = sale.产品名称))cpda.cprb='%" & ComboBox1.Text & "%')"
Sql = "SELECT ID,年,月,日,发货单号,业务员,客户名称,产品名称,规格,单位,数量,单价,金额" &" FROM sale" & _
" WHERE (((CDate([月] & '-' & [日] & '-' & [年])) Between #" & CDate(TextBox1.Text) & "# And #" & CDate(TextBox2.Text) & "#))"&_改为:
Sql = "SELECT ID,年,月,日,发货单号,业务员,客户名称,产品名称,规格,单位,数量,单价,金额 FROM sale " & _
"WHERE cDate([月] & '-' & [日] & '-' & [年]) Between #" & CDate(TextBox1.Text) & "# And #" & CDate(TextBox2.Text) & "#)"&_....
你可以在查询的事件中这样写:
1>验证输入,有误Exit Sub
2>验证无误后才生产连接字符串1>:
ComboBox1.Text=TRIM(ComboBox1.Text)
If comboBox1.text="" then
msgbox "请输入什么什么,不能为空!"
exit sub
End if
....如果还有其它的很多验证,同理.2>组合SQL:
Sql = "SELECT ID,年,月,日,发货单号,业务员,客户名称,产品名称,规格,单位,数量,单价,金额 FROM sale WHERE " & cDate([月] & '-' & [日] & '-' & [年]) Between #" & CDate(TextBox1.Text) & "# And #" & CDate(TextBox2.Text) & "# AND....后面的照写(...注:(????(cpda.cpmc = sale.产品名称)) 看不太明白...如果是两个表这间的关联查询,两个表的名称,应该放到From后面 FROM 表1,表2...WHERE 表1.某列=表2.某列 这样来联接..
你自已改改罢
------------------------------------------------------------------------------
你显然没有仔细看清楚我的回答,,,对于验证输入的情况,是由你在程序代码中去分辩的,而不是用SQL来分辩的。
" FROM sale" & _
" WHERE (((CDate([月] & '-' & [日] & '-' & [年])) Between #" & CDate(TextBox1.Text) & "# And #" & CDate(TextBox2.Text) & "#))"
If TextBox4.Text <> "" Then Sql = Sql & "and 客户名称 like '%" & TextBox4.Text & "%'"
If TextBox5.Text <> "" Then Sql = Sql & "and 产品名称&规格 like '%" & TextBox5.Text & "%'"
If TextBox6.Text <> "" Then Sql = Sql & "and 业务员 like '%" & TextBox6.Text & "%'"
If ComboBox1.Text <> "" Then Sql = Sql & "and( SELECT cpda.cprb FROM cpda LEFT OUTER JOIN sale ON (cpda.cpmc = sale.产品名称)) and cpda.cprb='%" & ComboBox1.Text & "%'"
If CheckBox1.Value = False Then Sql = Sql & "and 发货单号 not like '%★%'"
If CheckBox1.Value = True Then Sql = Sql & "and 发货单号 like '%★%'"
Sql = Sql & " ORDER BY 月,日,发货单号"这是全部的SQL语句,其中我问的就是在类别查询不为空的情况下要求查询的结果,我还是看不明白你的思路!能否直接帮我改出来!谢谢!
除了上述这一条,其他的均无问题。至于表也只有这一条是汲及两张表,其他的均是在SALE这一张表上工作!