こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

レコードセットからの抽出方法

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

投稿日時 - 2002-11-27 13:44:52

QNo.414605

すぐに回答ほしいです

質問者が選んだベストアンサー

>コードは全角でPと打っているのに半角になってしまっています

半角の"P"という変数があると、自動的に変換されてしまうかも知れません。
どうしてもだめなら、関数を使って、

If Left(rst![座席番号], 1) = Chr(-32145) Then

とするとかですね。

投稿日時 - 2002-11-27 15:47:00

お礼

ありがとうございました。
完璧に動きました。
関数でやってみたら完璧でした。
大変感謝いたします。
どうもありがとうございました。

投稿日時 - 2002-11-27 16:36:35

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

ちなみに LeftB は 1バイト(半角一文字)のみ取り出すということです。

なので 全角ならば Left でいいです。

投稿日時 - 2002-11-27 16:00:29

お礼

やっぱりtakntさんのにらんだとおり全角で認識していなかったみたいです。
どうもありがとうございました

投稿日時 - 2002-11-27 16:35:30

ANo.4

No.3の人の言う通り、チェックボックスのON/OFFが出来るかどうかですね。
チェックボックスの名前(pri)の記述が違っているとか。
この場合は、チェックボックスのプロパティの名前をコピーして持ってくるのが確実ですが。

あと、これもNo.3の人の言う通り、比較するのは"P"ですが、全/半角や大/小文字は間違っているとか。

投稿日時 - 2002-11-27 15:37:13

ANo.3

Me.pri.Value = True
これだけ記述して チェックボックスが ONにならなかったら、それが
原因です。

チェックボックスが オンになるのでしたら、
IF文が おかしいのです。

そういうふうに問題を切り分けしていかないと
原因が つかめませんよ。

あと "P"は 半角のPで いいんですよね?

投稿日時 - 2002-11-27 15:08:05

補足

ありがとうございます
補足ですが、最初の文字がPであって具体的には
A-1とかP-1とかありP-*のみチェックボックスをオンにしたいわけですが、検索するテーブルには全角のP-1になっています。
ところが、コードは全角でPと打っているのに半角になってしまっています。
どうすれば全角のPと打てますか?

投稿日時 - 2002-11-27 15:38:55

ANo.2

こんにちは。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~のところ)も実行してしまいますが、それは大丈夫ですか。

投稿日時 - 2002-11-27 14:02:56

補足

ありがとうございます。
エラーでもなくチェックボックスがオンにならない以外は正常に動いています。
教えていただいたメッセージボックスも入れてみたら
ちゃんと表示されました。
今のコードすべて下記のとおりです。


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

投稿日時 - 2002-11-27 14:24:43

ANo.1

If rst![座席番号] = "P" Then
Me.pri.Value = True

では ダメ?

もしくは
If LeftB(rst![座席番号], 1) = "P" Then
Me.pri.Value = True

投稿日時 - 2002-11-27 13:55:23

あなたにオススメの質問