いつもお世話になります
Accessで倉庫管理を作製しております。
ItemNameを選択されたら、ItemIDとItemGruopとUnitを一緒に表示させたいです。
以下のコードをつくりましたが型が違いとういエラーになります。
Me![ItemID] = DLookup("[ItemID]", "Inventory", "ItemName='" & ItemName & "'" And Unit" & [Unit] & And ItemGroup='" & Me![ItemGroup] & "'")
ItemIDとUnit:数値型
ItemName と ItemGroup:テキスト型
正しいコードを教えていただきたいです。
よろしくお願いします。
No.7ベストアンサー
- 回答日時:
製品を登録するマスターテーブルと、入出庫を記録するテーブルは
一般的には分けて保持します。もちろん製品マスターテーブルに
入庫数、出庫数、初期値などを記録しておくこともありますが、
別に入出庫テーブルを作成する案はどうでしょう。
(1)
たとえば、入出庫テーブルの名前を「T入出庫」とし、
フィールドを
日付
ItemID
入庫数
出庫数
とします。
(2)
(1)のテーブルとInvetoryで以下のクエリを作成し、
名前を「Q入出庫」とします。
SELECT T入出庫.日付, T入出庫.ItemID, Inventory.ItemName, Inventory.Unit, Inventory.Group, T入出庫.入庫数, T入出庫.出庫数
FROM T入出庫 INNER JOIN Inventory ON T入出庫.ItemID = Inventory.ItemID;
(3)
次に、(2)のクエリを基にフォームの新規作成で
表形式を選択し、名前を「F入出庫管理」とします。
(4)
フォームをデザインビューで開き、ItemIDのコントロールを
コンボボックスに変更します。そのコンボボックスの
値集合ソースに以下を設定します。
SELECT Inventory.ItemID, Inventory.ItemName, Inventory.Unit, Inventory.Group
FROM Inventory;
プロパティを以下に設定します。
列数 4
列幅 2cm;2cm;2cm;2cm
リスト幅 7cm
その他は既定
(5)
フォームのItemName、Unit、Groupの各テキストボックスの
「編集ロック」を「はい」にします。
(6)
以下をフォームのコード表に貼り付け保存してください。
Private Sub ItemID_Enter()
If IsNull(Me!日付) Then
MsgBox "日付を先に入力してください"
Me!日付.SetFocus
Exit Sub
End If
End Sub
Private Sub 出庫数_Enter()
If IsNull(Me!日付) Then
MsgBox "日付を先に入力してください"
Me!日付.SetFocus
Exit Sub
End If
If IsNull(Me!ItemName) Then
MsgBox "製品を選択してください"
Exit Sub
End If
End Sub
Private Sub 入庫数_Enter()
If IsNull(Me!日付) Then
MsgBox "日付を先に入力してください"
Me!日付.SetFocus
Exit Sub
End If
If IsNull(Me!ItemName) Then
MsgBox "製品を選択してください"
Exit Sub
End If
End Sub
マスターテーブルが誤って書き変えられないように
(5)での処置を行なっています。
これで一度確認してみてください。
No.6
- 回答日時:
だいたいの様子はわかりましたが、
そもそもフォームのレコードソースが
Inventoryであるならば、質問の操作を
するとテーブルのデータを書き変えることに
なりますが、このフォームの目的は
どのようなものでしょうか。製品登録、
検索、入出庫登録などがありますが。
>ここでItemNameはリストボックスで選択された小道具はItemID
>とItemGroupも一緒に表示するようになってほしいです。
また、上記のリストボックスはコンボボックスですよね。
この回答への補足
Iventory というテーブルは製品名を入力するマスターテーブルです。
フォームは入出庫管理フォームです。製品名を入力するとIDとグループも表示されたら、入力するのに楽のではないかと思います。
>>ここでItemNameはリストボックスで選択された小道具はItemID
>>とItemGroupも一緒に表示するようになってほしいです。
>また、上記のリストボックスはコンボボックスですよね。
リストボックスと思ったらコンボボックスです。本当に、素人です
No.5
- 回答日時:
>倉庫管理フォームの中にこんな感じです
>ItemID ItemName ItemGroup Unit UserID UserName
この中でコンボボックスはどれですか。また、コンボボックスの
値集合ソース
コントロールソース
値集合タイプ
値集合ソース
列数
列幅
連結列
はどのようになっていますか。
また、フォームは単票形式、あるいは表形式のどれですか。
この回答への補足
>倉庫管理フォームの中にこんな感じです
>ItemID ItemName ItemGroup Unit UserID UserName
ItemName はコンボボックスです。
この中でコンボボックスはどれですか。また、コンボボックスの
値集合ソース: SELECT Inventory.ItemName FROM Inventory;
コントロールソース: ItemName
値集合タイプ: テーブル/クエリ
列数:1
列幅
連結列 1
フォームは帳票です
よろしくお願いします。
No.4
- 回答日時:
No1です。
コンボボックスから値が取れず、テキストボックスから値が取れた、というのは明らかにコントロールの使い方を理解してないからですね。
このままズルズルいってしまうような気がするので、一度以下のサイトなどを参考にして簡単なところから覚えていってください。
http://www.accessclub.jp/
AccessはVBと同じである程度覚えるとかなり楽な開発環境ですので、分からないことをまとめてやろうとするのではなく、コントロール1つ(例えばコンボボックスやリストボックス)を「リストボックス 値 代入」みたいなワードでGoogle等で検索してみてください。その答えはかならず見つかります。
仰った通りです。基本の基本も勉強せずに、やっていますので混乱していします。
サイトを参考にして、少しずつ覚えるようにします。
ありがとうございました。
No.3
- 回答日時:
No1です。
エラーが出なくなった、ということは式そのものにエラーがないということと同時に
その条件ではNULL(データなし)で返ってくるということになります。
ということはつまり、
ItemID(数値型)
ItemName(テキスト型)
ItemGroup(テキスト型)
Unit(数値型)
UserID(数値型?)
UserName(テキスト型)
この組み合わせ条件に誤りがあると予想されます。
データはInventoryテーブルに入ってるということなら
一度これらの値を決め打ちしてデータが取得できるかやってみてはどうでしょう?
例えば、
Inventoryテーブルに以下のデータを登録
ItemID 999
ItemName 試供品
ItemGroup 試作
Unit 1
UserID 999(必要なら)
UserName テスター(必要なら)
このデータを先ほどの式に当てはめると
Me![ItemID] = Nz(DLookup("[ItemID]", "Inventory", "ItemName='試供品' And Unit=999 And ItemGroup='試作'"),"")
こうなります。
これがうまくいったら
Nz(DLookup("[ItemID]", "Inventory", "ItemName='" & ItemName & "' And Unit=999 And ItemGroup='試作'"),"")
というように1つずつ決め打ち部分を変数に修正していきましょう。
これでMe![ItemID]が取得出来ない場合、テーブルのデータ型が違うとかどこかにスペースが入ってるとか、
そういう状況が考えられるのでいろいろ試してみてください。
ありがとうございます。
いろいろ試しましたら、ItemNameはテキストボックスならいけました。
私の場合はコンボボックスですのでダメでした。
本当にお手数ですが、この問題はどう処理すればよいでしょうか?
よろしくお願いします
No.2
- 回答日時:
No1です。
Null辺りのエラーということは文そのものはいけたということで話を進めると、
どこか(多分戻り値のMe![ItemID]がNULL)にNULL値が入っているんじゃないでしょうか。
NZ関数とかIsNull関数辺りでカバーすればいけそうです。
Nz関数でやるとこんな感じです。
Me![ItemID] = Nz(DLookup("[ItemID]", "Inventory", "ItemName='" & ItemName & "' And Unit=" & [Unit] & " And ItemGroup='" & Me![ItemGroup] & "'"),"")
テキスト型にNULL値は入れられないので、戻り値以外にも取得前のItemNameとItemGroupに対しても
同様の処理をする必要があるかもしれません
エラーが出た場合は「エラー内容 使用しているアプリケーション」でGoogleなどで検索をかければ大抵の場合
解決策があるので、参考までに留めておいてください。
この回答への補足
ありがとうございます。
今回はエラーはでなくなりしたが、コードを聞かないそうです。
製品名を選択しましたが製品IDもグループ名もでないです。
テーブルから直接取り出すことが出来ないでしょうか?
恐縮ですが、どうぞよろしくお願いします。
No.1
- 回答日時:
手元にAccessがないのでぱっと見た感じですが
"ItemName='" & ItemName & "'" And Unit" & [Unit] & And ItemGroup='" & Me![ItemGroup] & "'"
ここの部分、もしかすると↓こうじゃないですか?
"ItemName='" & ItemName & "' And Unit=" & [Unit] & " And ItemGroup='" & Me![ItemGroup] & "'"
一文にすると
ItemName='ItemName' And Unit=[Unit] And ItemGroup='Me![ItemGroup]'
こうしたいということですよね?
文字と変数の区別が多少こんがらがってる気がします。
早速ご対応ありがとうございます。
教えていただいたコードを使ってみたら、Nullの使い方が不正ですというエラーが出ます。
Me.ItemID = DLookup(ItemID, "Inventory", "ItemName='" & ItemName & "' And Unit=" & [Unit] & " And ItemGroup='" & Me![ItemGroup] & "'")
このエラーの解除はどうすればよいでしょうか?
倉庫管理フォームの中にこんな感じです
ItemID ItemName ItemGroup Unit UserID UserName
ここでItemNameはリストボックスで選択された小道具はItemIDとItemGroupも一緒に表示するようになってほしいです。
フォームのソースはInventoryテーブルから取り出します。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- 英語 ”Toyota unit Hino” のunitの使い方を教えてください 2 2022/08/26 13:36
- Access(アクセス) Access DLookup vbaで条件を2件設定したい場合どうすればよいでですか? 現在 If( 1 2023/06/28 14:28
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2022/04/01 12:11
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- Visual Basic(VBA) VBAのifで 4 2023/05/16 14:21
- Visual Basic(VBA) 1つの入力フォルダの値を読み込み、3分割をして新しい変数に代入する方法を教えていただきたいです。 読 4 2022/10/17 20:52
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
VBA 別シートの同じ日付の欄に...
-
Accessの日付時刻型から日付、...
-
Access クエリで、レコードの無...
-
アクセス:既定値に土日含まず...
-
Accessのデータ型の日付/時刻型...
-
指定日付を起点にして最新日付...
-
Accessで日付の比較がうまくい...
-
クロス集計のユニオンクエリー...
-
SQL SEREVER で選択した固定値...
-
BCPでCSV内の文字列をテーブル...
-
アクセス97のVBAで日付項目をヌ...
-
日付/時刻型フィールドで時刻デ...
-
【ピボットテーブル】4月から翌...
-
Access クエリのグループ化で合計
-
access 横型カレンダーを使用し...
-
アクセス 更新クエリ 時間の追加
-
ACCESSのデータ型変更について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
Accessの日付時刻型から日付、...
-
アクセスで月単位の抽出
-
VBA 別シートの同じ日付の欄に...
-
Accessのデータ型の日付/時刻型...
-
Excel→Accessへの日付データの...
-
アクセス:既定値に土日含まず...
-
BCPでCSV内の文字列をテーブル...
-
エクセル-過去6カ月分の合計を...
-
Access クエリで、レコードの無...
-
指定日付を起点にして最新日付...
-
【エクセル】指定した日付に一...
-
【Accessで困っています...
-
Accessで日付の比較がうまくい...
-
【vba】日付の形式が勝手に変わ...
-
前のレコードの合計に現レコー...
-
ACCESSの空白をカウントする
-
アクセス97のVBAで日付項目をヌ...
おすすめ情報