質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

3828閲覧

VB6によるテーブルのデータ型変更

himashirou

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/06/02 08:00

編集2017/06/05 00:21

VB6でSQL2014とMDBファイルに接続するアプリを修正中です。
SQLサーバーとMDBファイルとは基本的にはほぼ同じ構造で
接続はADOによる接続です。

今回、あるテーブルの列を
SQLはIntからDecimal(5,2)に変更
MDBは長整数型(整数)から通貨型の小数点以下2桁に変更したい状況になりました。

SQLの方は、
ALTER TABLE Mytable Alter column MyColumn3 decimal(5,2)
でなんとかなりましたが

MDBの方がわかりません。
ALTER TABLE Mytable Alter column MyColumn3 currency
とした場合は成功しますが、Currency(2)とすると
構文エラーと表示されます。
小数点以下の桁数を設定するには、どのようにすればよいのでしょうか?

質問の追記です
演算結果での桁ではなく
MDBファイルを開いた場合に
フィールドのプロパティ欄にある
小数点以下の桁数の設定部分の変更を
ADOで変更することを考えています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

MDBの Currency は、小数点以下の桁数は4桁に固定です。

通貨データ型

データ型とフィールド プロパティの概要 - Access

演算結果で小数点3桁以下が出る場合は、切り捨てるなり、四捨五入するなりで、丸めてください。

追記

SQLサーバーと同じにしたいということなら、MDBでも下記のSQLで十進型にできますよ。

ALTER TABLE Mytable Alter column MyColumn3 NUMERIC(5,2)

追記の質問への回答

フィールドのプロパティ欄にある
小数点以下の桁数の設定部分の変更を
ADOので変更することを考えています。

フィールドのプロパティの「小数点以下表示桁数」のことですね。これはあくまで表示上だけです。
通貨型フィールドには小数点以下4桁で格納されています。表示するときに小数点以下2桁に丸めて表示されるだけです。

例えば、Accessのテーブルで「小数点以下表示桁数」「2」の通貨型フィールドに1.0049と入力してフォーカスを移動すると、\1.00 と表示されます。また、フォーカスを戻すと、\1.0049 となります。あくまで、表示上だけということが理解できると思います。集計するときも、1.0049 の実数値のほうで計算されます。

この表示上のプロパティはあくまでAccess独自のもので、SQLには当然ながらそのような定義はありません。
外部から接続する場合も当然、引き継げるわけではなく、表示上の制御は外部のアプリ側の処理で行うことになります。

投稿2017/06/02 09:32

編集2017/06/05 03:32
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

himashirou

2017/06/05 00:49 編集

回答をありがとうございます。 まず、返信がかなり遅くなったことをお詫びします。 申し訳ありませんでした。 次に質問の内容が不十分だったようです。 演算結果での小数点以下を設定したいのではなく プロパティとして小数点以下の桁数を2桁にしたいのです。 追記で教えていただいた内容は、まだ試せていませんが 試してみます。 今回通貨型を選んだのは、小数点以下の計算を考えた場合 通貨型がよいとのネット情報があったためです。 なので、SQLの方もDecimalよりMoney型?ってしましたが 小数点以下がありません。 十進型というのと通貨型との違いがよくわかっていませんが 考えてみます。
hatena19

2017/06/05 03:28

小数点以下を含んだ演算の場合、浮動小数点型だと演算誤差が出ます。もともと誤差を含む観測値などを高速に演算する用途にはいいのですが、演算で誤差で出ては困るときに通貨型を使います。ご覧になったネット情報はこのことを言っていたのでしょう。通貨型(SQLサーバーのMoney型も)も小数点以下桁数は4桁に固定です。中身は整数型と同じで、仮想的に下から4桁目に小数点を付けているだけです。整数型なので桁数固定になります。 十進型も中身は整数で、精度(整数部分桁数、小数部分桁数)を指定できるという利点があります。ただ、演算効率が悪い、いろいろ制限があるなどで、あまり使われません。私自身も使ったことはないです。
himashirou

2017/06/05 05:10 編集

早々にありがとうございます。 なるほど…小数点以下4桁固定という意味と プロパティの小数点以下の設定は表示だけの意味がわかりました。 今回、ご指摘の通り演算で誤差が生じると困るケースなのです。 消費税率が入る部分になるのですが 小数点以下の想定をしていなかったようです。 元のテーブル構造としては整数型(3%や5%の「3」や「5」の整数をいれる仕様)だったのを 小数点以下2位まで格納の設定に改修となった次第です。 であれば・・・ SQLサーバーは「Money」 MDBは「Currency」として 小数点以下の表示桁は設定しないとします。
hatena19

2017/06/05 06:19

消費税の端数処理の問題でしたら、演算誤差が出ないように、金額の方は通貨型、消費税の方は整数で 5、 8 と格納して演算するときに 100 でわるか、通貨型で 0.05、0.08 と格納することになると思います。 演算して出た小数部分は、切り捨て、四捨五入、切り上げどれにするかは、事業者の判断で選択できるそうです。
himashirou

2017/06/05 06:43 編集

アドバイスをありがとうございます。 消費税計算の端数処理ではなく レートとしての格納なのです。 今のところ入っている数値は、5とか8なのですが 今後8.25%の消費税とかってのを思ってのことらしいです。 格納数値が8.25になるってことを考えると 上記の通貨型か…?ってことなのです。 言われれば、消費税そのものが「絶対きれいな数値」 ってのもないかなぁとも思いますし 正直のところ、どうしたらいいのかってのもよく見えてませんが 今のうちに対応できるならと考えています。
hatena19

2017/06/05 07:00

格納の問題というのは理解してます。消費税が単独で使われることはなく、金額と乗算された演算結果が使われることになるので、その場合を考慮して格納するときの最適なデータ型を選択する必用がありますよね。当然端数処理をどうするかも考慮する必用があります。例えば、金額を整数、消費税も整数、で乗算して100でわるという処理にすると結果が浮動小数点型になったりします。結局、解決した方法に採用した通貨型(Currency)が最善だと思います。
himashirou

2017/06/05 13:10

またもや遅い返事で申し訳ありません。 >解決した方法に採用した通貨型(Currency)が最善だと思います。 ほかにもいろいろ問題が浮上してきたので 悩んでいるとこういう言葉にホッとします。 細かいアドバイスをありがとうございました。 続けて頑張ります!
guest

0

自己解決

SQLの方は、
ALTER TABLE Mytable Alter column MyColumn3 Money

MDBの方は、
ALTER TABLE Mytable Alter column MyColumn3 Currency

で、再度テストを行ってみます。
ありがとうございました。

投稿2017/06/05 05:12

himashirou

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問