
No.7ベストアンサー
- 回答日時:
こんにちは。
>座席(バーコード)は読み込ませると
>sql文のところで構文エラーとなってしまいました。
rst.Open "select * from 座席 where 座席コード ='" & Me.入力用テキストボックス & "'", _
のところでしょうか?
以下をご確認ください。
”座席”テーブルの”座席コードフィールド”の型は、テキスト型ですか?
テキスト型でない場合(数値型)の場合には、
フィールドをテキスト型に変更するか、フィールドの型を変更できない場合には、
上のコードを次のように変える必要があります。
rst.Open "select * from 座席 where 座席コード =" & Me.入力用テキストボックス, _
以上ご参考になれば幸いです。m(__)m
No.6
- 回答日時:
こんにちは。
>サンプルを元に試してみましたが、保存処理のsub
>の下から7行目のrst![座席コード]= Me.座席コード
>をさしてコンパイルエラーになってしましました。
念のため下から7行目の rst![座席コード]= Me.座席コード を
コメントブロック化してコンパイルエラーとなるかご確認ください。
コメントブロック化するには、
先頭に'(半角クォーテイションマーク)を入力
または、書式ツールバーのコメントブロックボタンをクリックするとできます。
コメントブロック化して他に問題無いときは、コメントブロック化を解除して
再度コンパイルしてみてください。
コメントブロック化を解除するには、
先頭の'を削除するか、または
書式ツールバーのコメントブロック解除ボタンをクリックするとできます。
コンパイルするには
【デバッグ】メニュー~”***のコンパイル”です。
エラー要因として考えられることを揚げておきます。
テーブル”総合”には、フィールド”座席コード”が入っていますか?
または”座席コード”が”座席コ-ド”(ーのつもりが-)とかになっていた
なんてことはありませんか?
以上ご参考になれば幸いです。m(__)m
この回答への補足
shadowMoonさん
いつもありがとうございます。
下記のようにコードを書き換えてみましたが、
うまくいきません。
磁気カードはうまくデータを取り出せるのですが、
座席(バーコード)は読み込ませると
sql文のところで構文エラーとなってしまいました。
バーコードは別のテキストボックスに読みこませたほうがいいのでしょうか?
もうお手上げです。
何かアドバイスをお願いします。
Private Sub 入力用テキストボックス_AfterUpdate()
If IsNull(Me.学生番号) Then
磁気カードデータセット処理
ElseIf 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
入力用テキストボックス.SetFocus
End Sub
Public Sub バーコードデータセット処理()
Dim rst As New ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open "select * from 座席 where 座席コード ='" & Me.入力用テキストボックス & "'", _
CurrentProject.Connection, adOpenKeyset, adLockOptimistic
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
rst.Close
Set rst = Nothing
End If
End Sub
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
この回答への補足
どうもご丁寧な回答ありがとうございます。
サンプルを元に試してみましたが、保存処理の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
No.4
- 回答日時:
ご無沙汰してすみませんでした。
m(__)m下記補足願います。
テーブルAのフィールドは、どういう構成になっていますか?
テーブルBのフィールドは、どういう構成になっていますか?
保存用テーブルのフィールドは、どういう構成になっていますか?
例えばテーブルAは、
フィールド名
ID(オートナンバー型)
磁気カードコード(テキスト型)
磁気カード内容(テキスト型)
とかしているんでしょうか?
また、これと最初のご質問の
カードのデータの16桁目から7文字のみのみをテキストボックス(2)に表示入力する方法
とのつながりはどうなっているんでしょうか?
ひょっとすると、テーブルAの構成は
ID(オートナンバー型)
磁気カード抽出コード(テキスト型)(カードのデータの16桁目から7文字に該当するデータ)
磁気カード内容(テキスト型)
というようにしてあり、
テキストボックス1で入力したデータの16桁目から7文字に一致する磁気カード抽出コードをテーブルAから探し出して、それに該当する磁気カード内容を
テキストボックス2に表示したい
というような内容でしょうか?
テーブルの構成によっては、処理が異なりますので補足のほどよろしく御願いします。m(__)m
この回答への補足
お返事ありがとうございます。私のつたない説明でご理解いただき大変恐縮しております。
テーブルAは、
フィールド名
ID(オートナンバー型)
磁気カードコード(テキスト型)
磁気カード内容(テキスト型) -- ユーザーID
そのとおりです。
ひょっとすると、テーブルAの構成は
ID(オートナンバー型)
磁気カード抽出コード(テキスト型)(カードのデータの16桁目から7文字に該当するデータ)
磁気カード内容(テキスト型)
というようにしてあり、
テキストボックス1で入力したデータの16桁目から7文字に一致する磁気カード抽出コードをテーブルAから探し出して、それに該当する磁気カード内容を
テキストボックス2に表示したい
まさにそのとおりです。
テーブルBの構成は受付のための座席データのテーブルで
フィールド名は
ID(オートナンバー)
座席ID(テキスト型)--バーコードの読み込む情報
座席番号(テキスト型)--座席番号(例 A-1)
座席IDで読み込ませた情報を座席番号をテーブルBから探し出しテキストボックス3に表示すると言った内容です
保存テーブルは
ID(オートナンバー)
日付
磁気カード抽出情報
ユーザーID
ユーザー名
受付時間
終了時間
座席ID
座席番号
です。私は初心者なのでどのような構成にしたらよいかわからず、なんとなくこんな感じで構成しました。
何かよいアイデアがあればアドバイスお願い致します。
No.3
- 回答日時:
補足を見てあれあれ???自分の思い描いていたものと違っており、今一テーブルA,Bとメインテーブルの関係が分かりにくく思いました。
(自分の理解不足ですね。すみません。)以下のような解釈でよろしいでしょうか?
【テーブル、フォームの概略仕様】
テーブルには一時作業用のテーブルと、保存用のテーブルがある。
一時作業用のテーブルには、カードリーダからのデータ読み取り後の抜き出し後のフィールド(列)A,Bがある。
一時テーブルは作業中断後再開するために設けている。
(なお新規入力しかなければ、一時テーブルは不要ですね。)
保存用のテーブル(メインテーブル)にも同じくフィールドA,Bがある。
(後で整理しやすいようにキー番号も必要ですけど・・・)
作業用の単票形式のフォームは、一時作業用テーブルと連結されており、
テキストボックス1は、カードリーダからの直接入力用(非連結)
テキストボックス2は、フィールド2がコントロールソース
テキストボックス3は、フィールド3がコントロールソース
となっている。
【作業のイメージ】以下(VBA)は自動処理、(人)は、人間が行う操作です。
(1)作業用のフォームを開いたときにテキストボックス2(フィールド2)にデータが入っていればそのまま表示(作業再開)。そうでなければ(新規入力とみなし)作業用テーブルをクリアして、フォーカスをテキストボックス1にする。(VBA)
(なお新規入力しかなければ、一時テーブルは不要ですね。)
(2)磁気カードを読み込む。(多分ピッという音が出て?、キーボードとおなじでしょうからテキストボックス1に磁気カードのデータが入るんでしょうね。)(人)
(3)Enterキーを押す。(人)
(4)テキストボックス更新時のイベントでフィールドAにMid関数後のデータを入れ
テキストボックス1をクリアし、テキストボックス1にフォーカスを移す。(VBA)
(5)磁気カードを読み込む。(人)
(6)Enterキーを押す。(人)
(7)テキストボックス更新時のイベントでテキストボックス1にデータがあれば、フィールドBにデータを入れ、一時テーブルのデータ(フィールドA,B)を保存用のテーブルの新規レコードに書き込む。さらにテキストボックス1,2,3をクリアし、テキストボックス1にフォーカスを移し、次の入力に備える。(VBA)
こんなイメージでよければサンプルコードを提示させていただきます。m(__)m
この回答への補足
ありがとうございます。
私の希望はそのような感じです。
ただ、
1)テキストボックス1には磁気カードを読み込ませたあと
2)テキストボックス2に別のテーブルAからデータを引っ張り表示。
3)その処理が終わったらテキストボックス1の表示をクリア
4)テキストボックス1にフォーカス
5)次にバーコードでテキストボックス1に再度入力
6)その内容のデータはテーブルBから引っ張ってテキストボックス3に入力
7)テキストボックス1の表示をクリア
(追加の要望)
テキストボックス1に磁気カードで入力したらテキストボックス4で現在の時間を表示したいです。
画面上には
テキストボックス1- 空欄
テキストボックス2- 磁気カードの情報は表示
テキストボックス3- バーコードの情報が表示
テキストボックス4- 時間が表示
が表示されて 確認して保存用テーブルに保存
といった流れなんですが、できますでしょうか?
磁気カードとバーコードの読み込ませるテキストボックスが同じだと難しい場合は別のテキストボックス1a とかで別々に読ませてもかまいません。
こんな貧素説明で恐縮ですがお助けください。
お願い致します。
No.2
- 回答日時:
VBAで処理させましょう。
テキストボックス1にフォーカスがあるときにEnterキーを押すと磁気カードのデータが読み込まれるのでしょうか?
そうであれば、テキストボックス1の更新後イベントで、
1)テキストボックス1のデータをMid関数で求めた文字をテキストボックス2に入力
2)テキストボックス1のデータをクリア
3)テキストボックス1にフォーカスを移す
ことで実現できます。
また、補足にありますように既にテキストボックス2に入力されていればテキストボックス3に入力したければ
1)の処理を
テキストボックス2にデータがはいっているかチェックし、
テキストボックス2にデータがはいっていなければ、テキストボックス1のデータをMid関数で求めた文字をテキストボックス2に入力
そうでなければテキストボックス1のデータをMid関数で求めた文字をテキストボックス3に入力
とすればよろしいかと思います。
あるいはEnterキーで読み込み後、ボタン操作でテキストボックス2,3への入力操作を行いたいとか、途中確認メッセージを出したいとかであれば、多少処理方法が変わるかとおもいますので、よろしければ補足願います。もしわかりにくければサンプルコードを提示させていただいてもかまいません。
(上記説明でご理解していただければ、補足不要です。)
ご参考になれば幸いです。m(__)m
この回答への補足
アドバイスありがとうございます。私の実現たいものを簡単に説明します。
まずテーブルがメインのテーブル
テーブルA、テーブルBとあります。
1)フォームの中に入力用のテキストボックス1に磁気カードで読ませる。読ませたデータをテーブルAから引っ張っ
テキストボックス2に入力
2)テキストボックス1のデータをクリア、テキストボックス2の入力はそのまま
3)同じくテキストボックス1に今度はバーコードリーダーで読ませる。データはテーブルBから引っ張ってくる
バーコードのデータはテーブルBのフィールド1なので入力するにはフィールド1からフィールド2に変換してテキストボックス3に入力
それらの入力された内容すべてをメインのテーブルに保存
以上が大まかな希望ないようです。
もし説明不足等あればご指摘願います。
No.1
- 回答日時:
こんにちは。
単に表示するだけでいいのなら、
テキストボックス(2)を右クリックして【プロパティ】を選択して【すべて】のタブにある「コントロールソース」の右欄に
=Mid([テキストボックス(1)],16,7)
と入力するだけです。
ご参考になれば幸いです。m(__)m
この回答への補足
回答ありがとうございます。
テキストボックス1に読み込ませて、テキストボックス
2に表示、入力した後にテキストボックス1の表示をなくして別のバーコードをまたテキストボックス1で読みバーコードの入力をテキストボックス3に入力したいのですが、
そんな方法ってありますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのフィールド数が255しか...
-
ExcelのデータをコピーでACCESS...
-
SQLServer2005のSQL文での別名...
-
ACCESSでの改行コード
-
INSERT INTO ステートメントに...
-
FileMakerについて
-
アクセス エラーを数値「0」に...
-
フォームのデータシートビュー...
-
accessのレポートで元になるテ...
-
アクセスで複数行の一括入力す...
-
view作成時にデータ型を変更し...
-
ACCESS レーダーチャートのデー...
-
ACCESSでテーブルのチェックを...
-
ACCESSでオートナンバーを任意...
-
Accessでテーブルの値をテキス...
-
Access 昇順・降順で並び替え...
-
accessで重複を防ぎたい
-
テーブルからレコードを(在れ...
-
【Access】フォームで自動計算...
-
Access:リンクテーブルマネー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INSERT INTO ステートメントに...
-
SQLServer2005のSQL文での別名...
-
accessのレポートで元になるテ...
-
Accessのフィールド数が255しか...
-
Accessでテーブルの値をテキス...
-
ACCESSで400以上のフィールドが...
-
ExcelのデータをコピーでACCESS...
-
Accessで、固定アルファベット+...
-
ACCESSで和暦を西暦に・・・
-
ACCESSでの改行コード
-
ACCESSでテーブルのチェックを...
-
【Access】フォームで自動計算...
-
アクセス メモ型 255文字...
-
ACCESSでオートナンバーを任意...
-
アクセス エラーを数値「0」に...
-
主キーはオートナンバー型のID...
-
固有レコード識別子の選択とは??
-
accessで重複を防ぎたい
-
Access:リンクテーブルマネー...
-
Access 昇順・降順で並び替え...
おすすめ情報