带有ADO参数的VBA INSERT INTO [英] VBA INSERT INTO with ADO parameters

查看:0
本文介绍了带有ADO参数的VBA INSERT INTO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Access VBA中工作。我有一个SUB,它根据当前元素将给定的集合插入到不同的表中。我刚刚接触并想要使用这个ADO参数,因为我对简单的docmd.runsql "insert into..."有问题。问题是有些字符串包含"'"字符,所以我在这些记录中遇到错误。我搜索并找到了ADO参数,但没有好的教程,现在我厌倦了错误代码,这些错误代码也没有帮助(来自Java)。 我的代码片段:

Dim adoCMD As Object
Set adoCMD = CreateObject("ADODB.Command")
With adoCMD
    .ActiveConnection = CurrentProject.Connection
    .CommandType = adCmdText
    .parameters.Append .CreateParameter("pKey", adInteger)
    .parameters.Append .CreateParameter("pTitle", adVarChar, 100)
    .parameters.Append .CreateParameter("pid", adInteger)
    .parameters.Append .CreateParameter("pAired", adDate)
    .parameters.Append .CreateParameter("pmtype", adInteger)
    .parameters.Append .CreateParameter("pSyear", adSmallInt)
    .parameters.Append .CreateParameter("pSeason", adInteger)
    If addDate Then
        .parameters.Append .CreateParameter("pAdded", adDate)
    End If
    For Each elem In ac
        If elem.aired >= seasonStart And elem.aired <= seasonEnd Then
            key = Nz(DMax("table_Akey", "table_A"), 0) + 1
            .parameters("pKey").Value = key
            .parameters("pTitle").Value = elem.title
            .parameters("pid").Value = elem.id
            .parameters("pAired").Value = elem.aired
            .parameters("pmtype").Value = elem.mtype
            .parameters("pSyear").Value = syear
            .parameters("pSeason").Value = season
            If addDate Then
                .parameters("pAdded").Value = Date
                .CommandText = "INSERT INTO table_A(table_Akey,title,id,aired,media,seasonyear,season,added) VALUES(pKey,pTitle,pid,pAired,pmtype,pSyear,pSeason,pAdded);"
            Else
                .CommandText = "INSERT INTO table_A(table_Akey,title,id,aired,media,seasonyear,season) VALUES(pKey,pTitle,pid,pAired,pmtype,pSyear,pSeason);"
            End If
        Else
            wCounter = wCounter + 1
            key = Nz(DMax("wskey", "ws"), 0) + 1
            .parameters("pKey").Value = key
            .parameters("pTitle").Value = elem.title
            .parameters("pid").Value = elem.id
            .parameters("pAired").Value = elem.aired
            .parameters("pmtype").Value = elem.mtype
            .parameters("pSyear").Value = syear
            .parameters("pSeason").Value = season
            .CommandText = "INSERT INTO ws(wskey,title,id,aired,media,wsyear,season) VALUES(pKey,pTitle,pid,pAired,pmtype,pSyear,pSeason);"
        End If
        .Execute
    Next elem
End With
我收到错误:运行时错误‘3001’参数类型错误、超出可接受范围或彼此冲突 行

.parameters.Append .CreateParameter("pTitle", adVarChar, 100)

可能整个代码都是错误的,我不知道如何正确处理ADO参数,但您可以看到我想要做什么。我为函数提供了一个集合。我循环遍历元素并将它们放在正确的表中,并且我还有一个开关(addDae)。

请帮帮我。

推荐答案

您还可以编写一个转义DB单引号的函数。通常,单引号是通过将其加倍来"转义"的。应该是这样的:

Function escapeDBquote(s As String) As String
    Dim sOut As String
    Dim i As Integer
    i = 1
    While (i <= len(s))
        If (Mid(s, i, 1) = "'") Then sOut = sOut +"'"
        sOut = sOut + Mid(s, i, 1)
        i = i + 1
    Wend
    escapeDBquote = sOut
End Function

并这样称呼它:

Dim szSQL As String
szSQL = "insert into myTable (sfield1, ..) values ('" + escapeDBquote(myString) + "');"

(注意:尚未编译此代码;可能有一些拼写错误。)

这篇关于带有ADO参数的VBA INSERT INTO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆