2014-02-17 138 views
0

我寫一個簡單的數據庫,我想一個的Varchar變限制爲幾個值,我得到這個:MS Access 2010中restriciting VARCHAR

PaymentMode VARCHAR (32), 

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

但它與"Syntax error in CONSTRAINT clause."出來和我不知道如何想法要解決這個問題,請幫助球員。

+2

爲什麼不使用具有外鍵約束的查找表? –

+0

什麼是最簡單的方法?對不起,我在SQL中很新鮮,應該是我第一個簡單的項目,所以我不知道如何按照你提到的方式來完成。感謝您的答覆。 – user3320248

回答

0

你缺少後關閉單引號「每週」

既然你是無法得到這個工作,我提供的代碼,將創建一個新表,並將約束它,在顯示結果每一步。請:(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 
+0

感謝您的回覆,但仍然收到相同的錯誤。 – user3320248

+0

讓我們定義您的環境;我假設你正在使用SQL Server,因爲你的語法在Access中不起作用。那是對的嗎? 如何在SQL Server中運行以下內容並查看會發生什麼: 如果OBJECT_ID('dbo.AAAA','U')不爲NULL DROP TABLE dbo.AAAA; GO CREATE TABLE dbo.AAAA (ID INT PRIMARY KEY,PaymentMode VARCHAR(32)) GO ALTER TABLE dbo.AAAA添加約束chk_PaymentMode CHECK(PaymentMode IN( '每天', '每週', '每月', '每六個月','每年'))) –

+0

我正在使用MS Access,我創建了查詢,然後在SQL中查看,然後編寫代碼。因此,我應該只使用「GO ALTER TABLE dbo.AAAA添加約束chk_PaymentMode CHECK(PaymentMode IN('Daily','Weekly','Monthly','Every Six Months','Yearly'))」? – user3320248