• 締切済み

DMAXを使って登録ボタンを作りたい

accessを使い現在ある利用者IDの最大値をDMAXで検出し そのIDに+1をして登録を行いたいのですがまったくできません・・・ 現在最大のIDがZZZZ4000だったとすると自動検索してZZZZ4001で登録できるように。 riyou_id = DMAX("riyou_id", "riyou_infotb")+1 とすると「型が一致しません。」となってしまいます。 できれば、最大値+1のIDを検出し登録用のフォームを表示し、新しいレコードを出して登録ができるまでの書き方を教えてください。よろしくお願いします。

みんなの回答

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

ZZZZ???? 下4桁の最大値は ?dmax("right(riyou_id,4)","riyou_infotb","left(riyou_id,4)='ZZZZ'") で求められますので たとえばフォームで ZZZZ???? のレコードを選択しているとすると新IDは left(me!riyou_id,4) & format(dmax("right(riyou_id,4)","riyou_infotb","left(riyou_id,4)=' & left(me!riyou_id,4) & "'") + 1,"0000") 求められると思いますが 一つのフィールドに複数の意味を持たせるのではなく(ややこしくなって使いづらい) フィールド 分類     ZZZZなどを格納 フィールド 連番 (数値型にして 書式に 0000 とする)     上記「分類」フィールド毎の連番を格納 分類 と 連番で複数フィールドのインデックスを作成し重複排除 ちょうどいいのが無かったけど http://www.tsware.jp/labo/labo_06.htm ↑こんな感じ であれば nz(dmax("連番","riyou_infotb","分類 ='" & me!分類 & "'"),0) +1 で求められますけど・・・

noname#135452
質問者

お礼

回答ありがとうございます。 ?dmax("right(riyou_id,4)","riyou_infotb","left(riyou_id,4)='ZZZZ'") なのですが実行後 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」となりました。 left(me!riyou_id,4) & format(dmax("right(riyou_id,4)","riyou_infotb","left(riyou_id,4)=' & left(me!riyou_id,4) & "'") + 1,"0000") こちらですとコンパイルエラーになりました・・・ できればモジュールだけでどうにかしたいです(涙

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

文字に1を足しても駄目です。文字と数値を切り離してから戻せばOK riyou_id = Left(DMax("riyou_id", "riyou_infotb"),4) & Format(Right(DMax("riyou_id", "riyou_infotb"),4)+1,"0000") でできます。

noname#135452
質問者

お礼

お早い回答ありがとうございます! ですが普通にテーブルをフォームで呼び出しただけの形になってしまって レコードのはじめが表示されただけでした・・・ そしてZZZZの書き出しIDの一番大きいものに+1するものが作りたいです 他にもAABBからの書き出しID等もあるので・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 登録機能を作りたい

    以前こちらの質問をして http://okwave.jp/qa2796766.html DMAXを使った利用者IDの最大値+1を求めることができました。 それを利用して登録フォームを作りレコードに登録していきたいと思います。 まず登録ボタンを押すと利用者IDの最大値+1されたIDが自動で出てきます 他のフォームは空の状態で入力しその登録フォームに作った登録ボタンを押すとレコードが追加されるようにしたいです。 どういう手順を取ればこういった操作ができますか? よろしくお願いします

  • ACCESS2007 DMaxについて

    WinVistaでACCESS2007を使っております。 顧客との取引履歴のデータベースを少しずつ作っております。 現在のデータベース構成は簡単に書きますと、 「顧客T」 ・顧客ID ・顧客名 ・ ・ ・ ・最終取引日 「取引T」 ・取引ID ・顧客ID(顧客Tの顧客IDとリレーション) ・取引日 ・取引内容 という感じです。 顧客Tをソースに「顧客フォーム」を作り、そのフォーム内にサブフォームで 取引履歴として「取引履歴サブフォーム」。「取引日」「取引内容」のみ表示して 入力しております。 やりたいことは、フォームを開いた際に、サブフォーム内の取引日の中で 最新の日付をメインフォームの「最終取引日」フィールドに入力して、データ を更新していきたいです。 非連結のフィールドを作って表示だけすればいいのかもしれませんが、 現状データとして格納していきたいです。 VBAでメインのフォーム「開くとき」にDMaxで最大の日付を拾えばいいかと思い 試してみましたが、エラーが出てしまいます。 いろいろ試してみましたが、記述はこんな感じです。 Me.最終取引日=DMax("日付",Me.取引履歴サブフォーム) としてみました。 どなたかお力を貸してください。

  • ACCESSのDMAXについて

    ACCESSでの、クエリーの書き方での質問です。 やりたいことは、テーブル中のデータから、最大値を求めて、+1して、レコードを追加したいのです。 商品番号、商品名、番号というテーブルから、商品番号と商品名が一致した中から、 最大の個数を求めるDMAX関数の書き方をどのようにしたらよろしいでしょうか? イメージ的には、 商品番号 商品名 番号 00001   鉛筆    2 00001   鉛筆    3 00001   鉛筆    1 00002   鉛筆    4 となっていた場合、商品番号に「00001」、商品名に「鉛筆」を与えたとき、答えの番号「3」を求めます。 イベントプロシージャではなく、クエリーの画面のフィールド式です。 追加クエリーで、その求めた「3」に+1して、番号を「4」にして新しいレコードを書き込む・・・ なんていうことは可能でしょうか。 VBAでやるのは、なんとなくわかるのですが、クエリーの画面での書き方がわかりません。 (それとも出来ないものなのでしょうか?)

  • 文字を含むIDの自動採番

    Access2013を使っています。 IDはテキスト型で、 A00000000 っていう書式なんですが、 新規レコード作成時のイベントで、ID自動採番(連番をふる)をしたいのですが、下記だと最初の1レコード(A00000001)以降がエラーになってしまいます。 Format(Nz(DMax("ID", "T_テーブル名"), 0) + 1, "\A00000000" ) もちろん、すでにあるIDがA00000001なので、DMaxが使えないんですが、どうやって分けてやったら良いのかわかりません。 やりたい結果は、新規レコード作成時に、IDが"A"&"8ケタの最大値+1"が自動に振られて、テーブルのIDフィールドにA00000001、A00000002・・・とデータ保持したいのです。 説明が判り辛くて恐縮ですが、ご教示お願いします。

  • AccessのDMax関数使用後のテキストの表示

    Accessで項目の表示がうまくいきません。 もともとテキスト型の項目で、例えば「0005」というデータがあります。 それがフォーム(1)ではそのまま「0005」と表示されます。 それにマクロでDMax関数を使用して1足し込み、値の代入をし、フォーム(2)で表示すると、 「6」と表示されます。 「0006」と表示させたいのですが、どうすればいいでしょうか。 また、「6」ではなく「0006」でレコードの更新もしたいのですが、可能でしょうか。 (要は、その都度最新の番号を取得して、その番号でレコードの更新もしようとしているのですが。) おわかりの方、回答よろしくお願いします。

  • DMAXの条件の設定方法

    下図のように、各行のC列にそのID(A列)に該当する最大値を表示させたいのですが、どのように設定すればよいのでしょうか? Webで検索したところ、条件の箇所をC1:C2と設定しているものは見つかりましたが、この表は数百のIDがあるため、一つ一つ設定することが難しい状態にあります。 DMAX関数でやりたいことこれだとVALUE!が返ってきてしまいます。

  • access dmaxで#error

    ずぶの素人で、一からデータベースを作らねばならず、職場にわかる人間もいず、参考書とグーグルを駆使しながらコピペ、改変で頑張って作っています。 質問はテキストボックス内の式ビルダです。 請求日を管理していて、直近の請求日と、その一つ前の請求日をフォームに表示させたいと思っています。 顧客はIDにて管理していて、請求日テーブルに顧客ID、請求日の2つのフィールドを作り、どんどん追加していく仕組みにしています。 フォーム上に表示されているIDを条件にテーブルから抽出しています。 直近の請求日を抽出する式 =DMax("請求日","T請求日","id=" & [ID]) 二番目の請求日を抽出する式 =DMax("請求日","T請求日","請求日 < #" & DMax("請求日","T請求日","id=" & [ID]) & "# and id=" & [ID]) こちらをフォーム上のテキストボックスの式にそれぞれ入れています ここで、全く請求していない顧客の場合、直近の請求日は空白となるのですが、二番目の請求日に#errorが出てしまいます。 検索してもiifとisnullを使った回避策しか出てこなく、これを式に組み入れも解決しませんでした。 もともとの式もネット上にあったソースを改変し作っていますので、間違っているかもしれません。 今のところ、請求日が入っている顧客に関しては問題なく表示しています。 何卒ご指導お願い致します。

  • ACCESSで、DMax関数の条件の書き方

    ACCESS2002を使用しています。 自動的に連番を採番するコードを書きましたが、DMax関数でうまく最大値を取得できません。 条件式がうまく書けていないと思うのですが、どうぞお知恵をお貸しください。 テーブル[t_受注]にあるフィールド[受注コード]は、「yyyymm000」のように9桁表示です。 「yyyymm」の部分は現在の年月から取得し、「000」の部分は年月ごとに001~連番を採番しています。 しかし年月が変わるとうまく最大値を取得できず、次のように連番が採番されてしまいました。 [受注コード] 200705001 200705002 200705003 200705004 200706001 200706005(本当は200706002と自動採番したいのです) 最大値(MaxID)取得するコードはこのように書いております。 よろしくお願いします。 ------------------------------------------------------------------------------------------- Dim NowYearMonth As String Dim MaxYearMonth As String Dim MaxID As String NowYearMonth = Format(Date, "yyyymm") MaxYearMonth = Nz(DMax("Mid$([受注コード],1,6)", "t_受注"), "") MaxID = Nz(DMax("Mid$([受注コード],7,3)", "t_受注"), "NowYearMonth=MaxYearMonth") -------------------------------------------------------------------------------------------

  • 連番のみのテーブルの作成

    空き番号を求めるために対象になる連番だけの以下のようなテーブルを作りたいのですが ZZZZ0001からZZZZ9999まで登録してあるだけのテーブルを作りたいのです 1つ1つ書き込んでは時間がかかるので・・・自動でレコード追加したいのですが DoLoopやIfを使ってやってみましたがまったく書き込めもしませんでした (PCが動作開始するだけ) テーブルはID(オートナンバー)仮想ID(テキスト型)のみです 書き込んであるのはZZZZ0001のみになります。 DoLoopやIfを使って実現することはできますでしょうか ひどい作りではありますがVBAはこんな感じでした やりたいことが伝わればいいのですが・・・ たくさん修正箇所はあると思いますがどうぞよろしくお願いします。 Do Until a = 100 a = DMax("仮想ID", "ZZZZ連番テーブル") a = Mid$(a, 5) a = (a + 1) If a >= 1000 Then テキスト0 = "ZZZZ" & a Else If a >= 100 Then テキスト0 = "ZZZZ0" & a Else If a >= 10 Then テキスト0 = "ZZZZ00" & a Else テキスト0 = "ZZZZ000" & a End If End If End If a = a + 1 仮想ID = "ZZZZ" & a Loop

  • ツールバーにある検索ボタンと同じボタン

    ACCESS97を使っているのですが、一度入力したレコードに後からその同じレコードに追加データを入力したい。そのときに、レコードがたくさんあるので、追加したいレコードを検索して、追加データを入力したいのですが。 ツールバーにある検索ボタンのように、検索条件を別フォームに入力してOKボタンを押すと、検索結果は元のフォームに出てくるみたいなことをしたいのですが、可能ですか??

このQ&Aのポイント
  • マンションでの騒音トラブルに悩んでいます。テレビの音や家電の音が原因と思われる苦情がありますが、私はそのような音を出していないため、他の住民が原因ではないかと考えています。
  • スマホで動画を見ていた際、お隣から壁を殴られるという出来事もあり、怖い思いをしました。しかし、私がテレビの騒音を聞いたことはありません。
  • 管理会社からは「次苦情が入ったら退去して頂きます」と言われており、非常に不安です。どこに相談すれば良いのか、また今後の対応方法についてアドバイスを頂きたいです。
回答を見る

専門家に質問してみよう