DBの差し替えについて

解決


ハラハラドキドキ  2003-02-25 00:07:39  No: 77205  IP: [192.*.*.*]

こんにちは。
今、DBの差し替えをプログラム上で行っています。
まず、差し替え用のテーブル(旧テーブル)が入っているDBと差し替えたいテーブル(新テーブル)が入っているDBを用意し、①既存のDBから旧テーブルを削除  ②既存のDBに新テーブルをインポート  ③新テーブルの入っていたDBを削除  の順で行っています。
この時に旧テーブルではデータ型が数値型ものは既定値に「0(ゼロ)」が入っていたのに対し、新テーブルではデータ型が数値型ものは既定値が入っていないのですが、どうしてなのかわかりません。わかる方がいたら教えて欲しいのですが。お願いします。

編集    削除
とおりすがり  2003-02-25 00:56:17  No: 77206  IP: [192.*.*.*]

新テーブルの各フィールドに規定値を設定していないからです。
「CREATE TABLE」を使ってテーブル作成しているならば、規定値は設定できるはずです。

編集    削除
ハラハラドキドキ  2003-02-25 01:04:45  No: 77207  IP: [192.*.*.*]

用意している新テーブルの既定値には「0(ゼロ)」が入っているんですが…
テーブル自体は「CREATE TABLE」ではなく、新テーブル用にDBを用意しているんです。

編集    削除
とおりすがり  2003-02-25 01:57:15  No: 77208  IP: [192.*.*.*]

データインポートをする時の実行形式はなんですか?また、スクリプト文であれば、やはり[INSERT]文ですか?
内容によって回答が変わります。

編集    削除
ハラハラドキドキ  2003-02-25 02:16:48  No: 77209  IP: [192.*.*.*]

select intoです。

編集    削除
ハラハラドキドキ  2003-02-25 03:38:21  No: 77210  IP: [192.*.*.*]

今、CREATE文を使ってみているんですが、

strSQl = "CREATE TABLE "
strSQl = strSQl & "AAA "
strSQl = strSQl & "(数値型 LONG DEFAULT 0)"

としてみたのですが、やはりうまくいきません。
ACCESSでは無理なのでしょうか?

編集    削除
とおりすがり  2003-02-25 18:24:36  No: 77211  IP: [192.*.*.*]

CREATR文自体間違ってます。
「数値型」が不要です

編集    削除
1412  2003-02-25 18:54:49  No: 77212  IP: [192.*.*.*]

いえ、 create 文はあってます。
ただ、 Access の create table には
default は使えなかったと思います。
# SQL Server では使えたかな?

それなので、既定値を設定したい場合は、
テーブル作成後に、 DAO.TableDef オブジェクトなどを使用して
DefaultValue プロパティなどを設定して下さい。

編集    削除
とおりすがり  2003-02-25 19:11:01  No: 77213  IP: [192.*.*.*]

すんません m(__)m
「数値型」って入れても大丈夫なのですね…
ところで、確かにACCESSでは私も実験しましたが、CREATE文からでは「DEFAULT」が使用できませんね〜
SQL ServerやOracleでは使用できるのですが…

編集    削除
とおりすがり  2003-02-25 19:34:48  No: 77214  IP: [192.*.*.*]

すんません m(__)m
「数値型」って入れても大丈夫なのですね…
ところで、確かにACCESSでは私も実験しましたが、CREATE文からでは「DEFAULT」が使用できませんね〜
SQL ServerやOracleでは使用できるのですが…

編集    削除
魔界の仮面弁士  2003-02-25 19:42:14  No: 77215  IP: [192.*.*.*]

Jetでは、CREATE TABLE時に規定値を設定する事ができません。
ただし、作成後にALTER TABLEを使うことで、規定値を与える事ができます。

=============
CREATE TABLE StaffMaster
 (StaffName TEXT(30) NOT NULL
 CONSTRAINT PKey PRIMARY KEY)
=============
ALTER TABLE StaffMaster
  ALTER COLUMN StaffName TEXT(30) DEFAULT Unknown
=============

なお、これらのJET SQL構文を使うためには、
Microsoft OLE DB Provider for Jet 4.0 から利用できる
『ANSI-92 SQL 構文モード』を利用する必要があります。

なお、DAOの場合は、ANSI-89モードしかサポートしていないため、
 SQL文での修正を行うことはできません。

# 要するに、ADOならSQLで修正できるけれど、DAOではNGという事です。
# DAOの場合は、1412 さんが書かれたように、
# "DefaultValue"ダイナミックプロパティを利用してください。

編集    削除
ハラハラドキドキ  2003-02-25 21:58:21  No: 77216  IP: [192.*.*.*]

多くの御助言ありがとうございました。
やはり、ACCESSのCREATE文ではDEFAULTは聞けないのですね。
今回はDAO形式なので、DefaultValueを使ってみます。

編集    削除