当前位置: 首页 > 面试题库 >

在vba-excel和sql查询中需要帮助

裴育
2023-03-14
问题内容

怀疑在VBA ADO和Sql查询中…

我有2张纸,即adodc1,adodc2(在一本工作簿中)

在adodc1中具有“名称”,“部门”列,有时其具有“ Sect”列

在adodc2中具有“名称”,“部门”,“宗派”列

我想要的是当我运行Query..Vba时需要检查adodc1是否具有Sect列。

要返回为空值..

下面的代码取自“”,根据我的需要进行了更改

它将执行的工作是来自两张表的联合名称和部门列。现在我要查询以检查adodc1是否具有列“ sect”。如果具有

像往常一样联合“ Sect”,否则..联合为空值

Sub connecttoexcel()

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer

strFile = ActiveWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0 XML;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
'here i want some stuff
strSQL = "Select Name, Dept from [Adodc1$] Union Select Name, Dept from [Adodc2$];"
rs.Open strSQL, cn
Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs
Set rs = Nothing
End Sub

问题答案:

Vba需要检查adodc1是否具有Sect列

我建议您使用Connection对象的OpenSchema方法来发现该列是否存在,例如:

Set rs = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, "Adodc1$")
rs.Filter = "COLUMN_NAME = 'Sect'"
If rs.RecordCount = 1 Then
   ' Column exists
   ...

当要检查50列时,我认为将更加困难…

rs.Filter = "COLUMN_NAME = 'Sect' OR COLUMN_NAME = 'Name' OR COLUMN_NAME = 'Dept' ...

或使用数组等在一个循环中测试每个人。

是否可以在sql查询中使用NZ Function

NZ()功能不是Access SQL的功能,而是用于访问Excel数据的功能。而是它是MS
Access对象模型的一部分。简而言之,除非您是从Access VBA项目运行的,否则它将NZ()不可用。但是解决方法很简单,例如

Nz(Dept, '{{NONE}}')

与…具有相同的效果

IIF(Dept IS NULL, '{{NONE}}', Dept)

我读过Access MVP(艾伦·布朗(Allen Browne?))说,Nz()无论如何,这是更好的选择。



 类似资料:
  • 我的问题类似于SQL选择组查询。但是架构发生了变化,我想要不同的结果,如下所述。给定链接的解决方案没有给我正确的解决方案。您可以使用SQL小提琴来解决这个问题。 下面是我的桌子 表1 现在,我想显示每个产品的两个最低金额,如果金额相同,那么任何人都按照升序排列... 所以我想构建单个SQL查询,它给我的结果如下。 请帮我建立这样的查询。

  • 我有这张桌子: 这是我的SQL查询: 我想要的查询是: > 我希望获得符合某些条件的记录,特别是字段在最近24小时内的记录 我需要获得紧接在#1中的记录之前的记录 将#1中的结果进一步过滤到其价格列在记录的历史记录中具有不同值(而不是-1)的记录 我面临的问题是查询太慢了。我有一百万张唱片。执行查询大约需要2分钟。我猜GROUP BY会使查询变慢。我想我需要做一个综合指数,但我不知道怎么做。 解释

  • 编写一个查询以显示staffid、费用代码、专科id、专科名称、会诊日期、患者号和到期日将使用会诊日期+21计算 STAFFID NOT NULL CHAR(2) FIRSTNAME VARCHAR2(20) LASTNAME VARCHAR2(20) 角色VARCHAR2(15) 性别CHAR(1) 日期连接日期 DATELEFT DATE SQL>描述staffspeciality错误: OR

  • 问题内容: 好吧,我可能也已在较早之前发布了此内容,但到目前为止仍找不到答案,因此请帮助我解决这个问题。 我的数据库结构: ATT (表) Act_ID(PK) Assigned_To_ID(FK,请参阅) Project_ID(FK,请参阅) Product_ID(FK,请参阅) 状态(可以是) 产品表 产品编号(PK) 产品名称 项目表 Project_ID(PK) 项目名 员工表 Emp_I

  • 问题内容: 我有一个很大的Excel工作表,看起来与此类似: 我要做的是创建一个新的动态生成的表格,其中显示了所有人员。 在SQL中,这将是同步:。我以前从未在excel中使用过VBA(我是一位经验丰富的PHP / Javascript程序员,并且已在MS Access中使用过VBA),所以我正在寻找初学者的指导以帮助我入门。也许有人可以推荐一个简单的教程或博客文章,其功能类似于我需要做的事情?

  • 我有一个linq查询,我在foreach循环中迭代其结果。 第一个是一个从表布局面板中获取控件集合的查询,然后我遍历该集合并从表布局面板中删除控件,因此: 上面的操作并不像我预期的那样(即抛出一个错误),它只删除了一半的控件(奇数的控件)。似乎在每次迭代中,AllItems都会减少其自身,尽管底层集合正在修改,但不会抛出错误。 如果使用字符串数组执行Similar: 这次Visual studio