- 締切済み
DMAXを使って登録ボタンを作りたい
accessを使い現在ある利用者IDの最大値をDMAXで検出し そのIDに+1をして登録を行いたいのですがまったくできません・・・ 現在最大のIDがZZZZ4000だったとすると自動検索してZZZZ4001で登録できるように。 riyou_id = DMAX("riyou_id", "riyou_infotb")+1 とすると「型が一致しません。」となってしまいます。 できれば、最大値+1のIDを検出し登録用のフォームを表示し、新しいレコードを出して登録ができるまでの書き方を教えてください。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nicotinism
- ベストアンサー率70% (1019/1452)
- mshr1962
- ベストアンサー率39% (7418/18948)
関連するQ&A
- ACCESS2007 DMaxについて
WinVistaでACCESS2007を使っております。 顧客との取引履歴のデータベースを少しずつ作っております。 現在のデータベース構成は簡単に書きますと、 「顧客T」 ・顧客ID ・顧客名 ・ ・ ・ ・最終取引日 「取引T」 ・取引ID ・顧客ID(顧客Tの顧客IDとリレーション) ・取引日 ・取引内容 という感じです。 顧客Tをソースに「顧客フォーム」を作り、そのフォーム内にサブフォームで 取引履歴として「取引履歴サブフォーム」。「取引日」「取引内容」のみ表示して 入力しております。 やりたいことは、フォームを開いた際に、サブフォーム内の取引日の中で 最新の日付をメインフォームの「最終取引日」フィールドに入力して、データ を更新していきたいです。 非連結のフィールドを作って表示だけすればいいのかもしれませんが、 現状データとして格納していきたいです。 VBAでメインのフォーム「開くとき」にDMaxで最大の日付を拾えばいいかと思い 試してみましたが、エラーが出てしまいます。 いろいろ試してみましたが、記述はこんな感じです。 Me.最終取引日=DMax("日付",Me.取引履歴サブフォーム) としてみました。 どなたかお力を貸してください。
- ベストアンサー
- その他MS Office製品
- 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・・・とデータ保持したいのです。 説明が判り辛くて恐縮ですが、ご教示お願いします。
- ベストアンサー
- その他MS Office製品
- AccessのDMax関数使用後のテキストの表示
Accessで項目の表示がうまくいきません。 もともとテキスト型の項目で、例えば「0005」というデータがあります。 それがフォーム(1)ではそのまま「0005」と表示されます。 それにマクロでDMax関数を使用して1足し込み、値の代入をし、フォーム(2)で表示すると、 「6」と表示されます。 「0006」と表示させたいのですが、どうすればいいでしょうか。 また、「6」ではなく「0006」でレコードの更新もしたいのですが、可能でしょうか。 (要は、その都度最新の番号を取得して、その番号でレコードの更新もしようとしているのですが。) おわかりの方、回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- DMAXの条件の設定方法
下図のように、各行のC列にそのID(A列)に該当する最大値を表示させたいのですが、どのように設定すればよいのでしょうか? Webで検索したところ、条件の箇所をC1:C2と設定しているものは見つかりましたが、この表は数百のIDがあるため、一つ一つ設定することが難しい状態にあります。 DMAX関数でやりたいことこれだとVALUE!が返ってきてしまいます。
- ベストアンサー
- その他MS Office製品
- 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ボタンを押すと、検索結果は元のフォームに出てくるみたいなことをしたいのですが、可能ですか??
- 締切済み
- オフィス系ソフト
お礼
回答ありがとうございます。 ?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") こちらですとコンパイルエラーになりました・・・ できればモジュールだけでどうにかしたいです(涙