Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MS access 2010限制varchar_Sql_Ms Access 2010 - Fatal编程技术网

Sql MS access 2010限制varchar

Sql MS access 2010限制varchar,sql,ms-access-2010,Sql,Ms Access 2010,我正在编写一个简单的数据库,我想将一个Varchar变量限制为几个值,我得到了以下结果: PaymentMode VARCHAR (32), CONSTRAINT chk_PaymentMode CHECK (PaymentMode IN ('Daily', 'Weekly, 'Monthly', 'Every Six Months', 'Yearly')) 但是它是由“CONSTRAINT子句中的语法错误”产生的。我不知道如何解决这个问题,请帮助大家。您缺少了“Weekly”之后的

我正在编写一个简单的数据库,我想将一个Varchar变量限制为几个值,我得到了以下结果:

PaymentMode VARCHAR (32),

CONSTRAINT chk_PaymentMode 
CHECK (PaymentMode IN 
  ('Daily', 'Weekly, 'Monthly', 'Every Six Months', 'Yearly'))

但是它是由
“CONSTRAINT子句中的语法错误”产生的。
我不知道如何解决这个问题,请帮助大家。

您缺少了“Weekly”之后的结束单引号

由于您无法实现这一点,因此我提供的代码将创建一个新表,并在其上放置约束,在每个步骤显示结果。请:(1)向Access数据库中添加一个新模块,然后(2)将以下代码粘贴到该模块中,(3)将光标放在函数中的任意位置,然后(4)按F5。完成后,发布在“立即”窗口中找到的所有文本

Function Test_Constraint()
Dim strSQL      As String
Dim dbs As DAO.Database

Debug.Print "**** START TEST ****"
On Error Resume Next
Set dbs = CurrentDb
If Err.Number <> 0 Then Debug.Print "Error on Set dbs: " & Err.Number & vbTab & Err.Description
Err.Clear

strSQL = "CREATE TABLE Temp_Payment (StudentID INT, StudentName VARCHAR (32), PaymentID INT, PaymentMode VARCHAR (32), PRIMARY KEY (PaymentID))"
Debug.Print "Create Table SQL: " & strSQL
CurrentProject.Connection.Execute strSQL
If Err.Number <> 0 Then Debug.Print "Error on Create Table: " & Err.Number & vbTab & Err.Description
Err.Clear

strSQL = "ALTER TABLE Temp_Payment DROP CONSTRAINT chk_Temp_PaymentMode ;"
Debug.Print "DROP Constraint SQL: " & strSQL
CurrentProject.Connection.Execute strSQL
If Err.Number <> 0 Then Debug.Print "Error on DROP Constraint: " & Err.Number & vbTab & Err.Description & vbCrLf & strSQL
Err.Clear

strSQL = "ALTER TABLE Temp_Payment ADD CONSTRAINT chk_Temp_PaymentMode CHECK (PaymentMode IN ('Daily', 'Weekly', 'Monthly', 'Every Six Months', 'Yearly'))"
Debug.Print "ADD Constraint SQL: " & strSQL
CurrentProject.Connection.Execute strSQL
If Err.Number <> 0 Then Debug.Print "Error on ADD Constraint: " & Err.Number & vbTab & Err.Description & vbCrLf & strSQL
Err.Clear

Debug.Print "**** END TEST ****"
End Function
功能测试\u约束()
作为字符串的Dim strSQL
Dim数据库作为DAO.Database
调试。打印“****开始测试****”
出错时继续下一步
设置dbs=CurrentDb
如果错误号为0,则Debug.Print“Set dbs上的错误:”&Err.Number&vbTab&Err.Description
呃,明白了
strSQL=“创建表Temp\u Payment(StudentID INT、StudentName VARCHAR(32)、PaymentID INT、PaymentMode VARCHAR(32)、主键(PaymentID))”
Debug.Print“createtablesql:”&strSQL
CurrentProject.Connection.Execute strSQL
如果错误号为0,则Debug.Print“创建表时出错:”&Err.Number&vbTab&Err.Description
呃,明白了
strSQL=“ALTER TABLE Temp\U Payment DROP CONSTRAINT chk\U Temp\U PaymentMode;”
Debug.Print“DROP Constraint SQL:”&strSQL
CurrentProject.Connection.Execute strSQL
如果错误号为0,则Debug.Print“删除约束时出错:”&Err.Number&vbTab&Err.Description&vbCrLf&strSQL
呃,明白了
strSQL=“ALTER TABLE Temp_Payment ADD CONSTRAINT chk_Temp_PaymentMode CHECK(付款模式为‘每日’、‘每周’、‘每月’、‘每六个月’、‘每年’)”
Debug.Print“添加约束SQL:”&strSQL
CurrentProject.Connection.Execute strSQL
如果错误号为0,则Debug.Print“添加约束时出错:”&Err.Number&vbTab&Err.Description&vbCrLf&strSQL
呃,明白了
调试。打印“****结束测试****”
端函数

为什么不使用带有外键约束的查找表?最简单的方法是什么?对不起,我对SQL非常陌生,这应该是我的第一个简单的项目,所以我不知道如何用你提到的方式来做。感谢您的回复。感谢您的回复,但仍然会收到相同的错误。让我们定义您的环境;我假设您使用的是SQL Server,因为您的语法在Access中不起作用。对吗?在SQLServer中运行以下命令,看看会发生什么:如果OBJECT_ID('dbo.AAAA','U')不是NULL,则删除表dbo.AAAA;GO CREATE TABLE dbo.AAAA(ID int PRIMARY KEY,PaymentMode varchar(32))GO ALTER TABLE dbo.AAAA ADD CONSTRAINT chk_PaymentMode CHECK(PaymentMode IN('Daily'、'Weekly'、'Monthly'、'Every Six Monthly'、'year'))我使用MS Access创建查询,然后在SQL中查看,然后编写代码。因此,我应该只使用“GO ALTER TABLE dbo.AAAA ADD CONSTRAINT chk_PaymentMode CHECK(PaymentMode IN('Daily'、'Weekly'、'Monthly'、'Every Six month'、'Yearly')”?您的表是在Access中定义的,还是在SQL Server中定义的,并像Access中的ODBC一样链接的?如果在Access中定义,则需要不同的方法。如果在SQL Server中定义,您将使用“Alter Table”(“GO”用于上一个命令,因此不包括);如果您当前对该表有限制,则必须先将其删除,但请试一试。我编写的所有内容都在Access中,并且我不想使用SQL Server,因此我不会使其过于复杂,这是为我的老师准备的,因为他只会在Access中使用它。在构建其他表的过程中,我不得不在添加外键和列之后对它们进行更改,除了我们正在进行的更改之外,所有更改都进行得很顺利,这给了我非常相同的原因:(