Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access “访问更改表”;“允许零长度”;_Ms Access - Fatal编程技术网

Ms access “访问更改表”;“允许零长度”;

Ms access “访问更改表”;“允许零长度”;,ms-access,Ms Access,我正在使用一个旧的Access数据库(是的,它非常难看,我讨厌它)。我需要修改我正在创建的VB应用程序中的一些列。我已经正确地设置了大多数修改,但我正在与这样一个事实抗争:将列修改为文本会使默认值“AllowZero Length”为false 所以 ALTER TABLE[申请人表格]ALTER COLUMN[申请人ID]文本(255) 我需要将“允许零长度”设置为true 我试过了 ALTER TABLE[申请人表格]ALTER COLUMN[申请人ID]文本(255)NULL 但这似乎也不

我正在使用一个旧的Access数据库(是的,它非常难看,我讨厌它)。我需要修改我正在创建的VB应用程序中的一些列。我已经正确地设置了大多数修改,但我正在与这样一个事实抗争:将列修改为文本会使默认值“AllowZero Length”为false

所以 ALTER TABLE[申请人表格]ALTER COLUMN[申请人ID]文本(255)

我需要将“允许零长度”设置为true

我试过了 ALTER TABLE[申请人表格]ALTER COLUMN[申请人ID]文本(255)NULL

但这似乎也不起作用。我到处寻找解决办法,但似乎找不到一个直截了当的答案

有什么想法吗

谢谢, 瑞安


谢谢你的信息。我很高兴这是访问,而不是我


我想我只是想破解一下这个应用程序,因为整个数据模型都是垃圾。

很久以前,我也想这么做,并且我觉得从DDL/SQL根本不可能做到这一点,但是你可以通过定位字段(table.fields)从VBA中实现并将AllowZeroLength设置为所需值

此选项在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

我同意:此设置没有ACE/Jet语法。仔细想想,SQLDLL往往是标准的“可移植的”东西,在大多数SQL产品上都可以实现。大多数SQL没有显式(Dis)AllowZeroLength特性,因此它没有进入标准,因此不在ACE/Jet语法中

FWIW“便携式”解决方案也适用于ACE/Jet,它使用检查约束,例如:

ALTER TABLE [Applicant Table] ADD
   CONSTRAINT Applicant_ID__not_zero_length 
      CHECK (LEN([Applicant ID]) > 0);
允许零长度值需要首先不创建CHECK约束(!!),或者
删除它(如果它已经存在的话)
。。。但您为什么要允许标识符(“申请人ID”)长度为零呢?

使用Interop.accdlib

试试这个:

    DBLib dbLib = new DBLib();
    dbLib.ConnectionString = ConnectionString;
    dbLib.Initialize(); 
    dbLib.ModifyTextFieledSetAllowZeroLength(ref TableName, ref FiledName);
子设置tempdbExample()
'设置临时数据库,以便在中运行报表数据。
“临时数据库按需关闭和重新创建(省去了在主数据库中压缩和修复的麻烦)。
'临时表可以重新链接到主数据库以进行进一步查询
Dim dbTemp作为数据库
将tblTemp调暗为TableDef
Dim idxTemp作为索引,idxTemp2作为索引
Const cTempPath=“C:\temp\”
Const cTempDB=“TempReportData”
'删除旧的临时数据库(如果数据库正在使用,Kill将失败。正常恢复。)
出错时继续下一步
如果Dir(cTempPath&cTempDB)“,则Kill(cTempPath&cTempDB)
关于错误转到错误处理程序
'创建一个新的临时数据库。
设置dbTemp=CreateDatabase(cTempPath&cTempDB,dbLangGeneral)
设置tblTemp=dbTemp.CreateTableDef(“临时样本”)
用tblTemp
.Fields.Append.CreateField(“示例_ID”,dbDouble)
.Fields.Append.CreateField(“SITE_ID”,dbText,38)
.Fields.Append.CreateField(“示例日期时间”,dbDate)
.Fields.Append.CreateField(“方法”,dbText,20)
.Fields.Append.CreateField(“矩阵”,dbText,20)
.Fields.Append.CreateField(“注释”,dbText,255)
.菲尔兹![注释].AllowZeroLength=True
设置idxTemp=.CreateIndex(“示例ID”)
idxTemp.Fields.Append.CreateField(“示例ID”)
idxTemp.Primary=True
设置idxTemp2=.CreateIndex(“站点ID”)
idxTemp2.Fields.Append.CreateField(“站点ID”)
以
dbTemp.TableDefs.Append tblTemp
tblTemp.index.Append idxTemp
tblTemp.INDEX.Append idxTemp2
设置tblTemp=Nothing
设置idxTemp=Nothing
设置dbTemp=Nothing
进出口银行:
出口接头
错误处理程序:
MsgBox错误说明(“&Err.Number&”)
恢复出口
端接头

在GUI(表格设计)中尝试时会发生什么?Allen Browne,MVP:“出于好奇,为什么要将此属性设置为“是”?也许是为了与其他软件兼容?对于一个非常奇怪的领域?一般来说,我认为这是一个很差的想法,因为:1)用户无法区分,2)Access无法区分。(请尝试使用DLookup()--
Sub SetUpTempDbExample()
' Set up a temp database for running report data into.
' Temp DB is killed and re-created on demand (saves having to compact and repair in primary DB).
' Temp table can be relinked to primary DB for further querying
Dim dbTemp As Database
Dim tblTemp As TableDef
Dim idxTemp As Index, idxTemp2 As Index
Const cTempPath = "C:\temp\"
Const cTempDB = "TempReportData"

    '  Delete old temp database (if db is in use, Kill will fail. Resume gracefully.)
    On Error Resume Next
    If Dir(cTempPath & cTempDB) <> "" Then Kill (cTempPath & cTempDB)

    On Error GoTo ErrHandler
    
    ' Create a new temp DB.
    Set dbTemp = CreateDatabase(cTempPath & cTempDB, dbLangGeneral)

    Set tblTemp = dbTemp.CreateTableDef("TEMP_SAMPLES")
    
    With tblTemp
        .Fields.Append .CreateField("SAMPLE_ID", dbDouble)
        .Fields.Append .CreateField("SITE_ID", dbText, 38)
        .Fields.Append .CreateField("SAMPLE_DATE_TIME", dbDate)
        .Fields.Append .CreateField("METHOD", dbText, 20)
        .Fields.Append .CreateField("MATRIX", dbText, 20)
        .Fields.Append .CreateField("COMMENT", dbText, 255)
        .Fields![COMMENT].AllowZeroLength = True
        Set idxTemp = .CreateIndex("SAMPLE_ID")
        idxTemp.Fields.Append .CreateField("SAMPLE_ID")
        idxTemp.Primary = True
        Set idxTemp2 = .CreateIndex("SITE_ID")
        idxTemp2.Fields.Append .CreateField("SITE_ID")
    End With
    dbTemp.TableDefs.Append tblTemp
    tblTemp.Indexes.Append idxTemp
    tblTemp.Indexes.Append idxTemp2

    Set tblTemp = Nothing
    Set idxTemp = Nothing
    Set dbTemp = Nothing

ExitSub:
    Exit Sub

ErrHandler:
    MsgBox Err.Description & " (" & Err.Number & ")"
    Resume ExitSub
End Sub