2

我想使用 Visual C++ 代码插入一个具有默认值的新字段。我写了这个:

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);

但这是不正确的。我该怎么做呢?你们中的某个人可以给我写正确的代码吗?

4

2 回答 2

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 访问您的访问表,我认为它不会起作用。

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

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

(有关连接字符串示例,请查看此处

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方法。你会在这里找到一个例子

于 2008-12-15T14:44:32.913 回答
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 不支持DEFAULT在 SQL DML 中使用关键字,因此唯一的DEFAULT应用 a 是当列声明为NOT NULL并且列名从INSERT. 如果该列是 NULLable,您将如何让引擎应用默认值?!

于 2008-12-22T11:42:29.060 回答