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 オブジェクト モデルで作成されましたが、ADODB 接続で使用される一般的な ADO オブジェクト モデルに簡単に切り替えることができます。

EDIT:1つの「暗黙の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 がDEFAULTSQL DML でのキーワードの使用をサポートしていないためです。したがって、 aDEFAULTが適用されるのは、列が として宣言されNOT NULL、列名が an の列リストから省略されている場合のみINSERTです。列が NULLable の場合、どのようにしてエンジンにデフォルトを適用させますか?!

于 2008-12-22T11:42:29.060 に答える