2014-02-17 4 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

Вы пропускаете закрытия одиночные кавычки после «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 
+0

Благодарим за отзыв, но по-прежнему получаем ту же ошибку. – user3320248

+0

Позволяет определить вашу среду; Я предполагаю, что вы используете SQL Server на основе того факта, что ваш синтаксис не будет работать в Access. Это верно? Как насчет запуска следующего в SQL Server и посмотреть, что произойдет: IF 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 ADD CONSTRAINT chk_PaymentMode ПРОВЕРКА (PaymentMode IN ('Daily', 'Weekly', 'Monthly', «Каждые шесть месяцев», «Ежегодно»)) –

+0

Я использую MS Access, создаю запросы, которые затем просматриваю в SQL, а затем пишу код. Поэтому я должен просто использовать «GO ALTER TABLE dbo.AAAA ADD CONSTRAINT chk_PaymentMode CHECK (PaymentMode IN (« Ежедневно »,« Еженедельно »,« Ежемесячно »,« Каждые шесть месяцев »,« Ежегодно »))»? – user3320248

Смежные вопросы