2008-10-08 70 views
4

我正在使用舊的Access數據庫(是的,這非常醜,我討厭它)。我需要修改我創建的VB應用程序的一些列。我有大部分修改設置正確,但我與事實修改列的文本默認爲「允許零長度」爲false。訪問變更表「允許零長度」

SO ALTER TABLE [申請人表] ALTER COLUMN [申請人ID]文本(255)

我需要改變爲具有 「允許零長度」 設置爲真。

我試圖 ALTER TABLE [申請人表] ALTER COLUMN [申請人ID]文本(255)NULL

但似乎不工作的。我已經找遍瞭解決方案,但似乎無法找到一個直接的答案。

任何想法?

謝謝, 瑞恩。


感謝您的信息。我很高興它是Access而不是我。

我想我只是要通過這個應用程序破解我的方式,因爲整個數據模型都是垃圾。

+0

會發生什麼事,當你嘗試在GUI(表設計)? – BIBD 2008-10-08 19:29:55

回答

4

此選項不適用於Jet SQL。您可以在Access gui或vba代碼中執行此操作。例如:

Public Function setAllowZeroLenStr()  
    On Error GoTo Proc_Err 

    Dim db As Database 
    Dim tbl As TableDef 
    Dim fld As DAO.Field 

    Set db = CurrentDb 
    Set tbl = db.TableDefs![Applicant Table] 
    Set fld = tbl.Fields![Applicant ID] 
    fld.AllowZeroLength = True 

Proc_Exit:  
    Set fld = Nothing 
    Set tbl = Nothing 
    Set db = Nothing 

    Exit Function 

Proc_Err:  
    MsgBox Err.Number & vbCrLf & Err.Description 
    Err.Clear 
    Resume Proc_Exit  
End Function 
0

上一次我想要做和ISTR一樣的東西,它根本不可能從DDL/SQL中獲得 - 但是你可以通過VBA來定位字段(table.fields)並將AllowZeroLength設置爲所需的值

3

我同意:此設置沒有ACE/Jet語法。如果你仔細想想,SQL DLL往往是標準的「便攜」東西,這是大多數SQL產品可以實現的。大多數SQL沒有明確的(Dis)AllowZeroLength特性,所以它沒有成爲標準,因此不是ACE/Jet語法。對於ACE/Jet也適用的'便攜式'解決方案是使用CHECK約束,例如,是這樣的:

ALTER TABLE [Applicant Table] ADD 
    CONSTRAINT Applicant_ID__not_zero_length 
     CHECK (LEN([Applicant ID]) > 0); 

允許零長度值將要求沒有創造擺在首位(!!)或DROP CHECK約束荷蘭國際集團,如果它已經存在......但爲什麼你要允許標識符(「申請人ID」)無論如何是零長度?

0

使用Interop.ACCDBLIB

試試這個:

DBLib dbLib = new DBLib(); 
    dbLib.ConnectionString = ConnectionString; 
    dbLib.Initialize(); 
    dbLib.ModifyTextFieledSetAllowZeroLength(ref TableName, ref FiledName); 
相關問題