我想使用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);
但这不正确。我该怎么做呢? 有人可以给我写正版代码吗?
答案 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,那么如何让引擎应用默认值?!