![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
VB6でSQL文字列を作成しております。
そこで質問させていただきたいのですが、
画面のテキストボックスに入力した値(txtName.textおよびtxtKatakana.text )が空かどうかに応じて、
SELECT文のWHERE句の内容を変えたいのですが。
(現ソース)
sSQL = ""
sSQL = sSQL & "SELECT * FROM TABLE名"
If txtName.text <> "" AND txtKatakana.text <>"" Then
sSQL = sSQL & "WHERE 名前= ' " & txtName.text & " ' "
sSQL = sSQL & " AND カタカナ= ' " & txtKatakana.text & " ' "
ElseIf txtName.text <> "" AND txtKatakana.text = "" Then
sSQL = sSQL & "WHERE 名前= ' " & txtName.text & " ' "
ElseIf txtName.text = "" AND txtKatakana.text <> "" Then
sSQL = sSQL & " WHERE カタカナ= ' " & txtKatakana.text & " ' "
何か他に良い方法がありましたら、
教えていただけないでしょうか?
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
これで問題はないのですが、少し手を入れると
次のようになるでしょうか。
Dim 名前 As String
Dim カナ As String
'万一、アポストロフィが入力された時の用心
名前 = Replace(txtName.Text, "'", "''")
カナ = Replace(txtKatakana.Text, "'", "''")
'以前の部分は省略
sSQL = ~
If 名前 <> "" Then
sSQL = sSQL & " WHERE 名前='" & 名前 & "'"
If カナ <> "" Then
sSQL = sSQL & " AND カタカナ='" & カナ & "'"
End If
Else
If カナ <> "" Then
sSQL = sSQL & " WHERE カタカナ='" & カナ & "'"
End If
End If
No.3
- 回答日時:
「*」ワイルドカードや、Like文を有効に使って試してみる。
SELECT * FROM テーブル名 WHERE カラム名 LIKE '[値]'
とか
SELECT * FROM テーブル名 WHERE カラム名 LIKE '*[値]*'
その環境で、
[値]が空のとき(*をセットしてでも)全件、
[値]があればその値に該当するもの、
になるかどうかを確認する。
うまくいけばSQLは1文で、空の判定も要らない。
引き渡すものを変えて、SQLは変えない方向はどうか。
No.2
- 回答日時:
参考までに挙げてみます。
(1)条件の内容(テキストボックスの中身)のA,Bは文字列
(2)2条件固定として、WHERE を使い、その中間はANDで結ぶ
と言う前提で、文字列を結合してなど色々やってみたが、私の力では、余りすっきりならなかった。
例えば一旦先に条件の文字列を結合して、場合により不要なx="やAND Y=を消そうとしたが、判りにくいだけのようだった。
ーー
ただしCase文を使うと、少し一瞬の可読性が上がるように思うが、どうだろう。
やはり場合分けを正面から、したほうがすっきりするようだ。
ーーー
私のテスト環境の関係でエクセルVBAでやってみた。条件文字列の出方だけのテストなので、あしからず。
ユーザーフォームにテキストボックスを2つ貼り付け。
コマンドボタン(キャプションは「検索実行」とでも、つけるべきか)を1つ貼り付け
そのクリックイベントに
Private Sub CommandButton1_Click()
test01
End Sub
標準モジュールに
(Case文のネスト)
Sub test01()
A = UserForm1.TextBox1.Text
B = UserForm1.TextBox2.Text
Select Case A
Case Is = ""
Select Case B
Case ""
MsgBox "エラー条件入力もれ"
Case Else
MsgBox "WHERE Y = " & B
End Select
Case Else
Select Case B
Case ""
MsgBox "WHERE X= " & A
Case Else
MsgBox "WHERE X = " & A & " AND Y=" & B
End Select
End Select
End Sub
Where以下の文字列だけを論じている。
SQL処理系によって、上記のAyaBの前後にシングルコーテーションや、ダブルコーテーションが必要なものがあると思うので
修正が必要。
SELECT・・FROM ZZZと最後の;は必要だが略している。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Visual Basic(VBA) chromedriverのver-upで動作不安定となった 3 2022/07/07 11:32
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスかラベル上の...
-
ExcelのVBAで文章にある複数の...
-
アクセスのフィールドに値をペ...
-
助けてください!
-
アクセスできない保護レベルエ...
-
C言語のサフィックスについて
-
C#のループでtextboxに値を入れ...
-
他のフォームから別のフォーム...
-
演奏記号の・・・・
-
レコードセットにnullの場合
-
VBAでcallで呼び出したsubを終...
-
subsequentとnextの違いってな...
-
VB.NETでのイベントの途中終了
-
配列に複数の値があるか簡潔に...
-
Excel VBAでsub,dimは何の略?
-
【C#】コンボボックスにおけるS...
-
零元のはいっている
-
構造体のコピー
-
VBAのフォーム カーソル移動
-
GetNextWindowがDLLファイルUse...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVBAで文章にある複数の...
-
テキストボックスかラベル上の...
-
RichTextBoxで指定行の色を自動...
-
[VB6] SQLの作成について
-
ReadParseで同名のinput名は配...
-
DTPicker テキストクリアの方法
-
sublimit textっていうエディタ...
-
Googleシート「A1」でなくて「A...
-
Can you text me your business...
-
vba 日本語以外を抽出について
-
文字列を配列に…。
-
フォームのテキストボックス内...
-
【VBS】クリップボード操作につ...
-
VB2010 シリアル通信の文字列...
-
「Thanks 4 sending me」←誤文?
-
XMLファイルのattribute値がう...
-
PHP GDでテキストを含む最小の...
-
助けてください!
-
EXCELからWORDの文章を取得
-
VB6.0 sp5]テキストボックスと...
おすすめ情報