Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从电子表格和Access数据库获取用户ID_Sql_Database_Vba_Excel - Fatal编程技术网

Sql 从电子表格和Access数据库获取用户ID

Sql 从电子表格和Access数据库获取用户ID,sql,database,vba,excel,Sql,Database,Vba,Excel,为什么这个代码不起作用?对不起,我问了个一般性的问题 我的任务是生成带有参考信息的报告,这些信息需要从access数据库和excel电子表格中提取 基本上,我的职责是为社区居民提供服务;我提供服务的所有人的记录都包含在access数据库中。有参考信息;向出资人或董事会定期报告所需的地址、姓名、情况和其他信息 我还为当地企业提供服务;此信息包含在电子表格中,而不是数据库中。这些信息可以放在一个关系数据库中,二者相互关联;但是,组织内部存在着对系统进行重大变革的阻力,也没有真正了解如何做到这一点 因

为什么这个代码不起作用?对不起,我问了个一般性的问题

我的任务是生成带有参考信息的报告,这些信息需要从access数据库和excel电子表格中提取

基本上,我的职责是为社区居民提供服务;我提供服务的所有人的记录都包含在access数据库中。有参考信息;向出资人或董事会定期报告所需的地址、姓名、情况和其他信息

我还为当地企业提供服务;此信息包含在电子表格中,而不是数据库中。这些信息可以放在一个关系数据库中,二者相互关联;但是,组织内部存在着对系统进行重大变革的阻力,也没有真正了解如何做到这一点

因此,我正在尝试使用电子表格——如果我向个人a或组织B提供服务,该电子表格将检查access数据库和excel电子表格,以查看是否输入了该个人或组织;如果是,则应使用该信息填充表格,并为其分配唯一代码

唯一代码根据数据库确定;该人员或组织之前是否已输入数据库

我在基地使用的电子表格如下:

底部的表我正在寻找一个'查找'表。它的名字是Lookup。我想用它运行的代码如下所示(但obv不是这样):

Sub-getUserID()
将myTable设置为ListObject
设置myTable=工作表(“客户机代码”).ListObjects(“查找”)
如果myTable.ListRows.Count>=1,则
myTable.DataBodyRange.Delete
如果结束
带工作表(“客户机代码”).ListObjects(“查找”).Add(SourceType:=0,Source:=Array(数组(“ODBC;DSN=MS Access数据库;DBQ=C:\Database\here\test.accdb;DefaultDir=F:\Housing;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeo”),数组(“ut=5;”),目标:=myTable.Range(单元格(1,1)))
.CommandText=Array(“从'C:\database\here\test.accdb`.Clients'”&Chr(13)&“&Chr(10)&”中选择Clients.ID、Clients.LastName、Clients.FirstName”&Chr(10)&“WHERE(Clients.LastName=”&Range(“b1”).End(xlDown)&“)和(Clients.FirstName=”&Range(“c1”).End(xlDown)&“)
以
带工作表(“客户机代码”).ListObjects(“查找”).Add(源类型:=0,源:=Array(数组(“ODBC;DSN=Excel文件;DBQ=C:\spreadsheet\here\text.xlsx;DefaultDir=C:\spreadsheet;DriverId=1046;MaxBufferSize=2”)、数组(“048;PageTimeout=5;”),目标:=myTable.Range(单元格(1,1)))
.CommandText=Array(“从`C:\spreadsheet\here\test.xlsx`.`businesss$`businesss$`.&Chr(13)&`Chr(10)&`WHERE(`businesss$`.Operation='.&Range(“b1”).End(xlDown)&`
以
端接头
希望能够根据个人的名字和姓氏查询数据库,或者根据组织名称查询电子表格;如果找到一个值,则向“查找”表添加一些信息。如果没有找到任何东西,那么我将知道这是一个新条目,并将其作为信息输入

作为参考,数据库有3个字段(ID、LastName、FirstName);电子表格有1列(操作)

实际上,困惑集中在这里:

  • 如何基于对listobject的查询将信息“添加”到预先存在的表中
  • 如何使用access数据库和Excel电子表格实现这一点
  • 如有任何关于如何实现这一目标的其他方法的建议,将不胜感激;将多个数据源中的信息拉入一个表中,以便在该表中对其进行验证

    编辑:如果我通过Access或其他数据库程序执行此操作,我将在两个表上执行INNERJOIN;一个是人,另一个是企业。不过,我希望保留excel—我发现它对用户更友好

    编辑:基于Ian响应的代码…生成以下错误消息: '运行时错误-2147467259,找不到可安装的ISAM'

    互联网上的研究似乎表明: 1) 人们以前也犯过这个错误 2) 可能没有安装正确的DLL-不确定是否存在这种情况,因为我正在尝试从excel访问access,并且此处似乎没有可访问的DLL: 3) 可能存在连接字符串的框架设置问题。数据源可能需要在引号中,JET OLEDB需要使用而不是ACE,连接字符串需要扩展以包括“扩展属性”,如下所示:

    最后一个显然是最大的目标(而且错误最多)


    您最希望使用ActiveX数据对象来实现这一点。这将允许您从access数据库中提取数据,并从Excel更新access数据库中的记录

    以下是Microsoft参考资料:

    还有一些示例代码:

    Dim cmd As New adodb.Command
    Dim conn As New adodb.Connection
    Dim rs As New adodb.Recordset
    Dim strConn As String
    
    strConn = "Provider = Microsoft.ACE.OLEDB.12.0;" _
                & "Data Source=C:\AccessDatabse.accdb"
    conn.Open strConn
    
    strSQL = "SELECT * FROM Table Where FristName =" & strName & ... ' or You could put your InnerJoin SQL here
    
    rs.Open strSQL, conn, adOpenDynamic, adLockOptimistic
    
    If rs.EOF then 'If the returned RecordSet is empty
    
    '...there is no match in database
    
    Else
    
    'the rs object will hold the ID you are looking for
    
    End If
    
    您可以使用以下方法将新记录添加到Access数据库:

    myFieldList = Array("ID", "FirstName", "LastName")
    myValues = Array(IDValue, FirstNameValue, LastNameValue)
    rs.AddNew myFieldList, myValues
    

    嗨,伊恩,谢谢你的评论。有一件事我不明白;您正在设置ADODB连接/记录集,但连接字符串为OLEDB。解释一下?
    myFieldList = Array("ID", "FirstName", "LastName")
    myValues = Array(IDValue, FirstNameValue, LastNameValue)
    rs.AddNew myFieldList, myValues