- ベストアンサー
レコードセットからの抽出方法
Access2000を使用しています。 下記のコードのとおり 入力用テキストボックスに座席コードを入力して seat テーブルから座席コードと入力したものからレコードを探して表示できているんですが、 レコードセットで抽出した座席番号が「P」のものだけ チェックボックス(pri.value=true) にしたいのですが動きませんどのようなコードを書けばいいんでしょうか? Dim rst As New ADODB.Recordset Set rst = New ADODB.Recordset rst.Open "select * from seat where 座席コード='" & Me.入力用テキストボックス & "'", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic If rst.EOF = True Then MsgBox ("座席情報はありません。") Me.入力用テキストボックス = "" End If If rst.EOF = False Then Me.座席コード = rst![座席コード] Me.座席番号 = rst![座席番号] Me.入力用テキストボックス = "" Me.受付時間 = Now() End If If Left(rst![座席番号], 1) = "P" Then Me.pri.Value = True
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>コードは全角でPと打っているのに半角になってしまっています 半角の"P"という変数があると、自動的に変換されてしまうかも知れません。 どうしてもだめなら、関数を使って、 If Left(rst![座席番号], 1) = Chr(-32145) Then とするとかですね。
その他の回答 (5)
- taknt
- ベストアンサー率19% (1556/7783)
ちなみに LeftB は 1バイト(半角一文字)のみ取り出すということです。 なので 全角ならば Left でいいです。
お礼
やっぱりtakntさんのにらんだとおり全角で認識していなかったみたいです。 どうもありがとうございました
- maruru01
- ベストアンサー率51% (1179/2272)
No.3の人の言う通り、チェックボックスのON/OFFが出来るかどうかですね。 チェックボックスの名前(pri)の記述が違っているとか。 この場合は、チェックボックスのプロパティの名前をコピーして持ってくるのが確実ですが。 あと、これもNo.3の人の言う通り、比較するのは"P"ですが、全/半角や大/小文字は間違っているとか。
- taknt
- ベストアンサー率19% (1556/7783)
Me.pri.Value = True これだけ記述して チェックボックスが ONにならなかったら、それが 原因です。 チェックボックスが オンになるのでしたら、 IF文が おかしいのです。 そういうふうに問題を切り分けしていかないと 原因が つかめませんよ。 あと "P"は 半角のPで いいんですよね?
補足
ありがとうございます 補足ですが、最初の文字がPであって具体的には A-1とかP-1とかありP-*のみチェックボックスをオンにしたいわけですが、検索するテーブルには全角のP-1になっています。 ところが、コードは全角でPと打っているのに半角になってしまっています。 どうすれば全角のPと打てますか?
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 質問のコードだけでは何故動かないかわかりません。 End Ifやレコードセットの破棄とかは、省略してあるだけで本当は記述してあるんですよね。 あと、エラーではないんですよね。 とりあえず、逐次実行で1行ずつ確認してみて下さい。 そして、例えば、最後のIf文の中(True句)を実行しているかどうかを確認して下さい。 そのIf文の条件の Left(rst![座席番号], 1)はちゃんと"P"を返しているのか。 If文の直前に、 MsgBox Left(rst![座席番号], 1) とすればわかります。 いろいろと確かめてみて下さい。 ところで、そのコードだと、rstがない場合(If rst.EOF = True Thenのところ)は、Exit Subとかで抜けないと、そのまま最後のIf文(Left~のところ)も実行してしまいますが、それは大丈夫ですか。
補足
ありがとうございます。 エラーでもなくチェックボックスがオンにならない以外は正常に動いています。 教えていただいたメッセージボックスも入れてみたら ちゃんと表示されました。 今のコードすべて下記のとおりです。 Dim rst As New ADODB.Recordset Set rst = New ADODB.Recordset rst.Open "select * from seat where 座席コード='" & Me.入力用テキストボックス & "'", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic If rst.EOF = True Then MsgBox ("座席情報はありません。") Me.入力用テキストボックス = "" End If If rst.EOF = False Then Me.座席コード = rst![座席コード] Me.座席番号 = rst![座席番号] Me.入力用テキストボックス = "" Me.受付時間 = Now() End If MsgBox Left(rst![座席番号], 4) If LeftB(rst![座席番号], 1) = "P" Then Me.pri.Value = True End If rst.Close Set rst = Nothing 入力用テキストボックス.SetFocus End Sub
- taknt
- ベストアンサー率19% (1556/7783)
If rst![座席番号] = "P" Then Me.pri.Value = True では ダメ? もしくは If LeftB(rst![座席番号], 1) = "P" Then Me.pri.Value = True
お礼
ありがとうございました。 完璧に動きました。 関数でやってみたら完璧でした。 大変感謝いたします。 どうもありがとうございました。