我创建了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
答案 0 :(得分:1)
您在代码中调用名为UpdateEmails
的SP ...
KA_Com.CommandText = "UpdateEmails"
KA_Com.CommandType = adCmdStoredProc
但你的SP被称为
CREATE PROCEDURE [dbo].[UpdateEmailsFixtureList]