小编Ros*_*sco的帖子

返回的Recordset已关闭(在VBA中通过ODBC访问mysql DB)

长时间观看者第一次海报.我正在研究一个带有Excel前端的数据库应用程序.因此我使用VBA访问MySQL数据库.我正在使用的驱动程序是ODBC驱动程序(Windows),我有一个有效的数据库连接,因为许多其他查询运行良好.

我要做的是从一系列SQL语句中返回结果,而不是试图将它们全部组合成一个大型语句(这可能会起作用但很难维护/理解).我已将标志添加FLAG_MULTI_STATEMENTS = 67108864到连接字符串,以抑制驱动程序语法错误.

但现在我运行以下内容:

queryDB.Open SQLquery, conn
Run Code Online (Sandbox Code Playgroud)

recordset (queryDB)保持与没有明显的错误关闭.可以在此处找到sql语句.

我可能会产生没有返回给VBA的错误,所以在这里提供任何帮助都会非常感激.

注意:sql语句工作,因为我可以粘贴该语句phpMyAdmin,它返回正确的(非空)结果.我不知道这些陈述是否具体是问题,但可能是一般使用CREATE TEMPORARY TABLE ...或使用多种陈述.

另外我猜驱动程序可能正在尝试为每个sql语句返回一个结果,而VBA只是获取第一个或者其他东西......

编辑:sql语句供将来参考.

CREATE TEMPORARY TABLE tmpOrders AS
SELECT
o.customerName,
SUM(o.Sales) AS Sales,
SUM(TotalFobCost + TotalLandedCost + TotalLocalCost + TotalCmtCost) AS TotalCost,
YEAR(o.deliveryDate) AS YEAR,
MONTH(o.deliveryDate) AS MONTH
FROM devere_costing.orders_fixed_extras AS o
WHERE o.orderApproved = TRUE
AND o.orderCanceled = FALSE
AND o.deliveryDate BETWEEN '2014-01-01' AND '2014-03-31'
GROUP BY customerName, YEAR, MONTH
ORDER BY YEAR …
Run Code Online (Sandbox Code Playgroud)

mysql excel vba

20
推荐指数
1
解决办法
1181
查看次数

使用自定义VBA类获取迭代器包装.Net ArrayList

我刚刚发现我可以使用CreateObject方法从VBA创建一些.Net类,它可以创建COM类.这非常酷,但是创建的类是后期绑定的,所以你没有获得任何intellisense等.所以我希望做的是编写VBA包装类并将所有方法调用委托给.Net对象的内部引用.

因此,除了尝试引用枚举器之外,这适用于所有内容的ArrayList对象.有一个VBA的黑客攻击,它允许您创建自己的集合并使用For Each ...语法来枚举您的集合.以下是一个例子:

Public Property Get NewEnum() As IUnknown
    Attribute NewEnum.VB_UserMemId = -4
    Attribute NewEnum.VB_MemberFlags = "40"
    Set NewEnum = <<< pass a reference to the enumerator here.
End Property
Run Code Online (Sandbox Code Playgroud)

大多数实现都包含对VBA Collection对象的引用,并传递Collection对象的枚举器.但是,由于我持有.Net ArrayList,我想将其传递出去.但是,当我尝试时,我得到"无效的过程调用或参数".

我目前的尝试是这样的:

Public Function NewEnum() As IUnknown
    Dim enumerator As Object
    Set enumerator = internalList.GetEnumerator()    <<<< Error occurs here.
    Set NewEnum = enumerator
End Function
Run Code Online (Sandbox Code Playgroud)

我很确定它可以实现这个功能,因为可以在没有包装器的情况下直接迭代ArrayList集合.例如

Public Sub TestCreateArrayList()
    Dim list As Object
    Set list = CreateObject("System.Collections.ArrayList")

    list.Add "an item."
    list.Add "another item."

    Dim Item As Variant …
Run Code Online (Sandbox Code Playgroud)

.net com vba for-loop arraylist

10
推荐指数
1
解决办法
1221
查看次数

标签 统计

vba ×2

.net ×1

arraylist ×1

com ×1

excel ×1

for-loop ×1

mysql ×1