- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,
我在使用一些简单的 VBA 时遇到了问题。我编写了一个脚本来进行文本查询(没有输入参数,因此没有真正的用户交互、SQL 注入(inject)等),针对数据库运行它,并将其转储到新的工作表中。这是一些开发人员分析的简单一次性,因此功能非常简单。
如果查询返回每一列的值,则没有问题。但是,如果查询中有任何空值(在我的例子中是 ROLLUP() 的结果),整个子例程将在 MoveNext 处失败(注意:不是将空值分配给单元格)。最初,脚本在访问空行之前就失败了
Range(Cells(2, 1), Cells(rsData.RecordCount + 1, rsData.Fields.Count)).NumberFormat = "@"
这已被评论并移动到逐个单元格,目的是添加检查当前单元格是否为空(迄今为止互联网上最常见的建议)。
查询已使用后端 SQL 编辑器进行验证并且是正确的。我读过的所有其他文章要么特定于某个产品,要么不适用。那么,问题很简单:应该如何处理 Recordset 中的空值?我想避免在数据库端删除空值,因为这个 sub 用于许多不同的查询,而且不得不用一堆 NVL() 语句来填充我的查询的想法是非常令人不快的。
提前感谢您的帮助。完整代码如下:
Sub runReport(query As String, sheetName As String)
Dim cnDatabase As ADODB.Connection
Dim rsData As ADODB.Recordset
Dim row As Integer
Dim column As Integer
'Create new worksheet
Sheets.Add.Name = sheetName
Excel.Application.Worksheets(sheetName).Select
'Connect to database
Set cnDatabase = New Connection
cnDatabase.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=DB.EXAMPLE.COM;User ID=FOO;Password=BAR;ChunkSize=1000;FetchSize=100;"
cnDatabase.Open
'Retrieve dataset
Set rsData = New Recordset
Set rsData.ActiveConnection = cnDatabase
rsData.Source = query
rsData.CursorLocation = adUseClient
rsData.CursorType = adOpenStatic
rsData.Open
'Output header row
For column = 1 To rsData.Fields.Count
Cells(1, column).Value = rsData.Fields(column - 1).Name
Rows(1).Font.Bold = True
Next
'Set all fields as text
'Range(Cells(2, 1), Cells(rsData.RecordCount + 1, rsData.Fields.Count)).NumberFormat = "@"
'Output retrieved data from database
row = 2
While Not rsData.EOF
For column = 1 To rsData.Fields.Count
Cells(row, column).NumberFormat = "@"
Cells(row, column).Value = rsData.Fields(column - 1).Value
Next
rsData.MoveNext
row = row + 1
Wend
cnDatabase.Close
End Sub
最佳答案
尝试改变:
rsData.CursorLocation = adUseClient
到:
rsData.CursorLocation = adUseServer
(基于这个 archived Microsoft support article 在不同的 Oracle 问题上)
关于VBA Recordset.MoveNext 在 NULL 上返回 E_FAIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13257484/
我有一个非常简单的查询,它只返回一条记录。当我尝试从唯一记录中的唯一列中获取值时,我得到“BOF 或 EOF 为真,或者当前记录已被删除。请求的操作需要当前记录。”这里发生了什么?如果 RecordC
任何人都可以解释MS Access 2007中DAO.Recordset,DAO.Recordsets和DAO.Recordset2之间的区别吗?基本上使用记录集。...举一个例子,使它更清晰。我从“
我正在尝试使用 ADODB 通过 VBA(在 Excel 中)从 MySQL 检索记录集。我可以通过网络成功连接到 MySQL 数据库,甚至可以使用 ADOX 返回表的列表,但是当我尝试返回记录集时,
Below we will attempt to access data from a database without knowing the column names. Clearly the
我的问题如下: 我需要为记录集分配一个值。问题是我需要使用一个变量。所以,而不是写这个 MyRecordSet![field_name] 我需要写这个 MyRecordSet![variable_na
我想将记录集中的数据粘贴到工作表中的 3 列。 rs.Open "SELECT [Sheet1$].Security,[Sheet1$].Description,[Sheet1$].ID FROM
我正在使用基于数据库中数据的谷歌图表框架...... 我需要生成如下输出: ([ ['Year', 'ON', 'OFF', 'X1', 'X2'], ['Jan/12',
不确定这是否会在我打算的细节中起作用。场景是文本框填充了表中的数据,用户编辑记录并单击按钮进行保存。 Dim cdb As DAO.Database, rstEdit As DAO.Recordset
如何访问脚本任务中的 RecordSet 变量? 最佳答案 在脚本选项卡上,确保将变量放在 readonlyvariables 或 readwritevariables 文本框中。 这是一个简单的脚本
我想知道是否可以使用命名范围列表将数据添加到 ADODB 记录集,而无需在单独的行上指定名称。 我尝试评估该名称,但记录集将我的变量作为名称而不是评估它。这会导致错误,因为数据库中没有包含我的变量名称
我面临着一个小问题,我似乎无法解决这个问题。我不想使用 SQL,而是想使用 vba 检查两个表之间的重复项。所以,我所做的就是创建两个记录集。每个表一个,只需检查是否可以在一个记录集中找到文档编号,同
我想知道是否有人可以帮助我。我正在尝试从 sql 表返回的记录集填充公共(public)字典。 一切似乎都很好,除了一个部分。我不知道它是否没有正确计算字典中的键数,或者它们没有被正确输入但是无论出于
由于我收到了如此好的快速解决方案,我将再次尝试从您那里获得一些帮助: 我打开了两个记录集。 Set cmd1.ActiveConnection = cn1 cmd1.CommandText = "
应我最初问题的回复者的要求 here , 我被要求改写问题以深入了解实际需求。 我可以使用什么Strongly-Typed 数据结构来保存多个RecordSet 的集合,其中每个RecordSet 将
我打算使用 MS Access 作为我程序的数据库。我对 MS Access 一无所知,此时我正在进行反复试验和大量研究。在我的研究中,我发现 Seek 方法可以快速定位与指定值匹配的行。但是,似乎提
1.建立Recordset对象 复制代码代码如下: Dim objMyRst Set objMyRst=Server.CreateObject(“ADOD
我正在寻找可以修复此运行时构建的 VBA 代码,或有关可能导致此问题的建议。 我正在运行一个 VBA 脚本,该脚本使用 ADODB 从 SQL Server 数据库中检索数据。我已经在将数据复制到我的
我正在尝试在 Access VBA 中创建一个记录集,它将向我显示与表单当前记录相关的表中的所有记录。我当前的代码如下所示: Private Sub Form_Load() Dim rst A
我最近遇到过vba更新语句,并且我一直在使用Recordset.Edit和Recordset.Update不仅编辑我现有的数据,而且要对其进行更新。 我想知道两者之间的区别:recordset.upd
我需要更新 Excel VBA 中的记录集。我从 CSV 中提取数据并使用文本驱动程序连接到该文件。这是我与文件、记录集和更新代码的连接。 Dim con As New ADODB.Connectio
我是一名优秀的程序员,十分优秀!