Добавить поле в ACCESS со значением по умолчанию - PullRequest
1 голос
/ 15 декабря 2008

Я хотел бы вставить новое поле со значением по умолчанию, используя код 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);

но это не правильно. Как я могу это сделать? Кто-то из вас может написать мне только код?

Ответы [ 2 ]

3 голосов
/ 15 декабря 2008

В языке JET-SQL вы должны быть более конкретны с синтаксисом и добавить слово «COLUMN» в предложение «ALTER TABLE». Exemple:

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. Вы найдете пример здесь

2 голосов
/ 22 декабря 2008

Вам не хватает ключевого слова 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 применяется только тогда, когда столбец объявлен как NOT NULL, а имя столбца исключено из списка столбцов в INSERT. Если бы столбец был NULLable, как бы вы заставили движок применять значение по умолчанию?!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...