• 締切済み

アクセスでtableを構成する良い方法教えてください

何度かアクセスで質問をしているものです。 最初に戻って作り直そうかと。。。。 装置番号  メーカー  型番 ・・・・ 11-02-003 aa物産  901i ・・・ 11-02-004 bb物産  602a ・・・ 21-02-001 cc物産  609a ・・・ 21-02-002 bb物産  702a ・・・ 31-02-001 aa物産  702b ・・・ 31-02-002 bb物産  608a ・・・ 31-02-003 cc物産  702a ・・・ 上記のようなデータがあり、装置番号を付与するとき 最初の2桁11、21と31のそれぞれで、末尾3桁が連番なので 最大値プラス1をしていきたいです (右三桁が連番です) 11-02-004の後に11-02-005の出し方が出来ませんでした。 それならば、最初の2桁11、21と31は別々にtableを作ったほうが いいですか? 分けて作ると60くらいのtableを作らなければ なりません、どのような作り方がいいか教えてください。 アクセス初心者用を見ていますが”これなら”というのが みつかりません。 よろしくお願いします。

みんなの回答

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.3

> 何度もありがとうございます。 いえいえ、今回の回答にあたり過去の質問を調べただけで、直接に回答したことはありませんので。 > 1ページに装置ごとに分かれて出てくれました > しかし装置全部なので1ページがすごく大きくなりました 当然大きくなると思います。 番号を全て使い切ると、10,000件のレコードになりますから。 WHERE句を Like '11-02*' などで絞込みを行えば該当レコードは1件以下になりますから問題ないですよね。 > その他はうまく出来ませんでした、出来ないと言うより > やり方が出来なかったほうが強いかも知れません 前回の質問でも同じですが、「うまく出来ない」ではなくて、「何をどう試したらどういう結果になった」と補足すると、新たな回答がもらえると思いますよ。 > 番号をとるのは新たに装置を購入したところ(者)で > 入力して自動で番号をとる形になっています。 入力はフォームで作成させることになると思うのですが、装置番号の先頭2桁と中2桁の数値に対応する項目を選らぶ、もしくは先頭5桁を手入力した時点で装置グループの最終番号を調べることが出来ます。 このタイミングでクエリーから該当装置グループの最終番号を取得して1を加算し、新たな装置番号とするモジュールを、ChangeイベントあAfterUpdateイベントで作成するとどうでしょうか?

lotsqq
質問者

補足

またすみません まず下記をやってみました >SELECT Left([装置番号],5) AS グループ, Max([装置番号]) AS 装置番号FROM テーブル1 GROUP BY Left([機器番号],5); サブクエリはかっこで括ってくださいと出ます、 selectのはじめに括弧をつけました、次は 指定した式でドット()!演算子、かっこの使い方が正しくありません となりカーソルはleftの後の( のところで点滅しています、 かっこを外すと次にテキストデータはダブルクォーテーションで囲む必要がありますとSELECT Left([装置番号],5)の5の前で点滅します。 何がいけないんでしょう?

  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

直接の回答にはならないかも知れませんが、アクセスで処理をしようと すると難しくなりますので、もし、エクセルをお持ちであれば、一度 データをエクセルに落として、オートフィルなどで番号を振った後に アクセスにデータをインポートしてはどうでしょうか。

lotsqq
質問者

お礼

ありがとうございます。 実際はエクセルで使っていました。 しかし、すごく大きなシートで大変なのと (隠して使用する列、行があり) 番号をとるのは新たに装置を購入したところ(者)で 入力して自動で番号をとる形になっています。 そこで以前アクセスの資格を取ったことがあり アクセスに変更しようと考えました。 エクセルでは難しそうだったので、そしたら アクセスも難しいです。 でも一つでも成功すればもう一つとできるように なるかと頑張ってhelpやアクセスの初級者用をネットで みて、勉強中ですが中々私のしたいことに当てはまらず 困っていました。

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.1

以前から同様の質問をされているようですが、そのときの回答は参考にならなかったのでしょうか? > 11-02-004の後に11-02-005の出し方が出来ませんでした。 とあるので最大値を求めることはできたけど末尾に1加算する方法が分からないということでしょうか? クエリで SELECT Left([装置番号],5) AS グループ, Max([装置番号]) AS 装置番号 FROM テーブル1 GROUP BY Left([装置番号],5); 各装置分類の最大値一覧が取得できます。 この辺は以前の質問についた解答と同じはずです。 ここで装置番号の末尾を1加算した新しい番号を生成するには 末尾3桁を取り出し、数値に変換し1を加算する。 その後に先頭の6桁部分に結合する。 という処理を行う Function NewNumber(ByVal LastNumber) as String NewNumber = Left(LastNumber, 6) & Format(Cint(Right(LastNumber, 3) + 1, "000") End Function クエリから取得した最大の製品番号を上の関数に引数として渡せば、1加算された製品番号が返る ※エラー処理は一切していないので、製品番号の書式、桁数、などのチェックコードが必要になる。

lotsqq
質問者

お礼

ありがとうございました。 今まで何度か教えていただいたものを式をコピーして 試したのですが全てうまくいきませんでした。 何か一つでうまく出来るとよかったのですが。。

lotsqq
質問者

補足

何度もありがとうございます。 最大値を求めるとは言わないかも知れませんが 1ページに装置ごとに分かれて出てくれました しかし装置全部なので1ページがすごく大きくなりました。 その他はうまく出来ませんでした、出来ないと言うより やり方が出来なかったほうが強いかも知れません これから、先ほどのクエリもう一度やって見ます。

関連するQ&A