• 締切済み

Accessでの質問

ID ----- 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A このようなテーブルがあり、フォームにいくつかのテキストボックスと登録というコマンドがあります。登録ボタンをクリックしたときtxtidというテキストボックスに何も入力されていないとき上のテーブルを参照してIDを採番し、登録できるようにするにはどうすればいいですか?ちなみIDコードの登録は16進数で登録できるようになっています。上の場合だと000Bを採番したいのです。仮に0007がないときは0007を採番したいんですが…初心者なので本当に困っています。お願いします。説明不足でわかりにくい時は質問していただければ大変助かります!

みんなの回答

  • Nii
  • ベストアンサー率48% (79/162)
回答No.2

IDをオートナンバーにし、表示時に16進表記に変換すれば、新規レコード追加時に自動的に最大値を取れると思いますが、それでは回答にならないので。 >000Bを採番 IDが文字列とした場合 txtid = HEX(Val("&H" & DMAX(ID,テーブル名))+1) txtid = MID("0000" & txtid , len(txtid)+1 , 4) DMAX関数で、最大値を取得する。 VALで数値に変換しプラス1する。 HEXで16進数に MIDで頭に000を付加 >仮に0007がないときは0007を採番 抜け番を取得する為には、抜け番の無いテーブルを作成し、元のテーブルとの差分を作成し、そこから値を取得するか、最初から順番にカウントし抜け番を検索する必要があると思います。 それよりも、一覧を表示させ、入力者が判断して入力も出来るようにされてはどうでしょうか? 無い番号を探しにゆくより、ある番号を探しにゆく方が作成は楽ですから。

  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.1

ちょっと考えましたが簡単な方法は無いと思います。 手法と言うよりはロジック的はお話ですが、やはり登録時に空き番号取得処理を作り、何処が空いているか一件一件探していくしかないように思います。空き番が存在しないのでしたらクエリーやSQLで最大値を求めそれの次の番号を振れば良いと思います(複数のクライアントから取得に行っている場合、登録がダブったときの再登録ロジックは必要です)。 例で言う0007が無ければそこに0007を入れるとなるとloopで一件一件頭から見ていって無かったらその番号を割り当てると言ったプロシージャを作る必要が有ると思います。

関連するQ&A

  • アクセスコマンドボタンで登録。

    アクセスのフォームで、コマンドボタンをクリックして、初めて登録ができるというのはどのようにすればいいのでしょうか?普通、登録画面といったら、テーブルを基にしてフォームを作成していいのでしょうか?それとも非連結にしてフォームからフォームへ登録という風にするものなのでしょうか?フォーム上のテキストボックスに一つでも文字を入力すると、×ボタンで消しても、データがテーブルに入っていってしまいます。これを防ぐことはできるのでしょうか?保存でもいいですし登録でもいいのですが、コマンドボタンを作成して、それをクリックして初めてテーブルにデータが入っていくという風にしたいのですが。どなたか分かる方居ましたらご教示ください。宜しくお願いします。

  • アクセス サブフォームの使い方

    フォームにテキストボックスとコマンドボタンサブフォームが1つづつありま す。 やりたいことは、テキストボックスに入力した条件でコマンドボタンを押すと サブフォームに結果が表示されるというものです。 ID 分類 名称 1  花  バラ 2  花  ユリ 3  昆虫 カブトムシ とテーブルがあった場合、 テキストボックスに 花 を入力すると サブフォームに バラとユリが 表示されるというものです。(実際にはフィールド数はもっとあります。) コマンドボタンにクエリの実行を登録し、サブフォームはクエリをベースに作 成しました。 コマンドボタンをクリックするとクエリの結果が表示され(当たり前ですね) サブフォームは白紙のままです。 ファームのデザインビューをクリックし、再度フォームを表示すると結果は反 映されます。 この、クエリの結果を表示せず、かつサブフォームに結果を表示させる方法を 教えてください。

  • ACCESS

    現在以下のシステムを検討しています。 (1)ログインフォームと(2)トップフォーム(3)注文フォームが別々に存在しており、 (1)ログインフォームは  ・ログインID入力用のテキストボックスが一個  ・パスワード入力用のテキストボックスが一個  ・ログインボタンが1個  設置されています。 以下はログインボタンクリック時に動作するプログラムです。 Private Sub cmdLogIn_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "IDを入力してください" Me.txtID.SetFocus Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "パスワードを入力してください" Me.txtPass.SetFocus Exit Sub End If Res = DLookup("パスワード", "T顧客", _ "顧客ID='" & Replace(Me.txtID, "'", "''") & "'") If IsNull(Res) Then MsgBox "該当するIDはありません。正しいIDを入力してください。" Me.txtID.SetFocus Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "注文フォーム" '----ID,pass合致でフォームを開く。 Me.txtID = Me.txtID2 Me.txtPass = Me.txtPass2 DoCmd.Close acForm, "Fログイン" Else MsgBox "パスワードが異なります。", vbOKOnly + vbCritical Me.txtPass.SetFocus End If End Sub (2)トップフォームは  商品のリストが画像付き(商品一個につき画像一個)  で示され、画像を押すと商品別に作成してある注文フォームに進むのですが、  ログイン完了していないとログインを促すメッセージが出て注文フォームが開かないよう  にしています。  トップフォームにはテキストボックスを2個不可視の状態で配置しております。  以下は商品画像に埋め込んであるコマンドです。 Private Sub 商品画像 1_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "ログインしてください" Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "ログインしてください" Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "商品名" '----ID,pass合致で注文フォームを開く。 End If End Sub   (3)注文フォームは  ・数量選択のコントロールボックス  ・注文ボタン  ・キャンセルボタン  を設置しています。 【以下が質問内容になります】 「ロフインフォーム」内の入力値(テキストボックスに入力されていたIDやパスワード値)を注文フォーム内のテキストボックスに取得させる(あるいは設定させる)にはどのようにすればよいのでしょうか? 注文フォームにはテキストボックス2個( ID入力用と Password入力用)を不可視で配置しています。こちらのテキストボックス2個については手動入力は行わず、注文フォームが開いた際にログイン時の ID, Paswordがテキストボックスの中に自動的に入力あるいは設定されるようにしたいのですが、どのようにすればよいかがわかりません。 因みにログイン ID,Passwordは複数セットあり、ユーザーがログイン完了後、注文フォームを閉じるまでの間は 同一のID, Paswordの内容を保持したいと考えています。 上記の中にID,Paswordを保持させるようなコードを入れることは可能でしょうか? 注文フォームを開く際のコードに何か入れることができるのではないかと考えていたの ですが、よい案が浮かびません。 他によいやり方などがあれば教えていただけますでしょうか? よろしくお願いします。

  • Accessのフォームで

    教えてください。下のようなテーブルがあり、これを元にフォームを作成したいのですがいい方法が見つかりません。 【テーブル】  品物テーブル(品物ID、品物、製作所)  社員テーブル(品物ID、社員コード、氏名) このテーブルを元にして下のようなフォームを作りたいのです。 【フォーム】  品物ID [テキストボックス]  品物 [テキストボックス]  製作所 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス] ※社員コード、氏名が3つあるのは、同じ品物を3人が作成することがあるため。(この部分で悩んでいます) このようなフォームを作ることは可能でしょうか? また参考になるようなサイトなどあれば教えてください。 よろしくお願いします。

  • oracle8に接続Access97での質問

    Access97のフォーム上にoracleのテーブルからデータを呼び出したいのです。oracle側でのIDコードは8桁あり、初めの4桁は固定で例えばIDコードgggg0000とあるとするとggggの部分は固定です。これをAccess97のフォーム上に呼び出すときは後半の4桁(0000)だけをテキストボックスに取り出したいのです。また反対にAccess97のフォーム上で登録するときは後半の4桁(例えば0001)だけをテキストボックスに入力します。そしてoracle側には8桁(gggg0001)でデータを保存したいのです。初心者なんで丁寧かつ詳しい説明をお願いします。説明不足でありましたら質問してください!よろしくお願いします。

  • アクセス2000でデータの追加がうまくいかないんですけど

    アクセス2000を使ってます。 基礎データというテーブルを作って、そこに「テキスト」というメモ型のフィールドを作り、 参照追加フォームというフォームを作って、その中に二つのテキストボックスを配置し、一方のテキストボックス1には「基礎データ」の「テキスト」をコントロールソースとして設定し、他方のテキストボックス2は非連結にし、コマンドボタンを二つ配置して、一方のコマンドボタン1を押すと、テキストボックス1のデータがテキストボックス2のデータにコピーされるようにVBAコードを書き、さらに、もうひとつのコマンドボタン2を押すと、非連結のテキストボックスのデータを、基礎データテーブルの「テキスト」というフィールドに追加する追加クエリを動かすようにしました。  このような状況で、コマンドボタン2を押すと、非連結のテキストボックス2のデータが、全角126文字までなら正常に動作するのですが、それ以上(全角127文字以上)になると、「引数が無効です。」というエラーが出てしまいます。 基礎データテーブルの「テキスト」はメモ型に設定してあるのに、どうしてこのようなエラーが出てしまうのでしょうか?誰か教えてください。  ※ためしに、追加クエリ単独で動かして、全角127文字以上のデータを入れた場合には、追加クエリは正常に動作します。これって、フォーム側の問題なんですか?  

  • テーブルの主キー採番を標準モジュールで行いたい!

    テーブルの主キー採番を標準モジュールで行いたい! 現在下記のコードで各フォームより各テーブルに番号を振っているのですが、 1.新規登録ボタンクリック時 2.削除ボタンクリック時など 同じコードを記述しなければいけないのでFunctionプロシージャで各フォームのコマンドボタンのクリック時に各テーブルに採番したいと思うのですが良い方法がありましたらアドバイス宜しくお願いいたします。 If DCount("*", "T会社") = 0 Then Forms("F会社").txt会社コード = "001" Else Forms("F会社").txt会社コード = _ Format(DMax("会社コード", "T会社") + 1, "000") End If

  • ACCESSで入力時間を計る

    よろしくお願い致します。 ACCESS2000で入力フォームを作っています。いくつかのテキストボックスがあり、テーブルには全てVBAで登録をするので、ボタンをクリックすると登録できるように作りました。 そこで、一番最初に入力するテキストボックスに文字が入力されてから、ボタンをクリックするまでの時間を計測したいのですが、上手くいきません。 何か良い方法はありますでしょうか? よろしく、お願いいたします。

  • oracle8に接続、Access97での質問。自動でIDを取得するには…

    仮にoracleのテーブルのデータ(02EE9001、02EE9002)があるとしAccessのフォーム上でIDコードを入力しなかった場合自動でIDコードを割り当てられるようにしたいのです。たとえば今Accessのフォーム上でIDコードを入力しないで登録した場合、02EE9003が自動で割り当てられるようにしたいのですがどうすればいいですか?ちなみ16進数でIDコードを割り当てています。しかも、02EEは固定です。仮にコードを割り当てられなくなったときは「空きIDがありません。」というようなメッセージも出したいのです。どうかよろしくお願いします。かってなことばかりですみません。

  • Access2010についての質問です。

    アクセス「超」初心者です。 あるクエリ上のデータを検索(抽出?)して、フォームに反映させたいのですが、基本的なところで躓いております。 クエリ【Q基本データ】にあるフィールドは [階] [場所] [物] です。 [階][場所]は、別にテーブルがあり、そこから選ぶようになっています。 (→【T階テーブル】【T場所テーブル】) このクエリを基に作成したフォーム【F基本データ】上で、検索を行いたいのです。 フォーム【F基本データ】のヘッダー部分に、 テキストボックスを2つ[階検索][場所検索]と ボタンを1つ[検索] それぞれ配置し検索を行えるようにしたいのですが・・・ (テキストボックスはそれぞれ【T階テーブル】【T場所テーブル】からコンボボックスで選ぶようにしています) [検索]ボタン > プロパティシート > イベント > クリック時 の埋め込みマクロにアクション「フォームを開く」を入力していけば良いのでしょうか??? テキストボックスが2つだとマクロでは無理とか??? テキストボックス1つにつき、ボタンを1つ配置したら良いのか??? ご教授いただけましたら幸いです。