Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
Ms access 查询语法混乱_Ms Access_Vba - Fatal编程技术网

Ms access 查询语法混乱

Ms access 查询语法混乱,ms-access,vba,Ms Access,Vba,对于我正在使用VB inside Access DB编写的这段代码,我的语法有点混乱 Public Sub () Dim dbs As DAO.Database Dim TrainingID As Integer Dim EmployeeIDTb1 As Integer Dim JobIDTb1 As Integer Dim CompetencyTb1 As String Dim DateApprovedTb1 As String Dim InsertStr As String

对于我正在使用VB inside Access DB编写的这段代码,我的语法有点混乱

Public Sub ()

 Dim dbs As DAO.Database
 Dim TrainingID As Integer
 Dim EmployeeIDTb1 As Integer
 Dim JobIDTb1 As Integer
 Dim CompetencyTb1 As String
 Dim DateApprovedTb1 As String
 Dim InsertStr As String

 TrainingID = 100


 Set dbs = CurrentDb
 Set dbs1 = CurrentDb.OpenRecordset("SELECT * FROM Table1")

 'Do Until dbs1.Fields("ID").Value <> Null
 'set values
  EmployeeIDTbl1 = dbs1.Fields("EmployeeID").Value
 'JobIDTb1 = dbs1.Fields("JobID").Value
 'CompetencyTb1 = dbs1.Fields("Competency").Value
 'DateApprovedTb1 = dbs1.Fields("DateApproved").Value
 'Set Insert String
  InsertStr = "INSERT INTO TrainingList (EmployeeID.[Value]) Values(1) Where TrainingID = TrainingID;"

  dbs.Execute InsertStr
  TrainingID = TrainingID + 1
  'dbs1.MoveNext
  'Loop


 dbs.Close
 Set dbs = Nothing

 End Sub

我试图将
EmployeeIDTbl1
作为一个参数传递到
Value(EmployeeIDTbl1)
中,但我看不出里面适合什么语法。注意
EmployeeIDTbl1
返回一个值=1

您的插入SQL应该是:


InsertStr=“INSERT INTO TrainingList(EmployeeID.[Value])值(“&EmployeeIDTbl1&”)其中TrainingID=“&TrainingID

以下是我编写的解决方案,用于处理在SharePoint中为多个值字段插入Access 2013记录的问题

第一步:

创建与SharePoint列表具有相同列名的本地表。 (对于这段代码,可以说它被称为“Table1”)

第二步:使用Excel将数据导入到创建的表中

第三步:统计表中记录的数量

第四步:执行InitializeRecords函数

Option Compare Database

Public Sub InitalizeRecords()

Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Dim BufferVal As Integer
Dim RecordSize As Integer


Set dbs = CurrentDb
Set dbs2 = CurrentDb.OpenRecordset("SELECT * FROM 'The Table You're Using'")

'Intialize Variables'
BufferVal = 1
RecordSize = 'Enter Amount of Records to be Inserted'

For i = 1 To RecordSize
'Insert Buffer Records'
 dbs2.AddNew
 dbs2("Title").Value = BufferVal
 BufferVal = BufferVal + 1
 dbs2.Update
 Next



End Sub
Dim DateApprovedTbl1 As String
Dim InsertStr As String
Dim InsertStr2 As String
Dim InsertStr3 As String
Dim InsertStr4 As String
Dim BufferVal As Integer
Dim MaxRecords As Integer

 Set dbs = CurrentDb
 Set dbs1 = CurrentDb.OpenRecordset("SELECT * FROM Table1")
 Set dbs2 = CurrentDb.OpenRecordset("SELECT * FROM TrainingList")


'Intialize Training ID Value'
 TrainingID = dbs2.Fields("TrainingID").Value


Do Until dbs1.Fields("ID") <> Null

   'set values'
    EmployeeIDTbl1 = dbs1.Fields("EmployeeID").Value
    JobIDTbl1 = dbs1.Fields("JobID").Value
    CompetencyTbl1 = dbs1.Fields("Competency").Value
    DateApprovedTbl1 = dbs1.Fields("DateApproved").Value

   'Set Insert String'
    InsertStr = "INSERT INTO TrainingList (JobID.[Value]) Values (" & JobIDTbl1 & ") 
    WHERE TrainingID = " & TrainingID & " "

    dbs.Execute InsertStr
    InsertStr2 = "INSERT INTO TrainingList (EmployeeID.[Value]) Values (" &
    EmployeeIDTbl1  & ") 
    WHERE TrainingID = " & TrainingID & " "
    dbs.Execute InsertStr2

'Update Competency And DateApproved'
InsertStr3 = "Update TrainingList SET Competency = '" & CompetencyTbl1 & " ' WHERE   
TrainingID = " & TrainingID & "; "

dbs.Execute InsertStr3
InsertStr4 = "Update TrainingList SET DateApproved = '" & DateApprovedTbl1 & " ' WHERE 
TrainingID = " & TrainingID & "; "

dbs.Execute InsertStr4

    TrainingID = TrainingID + 1
    BuffVal = BuffVal + 1
    dbs1.MoveNext
 Loop


dbs.Close
Set dbs = Nothing

End Sub
此函数初始化表并将空记录插入共享点中的表中,以填充主键值,在本例中为“TrainingID”

步骤5:执行InsertRecords函数

Option Compare Database

Public Sub InitalizeRecords()

Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Dim BufferVal As Integer
Dim RecordSize As Integer


Set dbs = CurrentDb
Set dbs2 = CurrentDb.OpenRecordset("SELECT * FROM 'The Table You're Using'")

'Intialize Variables'
BufferVal = 1
RecordSize = 'Enter Amount of Records to be Inserted'

For i = 1 To RecordSize
'Insert Buffer Records'
 dbs2.AddNew
 dbs2("Title").Value = BufferVal
 BufferVal = BufferVal + 1
 dbs2.Update
 Next



End Sub
Dim DateApprovedTbl1 As String
Dim InsertStr As String
Dim InsertStr2 As String
Dim InsertStr3 As String
Dim InsertStr4 As String
Dim BufferVal As Integer
Dim MaxRecords As Integer

 Set dbs = CurrentDb
 Set dbs1 = CurrentDb.OpenRecordset("SELECT * FROM Table1")
 Set dbs2 = CurrentDb.OpenRecordset("SELECT * FROM TrainingList")


'Intialize Training ID Value'
 TrainingID = dbs2.Fields("TrainingID").Value


Do Until dbs1.Fields("ID") <> Null

   'set values'
    EmployeeIDTbl1 = dbs1.Fields("EmployeeID").Value
    JobIDTbl1 = dbs1.Fields("JobID").Value
    CompetencyTbl1 = dbs1.Fields("Competency").Value
    DateApprovedTbl1 = dbs1.Fields("DateApproved").Value

   'Set Insert String'
    InsertStr = "INSERT INTO TrainingList (JobID.[Value]) Values (" & JobIDTbl1 & ") 
    WHERE TrainingID = " & TrainingID & " "

    dbs.Execute InsertStr
    InsertStr2 = "INSERT INTO TrainingList (EmployeeID.[Value]) Values (" &
    EmployeeIDTbl1  & ") 
    WHERE TrainingID = " & TrainingID & " "
    dbs.Execute InsertStr2

'Update Competency And DateApproved'
InsertStr3 = "Update TrainingList SET Competency = '" & CompetencyTbl1 & " ' WHERE   
TrainingID = " & TrainingID & "; "

dbs.Execute InsertStr3
InsertStr4 = "Update TrainingList SET DateApproved = '" & DateApprovedTbl1 & " ' WHERE 
TrainingID = " & TrainingID & "; "

dbs.Execute InsertStr4

    TrainingID = TrainingID + 1
    BuffVal = BuffVal + 1
    dbs1.MoveNext
 Loop


dbs.Close
Set dbs = Nothing

End Sub
  • 确保列“don NOT”中的数据具有空值,因为它会破坏它,但是如果需要,可以在我的代码中插入一些逻辑来检查它。我用它做的已经足够好了

  • 我有一个样本数据库将插入大约2000个总记录,对于这个规模较小的项目,它工作得很好,但是初始化和插入记录需要相当长的时间

  • 让脚本一直运行到完成,否则,如果在脚本运行时尝试使用access,它将停止响应。如果有人有办法加快我所遵循的这些功能的进程,请在我好奇的时候告诉我


    我真的希望使用此解决方案,因为仅使用某些工具来绕过SharePoint内部禁用的工具是令人沮丧的。

    管理员是否可以将此问题的标题更改为“插入具有多个Access和SharePoint字段的记录”