Frage

Ich versuche, eine Check-Einschränkung auf einem Access (Jet?) Tabelle zu erstellen.

Also, ich die MDB-Datei mit Zugang zu öffnen, geht in queries-> erstellen Abfrage in der Entwurfsansicht, Typ esc, dann Menü-> view-> Abfrage und schließlich geben Sie

create table X (   eine Zahl,   Scheck (a> 20) )

aber der Zugang denkt, dass ich einen „Syntaxfehler in Felddefinition“ habe. Allerdings glaube ich nicht so. Daher meine Frage: ist es möglich, einen Check-Constraint mit Zugang zu erstellen. Wenn ja:., Wie

Darüber hinaus würde Ich mag die Einschränkung mit dao / vba erstellen, nicht auf der GUI. Ist das möglich?

Und schließlich, auf einer leicht Zusammenhang Anmerkung: Wie geben Sie SQL-Anweisungen zugreifen. Ich kann mir nicht vorstellen, dass ich die queries- verwenden muß> Design view-> query-> route, um das zu tun. Ich bin es gewohnt, Oracle SQL * Plus, die ich sehr mag, und ich würde hoffen, dass es etwas ähnliches für den Zugang als auch.

Vielen Dank für jede Eingabe Rene

War es hilfreich?

Lösung

Hier sind einige Hinweise.

Sie können eine Pass-Through-Abfrage für Oracle (Wählen Sie das Menü "Abfrage"> "SQL-spezifisch"> "Pass-Through") erstellen

Da Access 2003 können Sie SQL Server-kompatible Syntax wählen (ANSI 92) ( http://office.microsoft.com/en-us/access/HA010345621033.aspx )

Eine Gültigkeitsregel mit 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"

Constraints mit ADO / VBA. Siehe [Intermediate Microsoft Jet SQL für 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

Andere Tipps

Es gibt Prüfungsregel für eine Spalte. Sie können VB verwenden für Access. keine SQL * Plus hier ... Sie können immer SQL Express als Datenquelle nutzen -. Mit allen Vorteilen des realen SQL Server und den Zugriff verwenden nur als Front

diese in Zugang zu tun, müssen Sie zuerst die Schnittstelle öffnen sich in ANSI -92 Abfragemodus . Ich habe Ihre SQL DDL Code getestet. Es funktioniert gut und schafft eine Spalte vom Typ FLOAT (Doppel)

Sie ist nicht möglich, diese mit DAO zu tun, aber Sie können ADO verwenden. Lange Rede kurzer Sinn: CHECK Einschränkungen wurden in der Jet 4.0-Ära in den Motor eingeführt wird, wenn die Access-Team ADO begünstigt wurden. Mit Wirkung vom Access2007 ist das Access-Team zurück DAO zu begünstigen, aber noch den Jet 4.0 ‚Löcher‘ in DAO stopfen. So für die Mehrheit des Jet 4.0 -nur Funktionalität (komprimierbar Datentypen mit fester Länge Text-Datentypen, schnelle Fremdschlüssel, etc.) müssen Sie ADO verwenden.

Sie können nicht Standard ANSI im Query Builder verwenden, wenn Sie die Datenbank als SQL-ansi kompatibel gesetzt. Wenn Sie diese Einstellung nicht ändern, dann können Sie die SQL in der Query Builder verwenden, wie Sie haben. Ich würde diese Einstellung nicht empfehlen, für das Ändern Datenbanken jedoch vorhanden.

Wenn Sie das tun, können Sie eingeben:

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

Sie nicht die SQL in der Query Builder speichern müssen und wollen einfach nur in der SQL geben, dann einfach Strg-g Whack die Zugriffsbefehlszeile zu erhalten, und Sie können dann geben Sie:

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

Die obige würde in einer Zeile eingegeben werden. So können Sie die Befehlszeile verwenden, wenn Sie wollen ..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top