Pregunta

Estoy tratando de crear una restricción de comprobación en un acceso (chorro?) Mesa.

Entonces, abro el archivo .mdb con acceso, entrar en queries-> Crear una consulta en vista del diseño, Tipo de ESC, entonces menu-> Ver-> consulta y finalmente escribir

crear la tabla X (   un número,   cheque (a> 20) )

pero el acceso piensa que tengo un "error de sintaxis en la definición de campo". Sin embargo, yo no lo creo. Por lo tanto mi pregunta: ¿es posible crear una restricción de comprobación con acceso. Si es así:. Cómo

Además, me gustaría crear la restricción con DAO / VBA, no en la interfaz gráfica de usuario. ¿Es eso posible?

Y por último, en una nota ligeramente relacionados: ¿Cómo se introduce sentencias SQL en el acceso. No me puedo imaginar que tengo que usar el queries-> diseño de vista-> query-> vista de las vías con el fin de hacer eso. Estoy acostumbrado a Oracle SQL * Plus, que me gusta mucho, y yo espero que hay algo similar para el acceso también.

Gracias por cualquier entrada Rene

¿Fue útil?

Solución

Aquí están algunas notas.

Puede crear una consulta de paso a través para Oracle (Seleccione el menú "Consulta"> "específica de SQL"> "transferencia")

Desde Access 2003, puede seleccionar SQL Server Sintaxis compatible (ANSI 92) ( http://office.microsoft.com/en-us/access/HA010345621033.aspx )

Una regla de validación con VBA / DAO

''Reference: Microsoft DAO x.x Object Library

Dim tdf As TableDef
Dim db As Database

Set db = CurrentDb

Set tdf = db.TableDefs("Table1")

tdf.Fields("aDouble").ValidationRule = "<10"
tdf.Fields("aDouble").ValidationText = "Must be less than 10"

Las restricciones con ADO / VBA. Ver [Intermedio SQL de Microsoft Jet para Access 2000] ( http : //msdn.microsoft.com/en-us/library/aa140015 (office.10) .aspx)

''Reference: Microsoft ADO Ext. x.x for DDL and Security

Dim cn As ADODB.Connection 'For action queries
Dim rs As ADODB.Recordset  'For select queries
Dim s As String
Dim RecordsAffected As Long

Set cn = CurrentProject.Connection

''You can store sql in a table
s = DLookup("SQLText", "sysSQL", "ObjectName='q1'")
''Result: CREATE TABLE tblCreditLimit (LIMIT DOUBLE)
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

''You can run queries from VBA
s = "INSERT INTO tblCreditLimit VALUES (100)"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "CREATE TABLE tblCustomers (CustomerID COUNTER, CustomerName Text(50))"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "INSERT INTO tblCustomers VALUES (1, 'ABC Co')"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "ALTER TABLE tblCustomers " _
   & "ADD COLUMN CustomerLimit DOUBLE"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

''You can add contraints using ADO like so:
s = "ALTER TABLE tblCustomers " _
   & "ADD CONSTRAINT LimitRule " _
   & "CHECK (CustomerLimit <= (SELECT LIMIT " _
   & "FROM tblCreditLimit))"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "UPDATE tblCustomers " _
   & "SET CustomerLimit = 200 " _
   & "WHERE CustomerID = 1"
''Error occurs here
cn.Execute s, RecordsAffected

s = "UPDATE tblCustomers " _
   & "SET CustomerLimit = 90 " _
   & "WHERE CustomerID = 1"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

''Clean up
''You cannot do this through the database window,
''because of the constraint.
s = "ALTER TABLE tblCustomers DROP CONSTRAINT LimitRule "
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "DROP TABLE tblCustomers "
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "DROP TABLE tblCreditLimit "
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

Otros consejos

Hay regla de validación en una columna. Puede utilizar VB para el acceso. sin SQL * Plus aquí ... Siempre se puede usar SQL Express como una fuente de datos -. Con todos los beneficios de SQL Server real y utilizar el acceso sólo como un frente

Para hacer esto en Access, es necesario abrir primero la interfaz en ANSI -92 modo de consulta. He probado el código SQL DDL:. Trabaja muy bien y crea una columna de tipo FLOAT (Doble)

no es posible hacer esto con DAO pero se puede usar ADO. En resúmen: CHECK restricciones fueron introducidas en el motor en la era de Jet 4.0 cuando el Equipo de Acceso favorecían ADO. Con efecto a partir del Access2007, el Equipo de acceso son de nuevo a favorecer DAO pero aún tienen que tapar los agujeros de Jet 4.0 '' en DAO. Así que para la mayoría de la funcionalidad de Jet 4.0 -sólo (tipos de datos compresibles, tipos de longitud fija de datos de texto, claves foráneas rápidas, etc.) es necesario utilizar ADO.

No se puede utilizar estándar ANSI en el generador de consultas a menos que establezca la base de datos compatible ANSI SQL. Si cambia esta configuración, entonces se puede puede utilizar el SQL en el generador de consultas que usted tiene. No recomendaría cambiar esta configuración para las bases de datos existentes sin embargo.

Si lo hace, podría escribir en:

CREATE TABLE z1 
       (id int IDENTITY , FirstName CHAR, LastName CHAR, SSN INTEGER ,
check (id < 20),  
constraint Mypk primary key (id) )

que no es necesario guardar el sql en el generador de consultas, y sólo quiere escribir el SQL, a continuación, simplemente golpear ctrl-g para obtener la línea de comandos de acceso, y luego se puede escribir:

currentproject.Connection.Execute "CREATE TABLE
    z1(id int IDENTITY , FirstName CHAR, LastName CHAR, SSN INTEGER ,
    check (id < 20),
    constraint Mypk primary key (id) )"

Lo anterior se escribiría en una línea. Por lo tanto, puede utilizar la línea de comandos si quieres ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top