2008-10-08 39 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); 
相关问题