ACCESSのオートナンバーを使用したいのですが、
4バイト(Long)で表現できる数値を越えた時どうなるのかが心配です。
自動的に0に戻るのでしょうか?それともエラーが発生してしまうのでしょうか?やはり、意図的にオートナンバーを初期化するべきなのでしょうか?
とても大きな数値になるので、簡単にテストしてみる訳にも行かないので、
どなたか知っていたら教えてください。

A 回答 (1件)

 早いパソコンを使用すれば、そんなに時間がかからずに確認出来ました。



 結論:エラーになります。
 すき間が出来るようなら初期化するのがベターなのでしょうが、そうでないデータなら、主キーを自分で設定してオートナンバーを使用しない方が良いでしょう。

 私見ですが、オートナンバーを使用せず時刻を使用して任意のキーを生成する様にした方が、汎用性があって素敵だと思います。よ。
    • good
    • 0
この回答へのお礼

わざわざテストしてくださって、ありがとうございました。
そうですかぁ。やっぱりエラーになってしまいますか。
そうですよね。時分秒までを採用すれば必ずユニークになりますものね。。。
(StandAloneでオペレータさんが手入力する為、1秒間にダブってしまう恐れは全くないので。)
ただ、この番号をオペレータさんが通番として確認したいらしいので
やはりシーケンシャル番号にこだわる必要があるのです。。。。
そうなると、オートナンバーをやめて自分でMAX番号を取得して+1するとか、オートナンバーのままで一定期間に初期化するとかということに
なってしまいそうですね。。。。

とにかく、この問題については皆「そんな大きな数にならないから気にしないよ」とお気楽な意見で、私一人で懸念していたのですが、やっぱり
ちゃんと考え直すことにします。

納品後、何ヶ月もしてからオートナンバーがオーバーフローして
クレームが来ても嫌なので、これから頑張ります。
問題が大きくなる前に、専門家さんの意見が聞けてよかったです。
ありがとうございました。

お礼日時:2001/05/08 17:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q右上の×を押したときに行う処理を意図的に書きたい

今、OpenCVとOpenGLの両方を用いたプログラムを書いています。

OpenCVで物体を追跡したとおりにOpenGLで絵を動かそうとしており、
そのためには
glutDisplayFunc(display);
で呼び出しているdisplay()関数内で
OpenCVを用いた画像処理プログラムを書く必要があると思っています。

しかし、cvCapture *captureなどとした場合、
cvReleaseCapture(&capture);
などをプログラムの最後に行わなければなりません。

キーボードの「q」を打つことでメモリ解放および
プログラムの終了をさせることができるのですが、
ウィンドウの右上の×を押しても同様の処理をさせたいと
考えています。

ウィンドウの右上の×を押してもcvReleaseCapture(&capture)
などを行わせるにはどのように書けばよいのでしょうか?

Aベストアンサー

途中でreturnとかしていなければプログラムの最後に書けばいいです。×をクリックしても最終的にはここに来ますので。
実際は書かなくてもプロセス終了とともに自動的に開放されると思います。

Q指定した数値より小さい数値がある行を抽出したい

バッチファイルで、指定した数値より小さい数値を含む行を抽出したいのですが、そのような事は可能でしょうか。

環境はWindowsXPです。

例えば、「a.txt」というテキストファイルがあって、以下の様な内容の場合に、「40」以下の数値を含む行を抽出するという事は可能でしょうか。

―――――――――――――――――
【a.txtの内容】
―――――――――――――――――
30
50
70
―――――――――――――――――

使用するコマンドは、WidnowsXP上で動作するものであればなんでも構いません。
何か良い方法をご存知の方がおられましたら、お教え頂けないでしょうか。
何卒、宜しくお願い致します。

Aベストアンサー

No3です。

がんばれば、バッチだけでも出来そうな気もしますが、時間がかかります。
awkが使えるのであれば、簡単に書けます。

set 入力値=5000
set 入力ファイル=a.txt
awk "{A=$0;if(sub(/^[^0-9]*/,B,A) && sub(/円.*$/,B,A) && A>0 && A<=X)print}" X=%入力値% %入力ファイル% > 結果ファイル.txt

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

QListViewの複数項目削除で意図しない挙動

前回質問した内容でほとんど複数削除は解決したように
見えたのですが、どういう条件か分からないのですが
複数選択(1件選択の場合は発生しない)して削除ロジックを
実行すると選択している項目と異なる内容の配列(ArrayList)の
データを削除してしまうという事が発生します。

これは何が原因で発生しているのでしょうか?
またこれの解決法をご教授頂けないでしょうか。

環境はVS2005(C#)、.NET Framework2.0です。

以下に該当部分のコードを載せます。
2000文字を超えてしまったので問題の部分以外は省略しました。

※添付画像が見にくかったので以下のURLに再掲示しましたので
参考にしてもらえるとありがたいです。
http://angelteatime.punyu.net/questionbox_20090312.jpg

画像では350件ある受信メール(ArrayListに1件ずつMailクラスで
格納されている)の先頭から8件ぐらい選択削除をしようとしている
画面です。

private void menuDelete_Click(object sender, EventArgs e)
{
// 選択アイテムが0のときは反応にしない
if(listView1.SelectedItems.Count == 0){
return;
}

if(listView1.Columns[0].Text == "差出人"){
// 受信メールのとき
for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) {
if (listView1.Items[sel_index].Selected) {
int nIndex = (int)listView1.Items[sel_index].Tag;
if (listView1.Items[sel_index].SubItems[1].Text == ((Mail)collectionMail[RECEIVE][nIndex]).subject) {
collectionMail[DELETE].Add(collectionMail[RECEIVE][nIndex]);
collectionMail[RECEIVE].RemoveAt(nIndex);
}
else{
MessageBox.Show(string.Format("選択した件名と削除するデータが異なっています。\nリスト位置件名:{0}\n実位置件名:{1}\n(リスト位置:{2}, 実位置:{3}", listView1.Items[sel_index].SubItems[1].Text, ((Mail)collectionMail[RECEIVE][nIndex]).subject, sel_index, nIndex), "エラー", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
this.textBody.Text = "";
}
else if(listView1.Columns[0].Text == "宛先"){

(上記のRECEIVEがSENDに変更のみでロジック変更なし)

}
else if(listView1.Columns[0].Text == "差出人または宛先"){

(上記のDELETEに変更されDELETEの配列に格納されたデータを削除)

}
// ツリービューとリストビューの表示を更新する
UpdateTreeView();
UpdateListView();

(ListViewのフォーカスを設定し直す)

}

前回質問した内容でほとんど複数削除は解決したように
見えたのですが、どういう条件か分からないのですが
複数選択(1件選択の場合は発生しない)して削除ロジックを
実行すると選択している項目と異なる内容の配列(ArrayList)の
データを削除してしまうという事が発生します。

これは何が原因で発生しているのでしょうか?
またこれの解決法をご教授頂けないでしょうか。

環境はVS2005(C#)、.NET Framework2.0です。

以下に該当部分のコードを載せます。
2000文字を超えてしまったので問題の部分以...続きを読む

Aベストアンサー

ごめんなさい
IndexOfではなく IndexKeyOfでした

int nIndex = listView1.SelectedItems.IndexKeyOf( nIndices[nLen-1].ToString() );

Qアセンブラの数値比較

Z80のアセンブラで数値比較を行うにはどのような記述をすればよいのでしょうか?
例)変数に入っている値「10」と変数に入っている値「20」を比較するような場合
よろしくお願いいたします。

Aベストアンサー

VDATA1:
.db 10 ;変数VDATA1を10で初期化
VDATA2:
.db 20 ;変数VDATA2を20で初期化

begin:
LD CD,VDATA1 ;変数VDATA1のアドレスを読み込む
LD A,(CD) ;アドレスの内容をレジスタAに読み込む
LD CD,VDATA2 ;変数VDATA2のアドレスを読み込む
LD B,(CD) ;アドレスの内容をレジスタBに読み込む
CP B ;A-Bの結果でキャリー設定
JP C,ptn_m ;C(A<B)ならばptn_mへ
JP Z,ptn_z ;C(A=B)ならばptn_zへ
JP NC,ptn_p ;NZでNC(A>B)ならばptn_pへ

ptn_m:
ptn_z:
ptn_p:

ニーモニック表記で記述しました。
詳しくは、参照URLを見てください。

参考URL:http://www3.ocn.ne.jp/~miotti/ti/asm/

VDATA1:
.db 10 ;変数VDATA1を10で初期化
VDATA2:
.db 20 ;変数VDATA2を20で初期化

begin:
LD CD,VDATA1 ;変数VDATA1のアドレスを読み込む
LD A,(CD) ;アドレスの内容をレジスタAに読み込む
LD CD,VDATA2 ;変数VDATA2のアドレスを読み込む
LD B,(CD) ;アドレスの内容をレジスタBに読み込む
CP B ;A-Bの結果でキャリー設定
JP C,ptn_m ;C(A<B)ならばptn_mへ
JP Z,ptn_z ;C(A=B)ならばptn_zへ
...続きを読む


人気Q&Aランキング

おすすめ情報