Rst.FindFirst "名称コード" & "=" & "'101'"
タイトルのコードでは問題ないのですが、 101 を文字変数にすると「抽出条件でデータ型が一致していません」のエラーになります。この場合シングルクオーテーションはどういう意味なのでしょうか。
どうすれば良いのでしょうか。
dim Vcode as string
Vcode = "101"
Rst.FindFirst "名称コード" & "=" & Vcode
回答(4件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.4ベストアンサー20pt
FindFirst や、フォームの Filter プロパティで設定する場合は、SQL文のWHERE句の
内容を設定する必要があります。
フィールド名がテキスト型の場合は、
SELECT * FROM テーブル名 WHERE フィールド名 = "xxx"
のようになります。
で、FindFirst メソッドなんかで使う場合は、
rst.FindFirst フィールド名 = "xxx"
としたいところですが、条件の部分は文字列にしないといけません。
で、
rst.FindFirst "フィールド名 = "xxx""
こうすると、
フィールド名 =
で、切れてしまいます。
そこで、
rst.FindFirst "フィールド名 = 'xxx'"
このようにすればOKです。
次のステップとして、xxx の部分を変数を使ってやりたい場合。
単純に変数名に置き換えると、
rst.FindFirst "フィールド名 = '変数名'"
ですが、変数を、"" の中に記述すると、文字列として扱われますので、"" の外に
出してやる必要があります。
その場合、文字列と変数をつなぐためには、& を使います。
rst.FindFirst "フィールド名 = '" & 変数名 & "'"
で、このようになります。
この回答へのお礼
度々すみませんでした。
前のNo.3さんの回答と今の回答で良くわかりました。
No.3ベストアンサー10pt
こんにちは。
>シングルクオーテーションがあるとどうなるのでしょうか。
この答えは、
>タイトルのコードでは問題ないのですが、 101 を文字変数にすると
とご自分で書いてますよね。
(1)Rst.FindFirst "名称コード = " & "'101'"
(2)Vcode = "101"
Rst.FindFirst "名称コード = " & Vcode
変数を ’(シングル)で囲まなければ、数値の比較とみなされます。
これを踏まえて、(1)(2)を比べてみると
(1)では、'101'となってますから、文字列比較
(2)は、Vcodeの型は文字列になってますが、 ’(シングル)がありませんので
Vcodeをそのまま使うと、101 の数値を比較してることになりエラーが出るのです。
で、Vcodeには'(シングル)も含めて、"'101'" と入れるとOKですが、
Vcodeはもとも文字型ですからふつうに、Vcode="101" と代入した後、
findFirstメソッドを使用する時に、'(シングル)を付けるのが一般的です。
(2)Vcode = "101"
Rst.FindFirst "名称コード = '" & Vcode & "'"
以上です。
この回答へのお礼
回答ありがとうございました。
質問者の意図にそってコードを修正すると
Vcode = "101" → Vcode = "'101'"
となります。
これで理解できたでしょうか。
この回答への補足
>Vcode = "101" → Vcode = "'101'"
すみません。上の2つの違いがわかりません。
"101"は101が数字でなく文字だという意味までわかるのですが。
タイトルのコードは本の丸写しです。意味が分からないものですから応用が利きません。シングルクオーテーションがあるとどうなるのでしょうか。
せめて、環境面のことなども記載しましょう。
> Rst.FindFirst "名称コード" & "=" & Vcode
Rst.FindFirst "名称コード='" & Vcode & "'"
対象フィールドが、テキスト型の場合、必要になります。
ちなみに、日付/時刻型であれば、# を使います。
この回答へのお礼
早速ありがとうございました。VB6,WindowsXPです。
理解できないまま貼り付けて問題なく動きました。不思議な感じです。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











