将两个查询结果存储在第三个变量中

Posted

技术标签:

【中文标题】将两个查询结果存储在第三个变量中【英文标题】:Store two Queries result in third variable 【发布时间】:2014-03-20 11:17:20 【问题描述】:

这段代码有什么问题:

Visual Basic 6.0 访问 2007

Private Sub Command1_Click()
Dim Sell_tbl, Stock_Bottle, res As String


Sell_tbl = "SELECT Sum((Quantity)*12) FROM Sell_Detail Where Cateogry='Large'"
Stock_Bottle = "Select Sum(No_Of_Bottle) FROM Add_Bottle Where Cateogry='Large'"

res = ((Sell_tbl) - (Stock_Bottle))

Adodc1.RecordSource = Sell_tbl
Adodc1.Refresh
Adodc1.Caption = Adodc1.RecordSource
End Sub

类型不匹配错误

我尝试将其结果转换为其他数据类型,但它不起作用。谁能帮帮我?

【问题讨论】:

减号假设在您的数据库中使用 SQL 语言,gokhanatil.com/2010/10/minus-and-intersect-in-mysql.html 非常感谢您的好意我是这个网站的新手,尽量避免错误。 谢谢,但你能强调为什么它的节目类型不匹配错误,因为当我分别运行这两个查询时它工作正常..... This、Subtract two Queries Result、Use SQL Statement in access 2007 和 Using Adodc control to subtract Queries Result 都是同一个问题。 @Deanna 好的,然后给我一个答案,满足我所有的问题 【参考方案1】:

这些都不是记录集,每个都是字符串:

Sell_tbl = "SELECT Sum((Quantity)*12) FROM Sell_Detail Where Cateogry='Large'"
Stock_Bottle = "Select Sum(No_Of_Bottle) FROM Add_Bottle Where Cateogry='Large'"

你需要一些东西:

Dim Sell_tbl As DAO.Recordset
Dim Stock_Bottle As DAO.Recordset

Set Sell_tbl = CurrentDB.Openrecordset _
    ("SELECT Sum((Quantity)*12) As Qty FROM Sell_Detail Where Cateogry='Large'")
Set Stock_Bottle = CurrentDB.Openrecordset _
    ("Select Sum(No_Of_Bottle) As Btl FROM Add_Bottle Where Cateogry='Large'")

res = Sell_tbl!Qty - Stock_Bottle!Btl

以上是粗略的提纲,可以整理一下。

【讨论】:

currentdb是什么意思?请在我的程序帮助中未显示该选项。 你用的是什么程序? CurrentDb 在 MS Access 模块中可用。 我使用visual basic 6.0作为前端,访问作为后端 还有一个问题,您使用 DAO 连接 db,ADODB 或 adodc 怎么样?我对 DAO 不太了解,所以我的首要任务是 adodc,请 ADODB 帮助 使用 MS Access support.microsoft.com/kb/148361DAO 几乎总是更快【参考方案2】:

错误的原因是因为声明:

s = ((Sell_tbl) - (Stock_Bottle))

如果您查看该行上方,您正在为 SQL 设置两个字符串变量——这是文本而不是数字。 您需要使用这些 sql 字符串打开记录集,然后获取结果,然后执行数学运算。

【讨论】:

谢谢,我知道了导致失败的原因【参考方案3】:

这就是我想要的......

Private Sub Command2_Click()
Dim con As New ADODB.Connection
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
     & App.Path & "\add_entry.mdb;Persist Security Info=False"

Dim rs As New ADODB.Recordset
Dim rs1 As New ADODB.Recordset
Dim result_hold As Integer

Dim large_tbl As String
Dim sell_large As String
large_tbl = "SELECT Sum(No_Of_Bottle) FROM add_cotton where Cateogry='Large'"
sell_large = "SELECT Sum(Quantity) FROM Sell_Detail where Cateogry='Large'"

rs.Open large_tbl, con, adOpenDynamic, adLockOptimistic
rs1.Open sell_large, con, adOpenDynamic, adLockOptimistic

result_hold = CInt(rs.Fields(0).Value) - CInt(rs1.Fields(0).Value)
Text1.Text = CStr(result_hold)
End Sub

'如果你需要检索整个列使用循环等。但有一件事是你要记住两个来源 '从不附加单个网格...

【讨论】:

以上是关于将两个查询结果存储在第三个变量中的主要内容,如果未能解决你的问题,请参考以下文章

在第二个查询中查询两个单独的表传递结果,同时仅在第二个查询返回 null 时保留第一个查询的结果

将前三个结果保存在给定变量名的while循环中?

MySQL:从两个表中获取结果,在第三个中计算匹配项

LINQ to SQL 将查询结果存储在变量中

将查询结果存储在变量中(jinja)

使用 PL/pgSQL 将查询结果存储在变量中