プロが教えるわが家の防犯対策術!

いつもお世話になります

Accessで倉庫管理を作製しております。
ItemNameを選択されたら、ItemIDとItemGruopとUnitを一緒に表示させたいです。
以下のコードをつくりましたが型が違いとういエラーになります。
Me![ItemID] = DLookup("[ItemID]", "Inventory", "ItemName='" & ItemName & "'" And Unit" & [Unit] & And ItemGroup='" & Me![ItemGroup] & "'")
ItemIDとUnit:数値型
ItemName と ItemGroup:テキスト型

正しいコードを教えていただきたいです。
よろしくお願いします。

A 回答 (8件)

製品を登録するマスターテーブルと、入出庫を記録するテーブルは


一般的には分けて保持します。もちろん製品マスターテーブルに
入庫数、出庫数、初期値などを記録しておくこともありますが、
別に入出庫テーブルを作成する案はどうでしょう。


(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)での処置を行なっています。
これで一度確認してみてください。
    • good
    • 0

No7の中で、


GroupがもしItemGroupということならば、
(2)、(4)のクエリでGrouoとなっているところを
ItemGroupとしてください。
以上以外に表記の違いは変更してください。

確認ですが、
GroupはItemの分類ですか?
    • good
    • 0
この回答へのお礼

グループは製品の分類です。
丁寧なご回答、ありがとうございます。
やってみました。うまく行けました。
本当に助かりました。ありがとうございました。

お礼日時:2011/09/05 16:18

だいたいの様子はわかりましたが、


そもそもフォームのレコードソースが
Inventoryであるならば、質問の操作を
するとテーブルのデータを書き変えることに
なりますが、このフォームの目的は
どのようなものでしょうか。製品登録、
検索、入出庫登録などがありますが。

>ここでItemNameはリストボックスで選択された小道具はItemID
>とItemGroupも一緒に表示するようになってほしいです。

また、上記のリストボックスはコンボボックスですよね。

この回答への補足

Iventory というテーブルは製品名を入力するマスターテーブルです。
フォームは入出庫管理フォームです。製品名を入力するとIDとグループも表示されたら、入力するのに楽のではないかと思います。

>>ここでItemNameはリストボックスで選択された小道具はItemID
>>とItemGroupも一緒に表示するようになってほしいです。

>また、上記のリストボックスはコンボボックスですよね。

リストボックスと思ったらコンボボックスです。本当に、素人です

補足日時:2011/09/02 12:46
    • good
    • 0

>倉庫管理フォームの中にこんな感じです


>ItemID ItemName ItemGroup  Unit UserID UserName

この中でコンボボックスはどれですか。また、コンボボックスの

値集合ソース
コントロールソース
値集合タイプ
値集合ソース
列数
列幅
連結列

はどのようになっていますか。

また、フォームは単票形式、あるいは表形式のどれですか。

この回答への補足

>倉庫管理フォームの中にこんな感じです
>ItemID ItemName ItemGroup  Unit UserID UserName
ItemName はコンボボックスです。

この中でコンボボックスはどれですか。また、コンボボックスの

値集合ソース: SELECT Inventory.ItemName FROM Inventory;
コントロールソース: ItemName
値集合タイプ: テーブル/クエリ
列数:1
列幅
連結列 1
フォームは帳票です

よろしくお願いします。

補足日時:2011/09/02 09:41
    • good
    • 0

No1です。



コンボボックスから値が取れず、テキストボックスから値が取れた、というのは明らかにコントロールの使い方を理解してないからですね。
このままズルズルいってしまうような気がするので、一度以下のサイトなどを参考にして簡単なところから覚えていってください。

http://www.accessclub.jp/

AccessはVBと同じである程度覚えるとかなり楽な開発環境ですので、分からないことをまとめてやろうとするのではなく、コントロール1つ(例えばコンボボックスやリストボックス)を「リストボックス 値 代入」みたいなワードでGoogle等で検索してみてください。その答えはかならず見つかります。
    • good
    • 0
この回答へのお礼

仰った通りです。基本の基本も勉強せずに、やっていますので混乱していします。
サイトを参考にして、少しずつ覚えるようにします。
ありがとうございました。

お礼日時:2011/09/02 09:24

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]が取得出来ない場合、テーブルのデータ型が違うとかどこかにスペースが入ってるとか、
そういう状況が考えられるのでいろいろ試してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
いろいろ試しましたら、ItemNameはテキストボックスならいけました。
私の場合はコンボボックスですのでダメでした。

本当にお手数ですが、この問題はどう処理すればよいでしょうか?

よろしくお願いします

お礼日時:2011/09/01 18:01

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もグループ名もでないです。
テーブルから直接取り出すことが出来ないでしょうか?

恐縮ですが、どうぞよろしくお願いします。

補足日時:2011/09/01 13:27
    • good
    • 0

手元に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]'

こうしたいということですよね?
文字と変数の区別が多少こんがらがってる気がします。
    • good
    • 0
この回答へのお礼

早速ご対応ありがとうございます。
教えていただいたコードを使ってみたら、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テーブルから取り出します。

よろしくお願いします。

お礼日時:2011/09/01 11:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!