使用默认值在ACCESS中添加字段

时间:2008-12-15 11:14:36

标签: sql alter jet

我想使用Visual C ++ Code插入一个带有Default值的新字段。 我写了这个:

CADODatabase pDB;
String strConnessione = _T("Provider=Microsoft.Jet.OLEDB.4.0;""Data Source=");
strConnessione = strConnessione + "MioDatabase.mdb";
pDB.SetConnectionString(strConnessione);
pDB.Open();

query.Format("ALTER TABLE TBProva ADD Fattore Double Default 0;");
pDB.Execute(query);

但这不正确。我该怎么做呢? 有人可以给我写正版代码吗?

2 个答案:

答案 0 :(得分:3)

在JET-SQL语言中,您必须更具体地使用语法,并在“ALTER TABLE”句子中添加“COLUMN”字样。例:

strSql = "ALTER TABLE MyTable ADD COLUMN MyField DECIMAL (28,3);"
strSql = "ALTER TABLE MyTable ADD COLUMN MyText TEXT(3);"

根据帮助,您可以定义默认值,但我从未尝试过。此语法仅对Access / JET数据库有效。如果您通过ODBC或ADO访问您的访问表,我认为它不会起作用。

在这种情况下,您可以通过其他方式更改数据库结构。你会找到一个例子here。这是使用DAO对象模型制作的,但可以轻松切换到通用ADO对象模型以与ADODB连接一起使用。

编辑:一个“隐式ADO解决方案”(意思是使用ADODB连接而不是ADO表对象等)可以是以下内容:

(对于连接字符串示例,请检查here

Dim myConnection AS ADODB.connection
set myConnection = New ADODB.connectionString
myConnection.connectionString = 'here is your connection string'
myConnection.open
myConnection.execute "ALTER TABLE myTable ADD Column MyField DECIMAL (12,3);"
myConnection.close

如果您正在使用活动的mdb文件,请写下:

CurrentProject.Connection.Execute "ALTER TABLE myTable ADD Column MyField DOUBLE;"

就是这样。

如果您更喜欢使用ADO对象,请将ADOX库添加到您的代码源并使用Table.columns.append方法。你会找到一个例子here

答案 1 :(得分:2)

您错过了COLUMN关键字,例如

ALTER TABLE TBProva ADD COLUMN Fattore Double Default 0;

实际上,我认为您可能也错过了NOT NULL部分,例如

ALTER TABLE TBProva ADD COLUMN Fattore DOUBLE DEFAULT 0 NOT NULL;

我之所以这样说是因为Jet不支持在SQL DML中使用DEFAULT关键字,因此唯一一次应用DEFAULT是将列声明为{{1}并且NOT NULL中的列列表中省略了列名。如果列是NULLable,那么如何让引擎应用默认值?!