如何使用存储过程从VBA更新BIT列

时间:2018-02-13 07:07:20

标签: sql-server vba stored-procedures

这看起来应该很简单,但是...当我在第二个参数中设置一个值时,我得到一个错误,3421,告诉我我的&​​#34;值是错误的类型&#34;。< / p>

这是我的表:

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

这是我的存储过程:

CREATE PROCEDURE [dbo].[UpdateEmails]
    @pLeagueId INT,
    @pFixtureList BIT
AS
    UPDATE [dbo].[Emails]
    SET [FixtureList] = @pFixtureList
    WHERE [League] = @pLeagueId;

这是我的代码:

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:=adBinary, Size:=1)

KA_Com.Parameters.Append KA_Parameter
KA_Com.Parameters("pFixtureList").Value = 1 <<< ERROR 3421 on this line

Set KA_RS_Leagues = KA_Com.Execute

End Sub

感谢您的帮助,我无法理解看起来如此简单的事情会如此顽固!

2 个答案:

答案 0 :(得分:1)

不是将参数作为位传递,而是将其更改为Char和Pass,将过程更改为

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> select ename, hiredate, f_age(hiredate) result
  2  from emp;

ENAME      HIREDATE   RESULT
---------- ---------- ------------------------------
KING       17.11.1981 36 years  2 months 27 days
BLAKE      01.05.1981 36 years  9 months 12 days
CLARK      09.06.1981 36 years  8 months  4 days
JONES      02.04.1981 36 years 10 months 11 days
SCOTT      09.12.1982 35 years  2 months  4 days
FORD       03.12.1981 36 years  2 months 10 days
SMITH      17.12.1980 37 years  1 months 27 days
ALLEN      20.02.1981 36 years 11 months 24 days
WARD       22.02.1981 36 years 11 months 22 days
MARTIN     28.09.1981 36 years  4 months 16 days
TURNER     08.09.1981 36 years  5 months  5 days
ADAMS      12.01.1983 35 years  1 months  1 days
JAMES      03.12.1981 36 years  2 months 10 days
MILLER     23.01.1982 36 years  0 months 21 days

14 rows selected.

SQL>

答案 1 :(得分:0)

将值传递给truefalse,因为数据库/ sp(@pFixtureList位)中的类型为BIT,它将接受true/false作为值并显示{{分别在表格中。}

1/0