导入时只复制一条记录

时间:2013-07-11 10:16:44

标签: vba ms-access ms-access-2007 access-vba

这似乎是一个相当奇怪的问题,但我想复制第一条记录(最好是数据库中的下一个位置)。我想这样做,因为我们的客户要求我们邮件合并的样本,它必须是一个实时文件。我目前使用对话框导入文件,大多数客户端是标准的逗号分隔.txt文件。

Private Sub Command38_Click()
    Dim f As Object
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim strUpdate As String
    Dim strFile As String
    Dim strFolder As String
    Dim varItem As Variant
    Dim P As String
    Dim DeleteEverything As String

        DoCmd.SetWarnings False
        DeleteEverything = "DELETE * FROM [tcppltr]"
        DoCmd.RunSQL DeleteEverything

    Set f = Application.FileDialog(3)
    f.AllowMultiSelect = True
    f.InitialFileName = "G:\access\TCPP\"
    f.Filters.Clear
    f.Filters.Add " Armored TXT Files", "*.asc"
        If f.Show Then
        For Each varItem In f.SelectedItems
            strFile = Dir(varItem)
            strFolder = Left(varItem, Len(varItem) - Len(strFile))
            P = strFolder & strFile
            DoCmd.TransferText acImportDelim, "TCPP Import Specification", "tcppltr", P, False
        Next
        End If
End Sub

我的第一个想法是让邮件合并打印出第一条记录的副本,这样会更好,因为我们不需要重复发货标签以及来自此记录的所有其他内容但我不确定甚至有一种方法只为邮件合并而不创建一个单独的表与重复记录只用于邮件合并。在我看来,这似乎非常低效。

除了在导入时复制记录外,我对其他如何做的建议持开放态度。

提前感谢每个人的时间和帮助!

1 个答案:

答案 0 :(得分:1)

这基本上做的是打开两个记录集。第一个记录集指向您要复制的记录(在这种情况下,我做了MoveFirst您可以专门选择任何记录或修改此代码以复制多个记录)。目前这只复制了1条记录。

Dim db As Database
Dim rs1 As Recordset, rs2 As Recordset
Dim i As Long
Set db = CurrentDb
Set rs1 = db.OpenRecordset("Table1", dbOpenSnapshot)
Set rs2 = db.OpenRecordset("Table1", dbOpenDynaset)
rs1.MoveFirst
rs2.AddNew
For i = 1 To rs2.Fields.Count - 1
    rs2.Fields(i) = rs1.Fields(i)
Next
rs2.Update
rs1.Close
rs2.Close

如果您需要SQL解决方案,我认为您需要事先知道所有字段的名称并使用SELECTINSERT