visual uso openrecordset ejemplo dbopendynaset currentdb ms-access access-vba dao

ms-access - uso - recordset vba excel



¿Es posible crear una restricción de verificación en el acceso y/o DAO? (4)

Hay una regla de Validación en una columna. Puedes usar VB for Access. no SQL * Plus aquí ... Siempre puede usar SQL Express como fuente de datos, con todos los beneficios del servidor sql real y usar acceso solo como fachada.

Estoy tratando de crear una restricción de verificación en una tabla de acceso (¿jet?).

Entonces, abro el archivo .mdb con acceso, ingreso en consultas-> crear consulta en la vista de diseño, escribo esc, luego menú-> ver-> consultar y finalmente escribo

crea la tabla X (un número, marca (a> 20))

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

Además, me gustaría crear la restricción con dao / vba, no en la GUI. ¿Es eso posible?

Y por último, en una nota ligeramente relacionada: ¿cómo se ingresan las sentencias SQL en el acceso? No puedo imaginar que tenga que usar las consultas-> vista de diseño-> consultar-> ver ruta para hacer eso. Estoy acostumbrado al SQL * Plus de Oracle, que me gusta mucho, y espero que haya algo similar para el acceso también.

Gracias por cualquier entrada René


No puede usar ANSI estándar en el generador de consultas A MENOS que configure la base de datos como compatible con sql ansi. Si cambia esta configuración, entonces CAN puede usar el SQL en el generador de consultas como lo hizo. Sin embargo, no recomendaría cambiar esta configuración para las bases de datos existentes.

Si lo haces, puedes escribir:

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

No es necesario que guarde el sql en el generador de consultas, y solo desea escribir el sql, simplemente marque ctrl-g para obtener el prompt de línea de comando de acceso, y luego 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 usar el indicador de línea de comando si lo desea ..


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

No es posible hacer esto usando DAO pero puede usar ADO. Para resumir: las restricciones CHECK se introdujeron en el motor en la era de Jet 4.0 cuando el Equipo de Acceso estaba favoreciendo a ADO. Con el efecto de Access2007, el Equipo de Acceso vuelve a favorecer a DAO pero aún tiene que conectar los ''huecos'' de Jet 4.0 en DAO. Por lo tanto, para la mayoría de las funciones exclusivas de Jet 4.0 (tipos de datos comprimibles, tipos de datos de texto de longitud fija, claves externas rápidas, etc.) debe usar ADO.


Aquí hay algunas notas.

Puede crear una consulta de paso a través para Oracle (seleccione el menú "Consulta"> "SQL específico"> "Transferencia")

Desde Access 2003, puede seleccionar la sintaxis compatible con SQL Server (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"

Restricciones con ADO / VBA. Consulte [Microsoft Jet SQL intermedio 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