Sql 从电子表格和Access数据库获取用户ID
为什么这个代码不起作用?对不起,我问了个一般性的问题 我的任务是生成带有参考信息的报告,这些信息需要从access数据库和excel电子表格中提取 基本上,我的职责是为社区居民提供服务;我提供服务的所有人的记录都包含在access数据库中。有参考信息;向出资人或董事会定期报告所需的地址、姓名、情况和其他信息 我还为当地企业提供服务;此信息包含在电子表格中,而不是数据库中。这些信息可以放在一个关系数据库中,二者相互关联;但是,组织内部存在着对系统进行重大变革的阻力,也没有真正了解如何做到这一点 因此,我正在尝试使用电子表格——如果我向个人a或组织B提供服务,该电子表格将检查access数据库和excel电子表格,以查看是否输入了该个人或组织;如果是,则应使用该信息填充表格,并为其分配唯一代码 唯一代码根据数据库确定;该人员或组织之前是否已输入数据库 我在基地使用的电子表格如下: 底部的表我正在寻找一个'查找'表。它的名字是Lookup。我想用它运行的代码如下所示(但obv不是这样):Sql 从电子表格和Access数据库获取用户ID,sql,database,vba,excel,Sql,Database,Vba,Excel,为什么这个代码不起作用?对不起,我问了个一般性的问题 我的任务是生成带有参考信息的报告,这些信息需要从access数据库和excel电子表格中提取 基本上,我的职责是为社区居民提供服务;我提供服务的所有人的记录都包含在access数据库中。有参考信息;向出资人或董事会定期报告所需的地址、姓名、情况和其他信息 我还为当地企业提供服务;此信息包含在电子表格中,而不是数据库中。这些信息可以放在一个关系数据库中,二者相互关联;但是,组织内部存在着对系统进行重大变革的阻力,也没有真正了解如何做到这一点 因
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列(操作)
实际上,困惑集中在这里:
您最希望使用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