Sql 插入到没有字段名的字段中
我试图使用INSERT INTO语句而不定义列字段名。我知道这是可能的,但我无法做到。我当前拥有的SQL字符串是Sql 插入到没有字段名的字段中,sql,ms-access-2010,field,Sql,Ms Access 2010,Field,我试图使用INSERT INTO语句而不定义列字段名。我知道这是可能的,但我无法做到。我当前拥有的SQL字符串是 strSQL = " INSERT INTO MLE_Table (pnr, [Overall Assesment], risk, reason, justification)" & _ " SELECT tbl_Import.pnr, tbl_Import.[Overall Assesment], tbl_Import.risk, tbl_Impo
strSQL = " INSERT INTO MLE_Table (pnr, [Overall Assesment], risk, reason, justification)" & _
" SELECT tbl_Import.pnr, tbl_Import.[Overall Assesment], tbl_Import.risk, tbl_Import.reason, tbl_Import.justification " & _
" FROM tbl_Import;"
现在,在这段代码中,我使用了字段名。但是我不想那样做。
我希望SQL仅在两个表的字段名匹配时才将字段插入新表
我认为它可以通过一个For-Each循环来完成,但我不确定
有没有人以前做过这件事。。我正在使用MS Access 2010
非常感谢 您可以使用DAO:
Public Sub CopyRecords()
Dim rstSource As DAO.Recordset
Dim rstInsert As DAO.Recordset
Dim fld As DAO.Field
Dim strSQL As String
Dim lngLoop As Long
Dim lngCount As Long
strSQL = "SELECT Top 1 * FROM tblInsert"
Set rstInsert = CurrentDb.OpenRecordset(strSQL)
strSQL = "SELECT * FROM tblSource"
Set rstSource = CurrentDb.OpenRecordset(strSQL)
With rstSource
lngCount = .RecordCount
For lngLoop = 1 To lngCount
With rstInsert
.AddNew
For Each fld In rstSource.Fields
With fld
If .Attributes And dbAutoIncrField Then
' Skip Autonumber or GUID field.
ElseIf .Name = "Something" Then
' Insert default value.
rstInsert.Fields(.Name).Value = 0
ElseIf .Name = "SomethingElse Then
' Ignore this field.
Else
' Copy field content.
rstInsert.Fields(.Name).Value = .Value
End If
End With
Next
.Update
End With
.MoveNext
Next
rstInsert.Close
.Close
End With
Set rstInsert = Nothing
Set rstSource = Nothing
End Sub
如果不使用名称,唯一会发生的事情就是它会按位置进行操作(select中的第一列进入表中的第一列)。这要脆弱得多。在SQL中,您应该尽可能按名称而不是位置引用列。很棒的代码!!逻辑是我一直在寻找的…我试着去执行它。我犯了个错误。我认为需要做一些修改。错误在以下行:`rstInsert.Fields(.Name).Value=.Value`上,错误是:**Item未在此集合中找到**是的,假设是相同的表架构。如果没有,您可以添加、交换或排除字段名。当然,我更改了(.Name)=“pnr”。pnr是源表.rstInsert.Fields(.Name).Value=.Value的第一列的名称。这一行有点混乱。你能解释一下什么是(.value)吗?是源表中相应字段的值吗?属性值正好是:字段的值。它是字段的默认属性,因此在许多情况下可以忽略它。但是,在VB.NET和C#中没有默认属性,因此即使在VBA中它不是强制性的情况下,许多人(包括我)还是会指定它。它会变成一种习惯,永远不会导致任何错误。