2016-04-15 19 views
0

Ich habe eine Access-Datenbank in Front-und Backends unterteilt.Einstellung Feld 'InputMask' Eigenschaften programmgesteuert

Ich muss den Wert einer Eigenschaft ändern, die einem der Felder in einer Tabelle programmgesteuert zugeordnet ist. Ich erinnere mich daran, vor Jahren etwas Ähnliches erreicht zu haben, aber das war für Formen.

Es scheint, dass die Eigenschaften einer Tabelle nur zur Entwurfszeit festgelegt werden können; Jeder Versuch, die Werte mithilfe des Codes (myField.Properties("InputMask").Value = "000000") zu ändern, verursacht einen Fehler.

Insgesamt gibt es etwa 40 oder 50 Tabellen in einem Los von etwa 80, die einen bestimmten Typ Feld haben, das geändert werden muss, also würde ich lieber Code als manuell verwenden. Könnte jemand bitte eine Methode vorschlagen, um dies mit VBA zu tun?

Derzeit habe ich das Feld mit CurrentDb.Execute sqlString löschen und neu erstellen, aber ich würde gerne die InputMask Eigenschaft behalten, wenn überhaupt möglich.

Die ursprüngliche Datenbank ist ein 2002/3 Format, aber ich bin die Bearbeitung dieses in Access 2010

+0

Welchen Fehler haben Sie mit diesem Code bekommen? – Andre

+0

@HansUp: Ja - die 'InputMask' wurde bereits gesetzt. – Paul

Antwort

1

ich den folgenden Code an der Arbeit. Es wird die InputMask der angegebenen Tabelle und des Feldes ändern.

Option Compare Database 
Option Explicit 

Sub Test_It() 
Dim WGD 

    WGD = Resize_And_AddInputMask("Table3", "SomeNbr") 

End Sub 

' Modified version of code found at: http://www.tek-tips.com/viewthread.cfm?qid=1708626 
Public Function Resize_And_AddInputMask(ByVal someTableName As String, ByVal someZCField As String) 

Dim db As DAO.Database 
Dim td As DAO.TableDef 
Dim fd As DAO.Field 
Dim prp As DAO.Property 

    Set db = CurrentDb 
    Set td = db.TableDefs(someTableName) 
    Set fd = td.Fields(someZCField) 
    fd.Properties("InputMask") = "000099" 
    fd.Properties.Refresh 
    db.TableDefs.Refresh 

    Set prp = Nothing 
    Set fd = Nothing 
    Set td = Nothing 
    Set db = Nothing 

End Function 
+0

Danke dafür, Wayne. Ich werde es versuchen und dich wissen lassen. – Paul

+0

Das war bizarr. Ich las irgendwo in meinem Roving, dass das direkte Setzen der 'InputMask' mit VBA einen Fehler verursachen würde, daher die Seltsamkeit in meiner Frage (@Andre). Das hat perfekt funktioniert. Ich hatte bereits das Größenänderungsbit herausgefunden (mit SQL für das Datenbankobjekt). Die wichtigsten Dinge, die ich vermisst hatte (und das Problem weiter verwirrte), waren die Methoden "Fields.Refresh" und "TableDefs.Refresh" und das Setzen eines separaten Objekts mit "CurrentDb". – Paul