• 締切済み

accessのVBで処理を作成したい(インプットボックスからの検索)

こんにちは、 「出荷テーブル」 ID [オートナンバー] 伝票番号 [テキスト型] 商品   [テキスト型] 製造番号 [テキスト型] フォームに[txt製造番号]に入力した後に、テーブルから、入力した値と同じものを検索して、 あった場合→「出荷テーブル」にレコードを追加(検索したものと同じ内容で、伝票番号だけ「伝票番号+D」にする) なかった場合→メッセージ(在庫がありません)と出して、処理を中止。 いろいろ過去ログを探してみたのですが、どれを参考にすればいいのかわかりません。どなたか教えて下さい。お願いします。

みんなの回答

noname#22222
noname#22222
回答No.4

s_husky です。 ちょい、心配になって戻ってきました。 基本的なフローは判った訳ですから、次は、細部を完成する段階です。 この場合、OKWaveを上手に利用することが肝心です。 質問1、在庫確認コードは、どちらが宜しいでしか? isFound=CBool(DCount("*","在庫テーブル","製造番号='" & 製造番号 &"'") > 0) isFound=CBool(DLookup("製造番号","在庫テーブル","製造番号='" & 製造番号 &"'") <> "") 同じ結果のようですが、皆様は、どちらを主にお使いですか? 質問2、Insert文を実行する CnnExecute関数を Access版に改造したのですが.... 次は、SQLServer+Access.adp で使ってきた SQL文を実行する関数です。 Access版に改造して DbsExecute関数として利用するつもりです。 改変を試みたのですが、途中でエラーが出ます。 不具合箇所を教えて下さい。 Public Function CnnExecute(ByVal strSQL As String) As Boolean On Error GoTo Err_CnnExecute    Dim isOK As Boolean    Dim cnn As ADODB.Connection       isOK = True    Set cnn = CurrentProject.Connection    With cnn      .Errors.Clear      .BeginTrans      .Execute strSQL      .CommitTrans    End With Exit_CnnExecute: On Error Resume Next    cnn.Close    Set cnn = Nothing    CnnExecute = isOK    Exit Function Err_CnnExecute:    isOK = False    If cnn.Errors.Count > 0 Then      ErrMessage cnn.Errors(0), strSQL      cnn.RollbackTrans    Else      MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _         vbExclamation, " 関数エラーメッセージ"    End If    Resume Exit_CnnExecute End Function 質問3、Insert文を次のように作成しましたが、エラーが出ます。 XXXXXXXXXXXXXXX ※まあ、このように、小分けして質問して、答をつなぎ合わせるのが手っ取り早いということです。

noname#22222
noname#22222
回答No.3

s_husky です。 strSQLText = "INSERT・・・" DBSExecute(strSQLText) の部分を完成すれば動きます。 DBSExecute(strSQLText)の部分は、 dbs を宣言し、セットし、Executeメソッドを使うように書いても構いません。ヘルプ文で、簡単にサンプルコードを参照できます。 DBCount("*","在庫テーブル","製造番号='" & 製造番号 &"'") と少し、コードを最適化する部分があります。 なお、コードを機械的に真似ても一切動作しませんので、あくまでもフローのみを参考にして下さい。具体的にコードか書かれて、躓かれた点については幾らでも答える用意があります。 ※繰り返しますが、フローのみを参照して下さい。

noname#22222
noname#22222
回答No.2

isFound = CBool(DBCount("製造番号","在庫テーブル","製造番号='" & 製造番号 &"'") > 0) *バグです。訂正しておきます。

noname#22222
noname#22222
回答No.1

・InputBoxを利用して[製造番号]を入力させるのか、TextBox[製造番号]の更新後処理なのかを惑わせる質問です。 ・検索方法についても、DLookup関数を使用するのか、それとも、ADODBで高速化を図りたいのか不明です。 ・出荷テーブルへの追加は、INSERT文を使用する予定でしょうか? ・[伝票番号]とは、[発注テーブル]のそれでしょうか? この辺りが不明だと、全コードを示せということになります。 その場合、それぞれに作法というのがあり、質問者にマッチした回答になる保証がありません。 ですから、次のようなフローにて多少自前のコードを書いて、どこでどう躓いているのかを明らかにされたらどうでしょうか? Dim isOK     As Boolean Dim isFound   As Boolean Dim 製造番号  As String Dim strSQLText As String If Len(Me.製造番号 & "") > 0 Then   製造番号=UCase(Me.製造番号)   isFound = CBool(DBCount("製造番号","出荷テーブル","製造番号='" & 製造番号 &"'") > 0)   If isFound Then     strSQLText = "INSERT INTO 出荷テーブル ・・・・"     isOK = DBSExecute(strSQLText)     If isOK Then        Message "[出荷テーブル] に追加しました。"     Else        ErrMsg ""[出荷テーブル]への追加でエラーが発生しました。(XXXXX)"     End If   Else     Message "該当する[製造番号]の在庫はありません。"   End If End If DBSExecute: dbs.Execute を使用します。 Message、ErrMsg: MsgBox に置き換えます。 ※全体のフローとコードも似たり寄ったりと思います。 ※コードも2、30行と大変短いものです。 ※まず、自分なりのコードを書くことが先決ではないでしょうか? ※その上で、不明点を一つひとつ質問した方が解決が早いと思いますが。

makoc_chan
質問者

補足

回答ありがとうございます。説明が少なくてすいません。現在クエリで処理をしているのですが、検索されなかった時の処理をしたくて、VBAに初挑戦してたところで、参考になるコードを探していました。 ・TextBox[txt製造番号]の更新後処理です。 ・検索方法ですが、DLookup関数・ADODBをどちらを使うのかまだよく理解していません。 ・出荷テーブルへの追加は、INSERT文で追加しようと思ってます。 ・[伝票番号]は、[出荷テーブル]の中にあります(製造番号と同じところ)

関連するQ&A

  • Accessのフォームにて顧客番号を検索して無ければ新規作成したい

    Access2003のフォームで社員管理システムを作ろうとしていますが、VBAの記述でわからないことがあるので、教えてください。 まず、テキストボックス「txt_検索」に社員番号を入力し「cmd_検索」ボタンを押すと、社員管理テーブルの社員番号フィールドより検索をします。 社員管理テーブルに該当するレコードがある場合は、レコードの編集となり、社員番号がない場合はテキストボックス「txt_社員番号」に「txt_検索」の値を入れた新規レコードの作成としたいのです。 入力した値でレコードの検索をして、無いなら新規作成といったコードは どのような記述になるのか教えてください。 よろしくお願いいたします。

  • アクセス:数値型のデータを検索する方法

    Dlookupをつかって検索する方法です。 以下のようなテーブルがあります <仕入れ伝票> 商品番号:数値型 種類;テキスト型 商品番号.種類 1,リンゴ 2,バナナ 3,なし <在庫表> 種類:テキスト型 番号:数値型 番号,種類 1 2 3 在庫表の商品名を示すために、次のようなクエリを書きましたがエラーになります。想像するにcriteriaの書き方が間違っており、探している値(数値)を見つけられていないのだと思います。 UPDATE 在庫表 SET 在庫表.種類 = (DLookUp("種類","仕入れ伝票","初品番号='" & [番号] & "'")); どのように直したらいいのか教えてください。

  • Access2010でテーブルの内容で検索

    現在Accessの勉強をしています。 Aテーブル、Bテーブルとあり、 AテーブルはID(オートナンバー)、番号(数字)、名前(文字列)が入っています。 この番号は重複ありで、複数レコードあるとします。 Bテーブルも同じようなID、番号、名前が入っていて、ここの番号は重複していません。 いわばマスタテーブルのようなものです。 (IDと番号を別ける必要があるのかなど、細かいことはこの際気にしないでください。) Aテーブルの全てのレコードの番号を検索し、Bテーブルにない情報だけを表示したいと思います。 この場合どのようにすればよいでしょうか? まだAccessを勉強したてで、よくわかっていないのですが、シンプルな方法はどのようにすれば良いのか思案中です。 よろしくお願いします。

  • Accessでの検索

    宜しくお願いします。 Accessで検索フォームを作成しようと思っています。 フォームから入力した番号を検索して 結果をテキストボックスに表示するといった感じです。 質問の内容は複数のテーブルがある場合、 どのようにすればいいのか?です。 色々調べてみたのですが、わかりません・・・。 ご存知の方がおりましたら教えて下さい。 宜しくお願いします。

  • accessのコンボボックスについて

    質問があります。下記のようなテーブルがあります。 ▼商品情報テーブル  ・商品ID (番号はオート。キー)  ・商品番号(自社で設定している商品ごとの番号)  ・商品名 これを「受注伝票」フォームに使用します。 商品番号をコンボボックスで指定すると 商品名が別のテキストボックスに自動で表示。 もし登録されていない商品の場合には 商品番号と商品名をその場で登録して商品情報テーブルに反映させたい。 コンボボックスで選択する際はID順ではなく、 商品番号の昇順で並び替えたいと思います。 商品番号は数値ではなくテキストになっています。 弊社では「i0001、i0002...」のように、商品番号の頭に「i」が付くからです。 ACCESSのバージョンは2002です。 どうぞよろしくお願いいたします。

  • アクセスで値を参照したい

    Win2000,Access2000を使用しています。 AB二つのテーブルに「仮番号」というフィールドがあり、同じ「仮番号」のレコードに同じ「伝票番号」をつけたいんです。 Aテーブル(お客様情報) Bテーブル(注文履歴) Aテーブルの「伝票番号」フィールドに番号を入力したら、BテーブルのAと同じ「仮番号」のレコードの「伝票番号」フィールドに番号が入力されるようにしたいのですが、どのようにVBまたは、フォーム上のテキストボックスのプロパティで組んだらよいのかわかりません。 Bテーブルには、過去の注文データもあるのですでに入力されているレコードには過去に受注した時の伝票番号入力されています。 新規入力したレコードに対してだけAと同じ伝票番号をつけたいのです。 Bテーブルで、         |商品名|価格  |伝票番号| 過去の受注データ|電卓 |¥500|1000  | 今回の受注データ|名刺 |¥800|2500  | と、こんな感じにしたいんですが うまく説明できず申し訳ありませんが、どうぞよろしくお願い致します。

  • ACCESS内の検索

    お世話になります。できるのどうかわからないのですが宜しくお願いします。 ACCESSを利用し在庫管理などを行っているのですがその際、例えばクエリ名「A」というクエリをレコードソースとしフォームを作るとします。さらに同じクエリをレコードソースとしレポートを作ります。こういったように同じクエリやテーブルを使用する場合、システムの規模が大きくなるとクエリやテーブルがどこでどのように使用しているか把握しきれなく、また時がたつにつれ忘れていってしまいます。そこで、クエリやテーブルがどこで(クエリ、フォーム、レポート、マクロ、モジュールなど)使用されているか検索できるようにするにはどうしたらよいでしょうか? 宜しくお願いします。

  • ACCESS VBA で複数項目検索にテキストボックスとコンボボックス

    ACCESS VBA で複数項目検索にテキストボックスとコンボボックスを使用したい txtPC番号というテキストボックス、 com所属部門というコンボボックス、 txt使用者というテキストボックスの どれかひとつの条件が入力されたときに 該当するフォームのレコードを抽出できるようにしたいのですが、 コンボボックスで選択した場合のみうまく抽出できません。 コードのどの部分に誤りがあるのでしょうか? ご指摘願えませんでしょうか? よろしくお願いいたします。 Private Sub cmd01_Click() Me.FilterOn = False If Me!txtPC番号 <> "" Then Me.Filter = "[PC番号]like '*" & Me!txtPC番号 & "*'" ElseIf Me!com所属部門 <> "" Then DoCmd.Requery "com所属部門" ElseIf Me!txt使用者 <> "" Then Me.Filter = "[使用者]like '*" & Me!txt使用者 & "*'" End If Me.FilterOn = True End Sub

  • access クエリ 検索フォームの作り方

    よろしくお願いします。 やりたいこと: フォーム上で、テキストボックスに入力した値を検索して表示したい。 本やウェブで調べて、なんとか一度はやっと出来たのですが、 誤って何かを変更してしまい、使えなくなってしまいました。 今となってはどの資料を見て作れたのかわからなくなりました。 やったこと: クエリ :クエリA   条件にforms!フォームA!txt0を入力 フォーム:フォームA ヘッダーに非連結のテキストボックスtxt0を作成 txt0の更新後処理:docmd.requeryを入力 しかし、txt0に入力しても検索されません。 フォームのプロパティのレコードソース欄にクエリAを選択するようですが、 選択するクエリ名が表示されないので、クエリ名を入力しましたがダメでした。 どこか間違っているのでしょうか。VBAまでは勉強できないので上記範囲内でお願いします!

  • ACCESS2000 コンボボックス

    こんにちわ。 コンボボックスを教えて下さい。 テーブル T_分類(1) ・分類(1)  オートNo ・分類(1)名 テキスト テーブル T_分類(2) ・分類(2)  オートNo ・分類(1)  数値 ・分類(2)名 テキスト 2つのテーブルを作成して、フォームも作成しております。 入力する時、分類(1)も(2)テキストボックスで選ぶようにしています。 それで、分類(1)を選ぶと、分類(2)のテキストボックスに分類(1)の分しか表示しないようにしたいのですが・・。 どのようにすればよいでしょうか? 初心者な者で、分かりやすく教えていただければ有りがたいです。

専門家に質問してみよう