![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
お世話になります。
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からWORDの文章を取得
-
VB2010 シリアル通信の文字列...
-
【VBS】クリップボード操作につ...
-
プロシージャまたは関数の引数...
-
Functionの戻り値を配列にした...
-
C言語のサフィックスについて
-
整数を二つ読み込み、それらの...
-
VBA public変数はどのようなこ...
-
VBAでcallで呼び出したsubを終...
-
subsequentとnextの違いってな...
-
Excel ユーザーフォームで計算 ...
-
C#のループでtextboxに値を入れ...
-
VB.NETでのイベントの途中終了
-
アクセスできない保護レベルエ...
-
Excel vba で複数のテキストの...
-
Excel VBAでsub,dimは何の略?
-
【HTML、VBScript】HTAアプリケ...
-
リストビューの列ヘッダーの幅...
-
エクセルVBAでテキストボッ...
-
TreeViewのTag情報取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sublimit textっていうエディタ...
-
テキストボックスかラベル上の...
-
ExcelのVBAで文章にある複数の...
-
WORd VBA 文章を単語に分解する
-
Googleシート「A1」でなくて「A...
-
Pythonのre.split()の正規表現...
-
XMLファイルのattribute値がう...
-
【VBS】クリップボード操作につ...
-
[VB6] SQLの作成について
-
Pythonでのstrip()とsplit()の...
-
vba 日本語以外を抽出について
-
助けてください!
-
perlによるxmlファイルの取得
-
ReadParseで同名のinput名は配...
-
表の文字の均等割りについて
-
DTPicker テキストクリアの方法
-
VB6.0 sp5]テキストボックスと...
-
文字列を配列に…。
-
文字列を日付型情報として計算...
-
Rubyにおける正規表現(一致し...
おすすめ情報