更新数据库

时间:2018-02-16 11:01:39

标签: sql-server vba stored-procedures

我创建了2个VBA例程,它们调用两个几乎完全相同的SQL Server存储过程。但是,有一个例程正在更新RecordSet中的Column,另一个例程不起作用。根本不知道出了什么问题。

为了可能解决它,在任何情况下,为了改进它,我修改了RecordSet定义,以便将列从Bit更改为Char,我现在传递的是“Y”或“N”而不是0或1。

数据库中的所有内容看起来都不错(详情如下),列被声明为Char,它构建为&部署得很好。但是,VBA程序现在抛出错误

  

“运行时错误-2147217913(80040e07)转换数据类型char时出错   钻头。“

任何人都可以告诉我它为什么会这样做吗?

Option Explicit
Option Base 1
Option Compare Text

Sub UpdateEmailsFixtureList()

Set KA_Com = New ADODB.Command

KA_Com.CommandText = "UpdateEmails"
KA_Com.CommandType = adCmdStoredProc

Set KA_Parameter = KA_Com.CreateParameter(Name:="pLeagueId", Type:=adInteger)

KA_Com.Parameters.Append KA_Parameter
KA_Com.Parameters("pLeagueId").Value = KA_RS_Leagues![ID]

Set KA_Parameter = KA_Com.CreateParameter(Name:="pFixtureList", Type:=adChar, Size:=1)

KA_Com.Parameters.Append KA_Parameter
KA_Com.Parameters("pFixtureList").Value = "Y"

Set KA_Com.ActiveConnection = KA_DB

Set KA_RS_Emails = KA_Com.Execute ***<<<<< Error occurs here <<<<<***

End Sub

新的RecordSet Create ...

CREATE TABLE [dbo].[Emails]
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [ManagerList] CHAR NOT NULL DEFAULT 'N', 
    [FixtureList] CHAR NOT NULL DEFAULT 'N', 
    [Shomatch] CHAR NOT NULL DEFAULT 'N', 
    [Newsletter] CHAR NOT NULL DEFAULT 'N', 
    [Turn] CHAR NOT NULL DEFAULT 'N', 
    [Started] CHAR NOT NULL DEFAULT 'N', 
    [Sent] CHAR NOT NULL DEFAULT 'N', 
    [Acknowledged] CHAR NOT NULL DEFAULT 'N', 
    [League] INT NOT NULL, 
    CONSTRAINT [FK_Emails_League] FOREIGN KEY ([League]) REFERENCES [Leagues]([Id]) 
)

存储过程......

CREATE PROCEDURE [dbo].[UpdateEmailsFixtureList]
    @pLeagueId int,
    @pFixtureList char(1)
AS
    UPDATE [dbo].[Emails]
    SET [FixtureList] = @pFixtureList
    WHERE [League] = @pLeagueId;

GO

1 个答案:

答案 0 :(得分:1)

您在代码中调用名为UpdateEmails的SP ...

KA_Com.CommandText = "UpdateEmails"
KA_Com.CommandType = adCmdStoredProc

但你的SP被称为

CREATE PROCEDURE [dbo].[UpdateEmailsFixtureList]