• ベストアンサー

磁気カードの入力

ShadowMoonの回答

回答No.5

またまたご無沙汰してすいません。 テーブルA(テーブル名は、”ユーザーテーブル”としておきます。) ID(オートナンバー型) 磁気カード抽出情報(テキスト型) ユーザーID(テキスト型) ユーザー名(テキスト型) テーブルB(テーブル名は、”座席テーブル”としておきます。) ID(オートナンバー型) 座席ID(テキスト型) 座席番号(テキスト型) 保存テーブル(テーブル名は、”保存テーブル”としておきます。) ID(オートナンバー型) 日付(日付/時刻型) 磁気カード抽出情報(テキスト型) ユーザーID(テキスト型) ユーザー名(テキスト型) 受付時間(日付/時刻型) 終了時間(日付/時刻型) 座席ID(テキスト型) 座席番号(テキスト型) フォーム(入力用フォーム)があって、その中に下記テキストボックスがある。 入力用テキストボックス(レコードソースは空白、タブストップは”はい”) 磁気カード抽出情報(レコードソースは空白、タブストップは”いいえ”) ユーザーID(レコードソースは空白、タブストップは”いいえ”) ユーザー名(レコードソースは空白、タブストップは”いいえ”) 受付時間(レコードソースは空白、タブストップは”いいえ”) 終了時間(レコードソースは空白、タブストップは”いいえ”) 座席ID(レコードソースは空白、タブストップは”いいえ”) 座席番号(レコードソースは空白、タブストップは”いいえ”) 下記が入力用フォームのコード(サンプルコードです。) Private Sub 入力用テキストボックス_AfterUpdate() If IsNull(Me.磁気カード抽出情報) Then 磁気カードデータセット処理 ElseIf IsNull(Me.ユーザーID) Then バーコードデータセット処理 Else 保存処理 End If End Sub Public Sub 磁気カードデータセット処理() Dim rst As New ADODB.Recordset Dim txt磁気カード抽出情報 As Variant txt磁気カード抽出情報 = Mid(Me!入力用テキストボックス, 16, 7) Set rst = New ADODB.Recordset rst.Open "ユーザーテーブル", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic rst.Filter = "磁気カード抽出情報=" & "'" & txt磁気カード抽出情報 & "'" If rst.EOF Then MsgBox ("該当するユーザー情報はありません。") Me.入力用テキストボックス = "" Else Me.磁気カード抽出情報 = rst![磁気カード抽出情報] Me.ユーザーID = rst![ユーザーID] Me.ユーザー名 = rst![ユーザー名] Me.受付時間 = Now() Me.入力用テキストボックス = "" End If rst.Close Set rst = Nothing End Sub Public Sub バーコードデータセット処理() Dim rst As New ADODB.Recordset Set rst = New ADODB.Recordset rst.Open "select * from 座席テーブル where 座席ID='" & Me.入力用テキストボックス & "'", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic If rst.EOF Then MsgBox ("座席情報はありません。") Me.入力用テキストボックス = "" Else Me.座席ID = rst![座席ID] Me.座席番号 = rst![座席番号] Me.終了時間 = Now() Me.入力用テキストボックス = "" End If rst.Close Set rst = Nothing End Sub Public Sub 保存処理() If MsgBox("保存しますか?", vbYesNo) = vbYes Then Dim rst As New ADODB.Recordset Set rst = New ADODB.Recordset rst.Open "保存テーブル", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic rst.AddNew rst![日付] = Date rst![磁気カード抽出情報] = Me.磁気カード抽出情報 rst![ユーザーID] = Me.ユーザーID rst![ユーザー名] = Me.ユーザー名 rst![受付時間] = Me.受付時間 rst![終了時間] = Me.終了時間 rst![座席ID] = Me.座席ID rst![座席番号] = Me.座席番号 rst.Update rst.Close Set rst = Nothing End If End Sub 【解説】 1)今回テーブルに接続する方法としてADO(ActiveX Data Object)という方法で おこなっていますが、Access97とかでしたらDAO(Database Access Object) で行う方法もあります。(Access2000からはADOが標準みたいですので、 DAOはつかいませんでした。) 2)テーブルにアクセスして抽出する方法は、 テーブルを開いてフィルタを使う方法(上記磁気カードデータセット処理) SQLで抽出する方法(上記バーコードデータセット処理) があり、どちらでもかまいません。 3)実際は保存するときに既に同じ情報があるかチェックしたりする必要がありますが今回は割愛しました。 4)処理後 Me.入力用テキストボックス.SetFocus で、フォーカスを移すことを 考えていましたが、うまくいかなかったため、入力用テキストボックス以外のテキストボックスのタブストップを”いいえ”とすることで代替させてもらいました。 5) 今回は、入力用テキストボックスの更新後処理で動かしていますが、 別にボタンを追加して、そのボタンをクリックしたときに処理が動くようにしてもいいかもしれません。 6)フォームは、保存テーブルを元にウイザードで作成するほうが簡単です。 7)今回フォームは非連結としました。(一時テーブルは割愛させていただきました。) あと不明な点があれば、補足してください。 (新しく質問を起こしたほうが他の方の回答をすばやくもらえる可能性が高い ですね。) 当方 最近公私ともに忙しく回答が送れたことをお詫びいたします。m(__)m

Hugh
質問者

補足

どうもご丁寧な回答ありがとうございます。 サンプルを元に試してみましたが、保存処理のsub の下から7行目のrst![座席コード]= Me.座席コード をさしてコンパイルエラーになってしましました。 下記のコードは入力用テキストボックスの更新後処理でイベントをかけています。 尚、保存用テーブル=総合 ユーザーID=学生番号 ユーザー名=氏名 座席ID=座席コード 磁気カード抽出情報=磁気カード に変更しています。 何が原因かわからず困ってます。 何かお気づきの点があればご指摘願います Private Sub 入力用テキストボックス_AfterUpdate() If IsNull(Me.磁気カード) Then 磁気カードデータセット処理 Else 保存処理 End If End Sub Public Sub 磁気カードデータセット処理() Dim rst As New ADODB.Recordset Dim txt磁気カード As Variant txt磁気カード = Mid(Me!入力用テキストボックス, 16, 7) Set rst = New ADODB.Recordset rst.Open "gakuseitbl1", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic rst.Filter = "磁気カード=" & "'" & txt磁気カード & "'" If rst.EOF Then MsgBox ("該当するユーザー情報はありません。") Me.入力用テキストボックス = "" Else Me.磁気カード = rst![磁気カード] Me.学生番号 = rst![学生番号] Me.氏名 = rst![氏名] Me.受付時間 = Now() Me.入力用テキストボックス = "" End If rst.Close Set rst = Nothing End Sub Public Sub バーコードデータセット処理() Dim rst As New ADODB.Recordset Set rst = New ADODB.Recordset rst.Open "select * from 座席データ1 where 座席コード = '" & _ Me.入力テキストボックス & "'", CurrentProject.Connection, adOpenKeyset, adlockpotimistic If rst.EOF Then MsgBox ("座席情報がありません。") Me.入力用テキストボックス = "" Else Me.座席コード = rst![座席コード] Me.座席番号 = rst![座席番号] Me.終了時間 = Now() Me.入力用テキストボックス = "" End If rst.Close Set rst = Nothing End Sub Public Sub 保存処理() If MsgBox("保存しますか?", vbYesNo) = vbYes Then Dim rst As New ADODB.Recordset Set rst = New ADODB.Recordset rst.Open "総合", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic rst.AddNew rst![日付] = Date rst![磁気カード] = Me.磁気カード rst![学生番号] = Me.学生番号 rst![氏名] = Me.氏名 rst![受付時間] = Me.受付時間 rst![終了時間] = Me.終了時間 rst![座席コード] = Me.座席コード rst![座席番号] = Me.座席番号 rst.Update Set rst = Nothing End If End Sub

関連するQ&A

  • ACCESS、フォームの入力方法。

    仕事上、どうしてもACCESSを使わなくてはならなくなり、初めてACCESSに挑戦しています。 「フォーム」テキストボックスの簡単な入力方法を教えてください。 ExcelのCSVデータを、ACCESSに読み込みました。 「フォーム」を作成し、データを管理しています。 フォームのテキストボックスに、同じ記述を入れる項目があります。 データが1000以上あるので、かなりの手間になってます。 そこで、1度に(一括で?)その項目を入力できるような機能はないのか?と思い、質問しました。 この記述というのが、HTMLデータで改行が入っているため、Excelでは、入れることができませんでした。

  • 【ACCESS】入力規則(Len関数)の桁数の複数指定

    ACCESSフォームのあるテキストボックスに入力規則(Len関数)を11桁に設定しているのですが9桁もまれに登録の対象となるため9桁と11桁のみを入力規則としたいのですが、どのような式になりますか? なおデータ型はテキスト型、項目名は機種コードとします。

  • Access_「1」と入力→「0001」に変換

    Accessのフォーム上で4桁のコード扱うテキストボックスがあります。 このテキストボックスは必ず4桁で入力してもらいたいものです。 「1」と入力しEnterが押された時は「0001」となる様にしたいのですが どの様に設定すればよろしいでしょうか?

  • VBA の IF then 文につぃて

    access2000でテーブルに連結していないフォームがあり その中のテキストボックスにバーコードや磁気カードで読み込ませその桁数によって処理を分けようと思っていますが、どのようにコードを書けばよいのかおしえてください。 たとえば、 private sub() if 入力テキスボックス が 8桁 then 磁気カード処理 if 入力テキストボックスが 11桁 then バーコード処理 end if end sub public sub 磁気カード処理() public sub バーコード処理() のような形です。 どうかお願いします

  • ACCESS2000の帳票フォームでテキストボックスの入力値を取得したい

    こんにちは。ACCESS2000でツールを作成しています。 テーブルはExcelにリンクさせ、クエリを介して帳票フォームで データを表示しています。 帳票フォームのレコード毎にテキストボックスを追加して それぞれ入力できるようにし、その値をVBAで取得したいのですが どうすればよいでしょうか。 テキストボックスを追加して実行すると、一つのテキストボックスに 入力した値が全てのレコードに反映されているようです。 帳票フォームのしくみがよく分かりません。 どなたか教えていただけないでしょうか。 宜しくお願いします。

  • 非連結テキストボックスの数字入力について

    どうしても分からないので質問します 今、アクセス97にてフォームを作成しています 構成はメインフォーム + サブフォーム ×2です コードを入力するテキストボックスをメインフォームに作成したのですが実際入力してみると桁溢れの場合、 「実行時エラー’3163’:フィールドが小さすぎるため、追加しようとするデータの量を受け入れることができません。データの量を少なくして、挿入または貼り付けを行なってください。」とエラーメッセージが表示されてしまいます エラーを出ないようにするにはどうすればいいのでしょうか? 宜しくお願いします

  • エクセル VBA 日付入力?

    エクセル 2000のVBAにて簡単な 日程表を作成しています。 フォームの テキストボックス1に 10/8 を入力したら テキストボックス2には 10/15 ~ テキストボックス15には 1/21 が自動で 入力されるようにするには、どのようにすればよろしいでしょうか?

  • (株)を(株)に変換するマクロ

    ユーザーフォームのテキストボックスに「(株)OK商事」と入力すると、エクセルシートには「カOK商事」と表示したいと思っています。(株)の3文字を「カ」の1文字に置き換えることができません。Mid関数を使って、Mid(文字列, i, 3)で(株)を拾った時にflag=trueにして、変換後文字 = Mid(文字列, 1, i - 1) & "(株)" & Mid(文字列, i + 3, i)としてみたのですが、表示は(株カのようになってしまいます。何かいい方法はないでしょうか?便利な関数が他にあるのでしょうか。超初心者なので、できるだけ詳しく教えて頂けますか?よろしくお願い致します。

  • Excelでフォームを使って入力方法をおしえてほし

    データ量が有り今後もデータ増え また、限られた時間内に入力が必要な為、 フォームを使い入力をしたいと思っています。 Excelのクイックアクセスフォーム機能を使って 入力してみました1行ごとに入力フォームが消えるので 使い勝手が悪いです。 試合中の入力をしたいので 開いたフォームで連続入力を可能にする方法を教えてください。 よろしくお願いします。 ※因みにVBAフォームのテキストボックスを使わないと 出来ないのなら参考になる方法も教えてもらいたいです。

  • ACCESS フォームで入力データを残したいです。

    いつもお世話になっております。 今回はACCESSについてご指導お願い致します。 テーブルからフォームを作成したのですが、テキストボックスで1件目の入力データの内容を2件目入力するときに、そのまま残しておきたいのです。 テキストボックスには日付や品番など入力していくのですが、同じ場合は入力を省きたいと思っています。難しいでしょうか・・? 最近ACCESSの勉強をはじめたところなので、用語などもほとんどわかりません。 宜しくお願い致します。