2008-12-15 7 views
1

Je voudrais insérer un nouveau champ avec une valeur par défaut en utilisant le code Visual C++. Je l'ai écrit ceci:Ajouter un champ dans ACCESS avec une valeur par défaut

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

mais ce n'est pas correct. Comment puis-je faire pour le faire? Quelqu'un d'entre vous Peut-il m'écrire le code juste?

+0

Vous devez probablement ajouter le tag ms-access – Knox

+0

MS-Access n'intervient pas - uniquement le moteur de base de données Jet. –

Répondre

3

En langage JET-SQL, vous devez être plus précis avec la syntaxe et ajouter le mot 'COLUMN' dans la phrase 'ALTER TABLE'. Exemple:

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

Selon l'aide, vous pouvez définir une valeur par défaut mais je ne l'ai jamais essayée. Cette syntaxe est uniquement valide avec la base de données Access/JET. Je ne pense pas que cela fonctionnera si vous atteignez votre table d'accès via ODBC ou ADO.

Dans de telles situations, vous pouvez modifier la structure de votre base de données par d'autres moyens. Vous trouverez un exemple here. Cela a été fait avec le modèle d'objet DAO, mais peut être facilement basculé sur le modèle d'objet ADO commun à utiliser avec une connexion ADODB.

EDIT: une "solution ADO implicite" (ce qui signifie en utilisant la connexion ADODB mais pas les tables ADO objets etc » peuvent être les suivantes:

(pour des exemples de chaîne de connexion, vérifiez 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 

Si vous travaillez avec le fichier mdb actif, il suffit d'écrire:

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

C'est ce

.

Si vous préférez utiliser des objets ADO, ajoutez la bibliothèque ADOX à votre source de code et utilisez la méthode Table.columns.append. Vous trouverez un exemple. here

2

Il vous manque le mot-clé COLUMN, par ex.

ALTER TABLE TBProva ADD COLUMN Fattore Double Default 0; 

En fait, je pense que vous pourriez manquer la partie NOT NULL trop par exemple

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

Je dis cela parce que Jet ne prend pas en charge l'utilisation du mot-clé DEFAULT dans SQL DML, donc la seule fois qu'un DEFAULT sera appliqué est lorsque la colonne est déclarée comme NOT NULL et le nom de la colonne est omise liste des colonnes dans un INSERT. Si la colonne était NULLable, comment obtiendriez-vous que le moteur applique la valeur par défaut ?!

Questions connexes