[VB6] SQLの作成について
- VB6でのSQL文字列作成時に、画面のテキストボックスの入力値に応じてWHERE句の内容を変えたいです。
- 現在のソースでは、入力値の有無によって条件分岐させているため、他に良い方法があるか教えてください。
- ベストアンサー
[VB6] SQLの作成について
お世話になります。 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 & " ' " 何か他に良い方法がありましたら、 教えていただけないでしょうか? よろしくお願いいたします。
- masy0312
- お礼率49% (104/211)
- Visual Basic
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これで問題はないのですが、少し手を入れると 次のようになるでしょうか。 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
その他の回答 (2)
- layy
- ベストアンサー率23% (292/1222)
「*」ワイルドカードや、Like文を有効に使って試してみる。 SELECT * FROM テーブル名 WHERE カラム名 LIKE '[値]' とか SELECT * FROM テーブル名 WHERE カラム名 LIKE '*[値]*' その環境で、 [値]が空のとき(*をセットしてでも)全件、 [値]があればその値に該当するもの、 になるかどうかを確認する。 うまくいけばSQLは1文で、空の判定も要らない。 引き渡すものを変えて、SQLは変えない方向はどうか。
- imogasi
- ベストアンサー率27% (4737/17068)
参考までに挙げてみます。 (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
- VBでSQL
SQLでテーブル1に該当レコードがなければインサート あればアップデートをする処理をしたいのです IF ??? THEN UPDATE テーブル1 SET SELECT * FROM テーブル2 WHERE 条件 ELSE INSERT INTO テーブル1(SELECT * FROM テーブル2) END IF ???はプライマリキーで判定をしようと考えています こんな感じでやろうとしたところ うまくいきませんでした VB上で実行しよううとしているからなのでしょうか? ADOでSQLサーバに接続しています 条件分岐もどういう条件(VBでの書き方)がわからないです。 よろしくお願いします。
- 締切済み
- Visual Basic
- SQL SERVER の Where条件
初めて質問させて頂きます。 VB内でSQL文を作成し、それをSqlServerに送り実行させているのですが、 VB内でSQL文を作成する時に、Whereの条件を入れたり入れなかったりします。 その時、都度、WhereをつけるのかAndをつけるのか判断してプログラムを書くのが億劫なので Dim SqlString as string SqlString = "SELECT * FROM テーブルA WHERE 0 = 0" IF txtA.text <> "" then SqlString = SqlString & " AND 項目A = " & txtA.text END IF IF txtB.text <> "" then SqlString = SqlString & " AND 項目B = " & txtB.text END IF こういうズボラをしてるのですが、これってSqlの実行スピードに影響したりしますか? 思うようにインデックス使ってくれなかったりしますか? ご存知の方がご教授下さい。 よろしくお願いします。
- ベストアンサー
- SQL Server
- VBとDB連携について
VB.NETとDB(オラクル)を使って開発をしています。 画像の左側のテキストボックスは上から textbox1(Nameプロパティ:txt_Name) textbox2(Nameプロパティ:txt_Tihou) textbox3(Nameプロパティ:txt_Category) としています SQL文で textbox1~textbox3の内容が入っている項目だけWHERE句で抽出させたいです たとえば画像の例で、 textbox1に「みかん」、textbox3に「果物」と入れているとき、 赤の四角で囲った2行をdatagridviewとかに表示しようとおもっています 実際のコード(変数等は中略しています) 'textbox1、textbox2、textbox3が空白でない if textbox1.text <> "" And textbox2.text <> "" And textbox3.text <> "" SQL = "select * from ["表名"] where 名前 = " & textbox1.text & _ " and 地方 = " &textbox2.text & " and カテゴリ = " & textbox3.text" end if 'textbox1が空白でない if textbox1.text <> "" And textbox2.text = "" And textbox3.text = "" SQL = "select * from ["表名"] where 名前 = " & textbox1.text & " end if ・ ・ ・ ・ ・・・という感じで全ての組み合わせ(10通りくらい)でIF文を書いています この例では3つなのでまだいいかもしれませんが、 テキストボックスが10個とか100個とかになったらどのように判断したらいいのか分からないです 何か効率いい方法、知っている方いましたら教えてください
- ベストアンサー
- Visual Basic
- SQL分のWHERE句について
SQLのWHERE句について ================================== ABC :入力値(2又は5バイトの可変) T.テーブル.フィールド:ABCが格納されているテーブル(格納すると同時に5桁になります。) 例:01(入力値)⇒01000(格納値) ================================== 参照時のWHERE句の作成の仕方を教えてください。 ※検索値が2桁の場合は、格納値5桁の前方2桁一致でHITさせます。 また5桁の場合は、格納値5桁の全一致です。 今考えているのでは、 IF ABC <> "" THEN IF LenB(ABC) = 2 THEN SQL_WHERE = SQL_WHERE & "AND (LEFT(T.テーブル.フィールド,2) = '" & ABC & "' )" ELSEIF SQL_WHERE = SQL_WHERE & "AND (T.テーブル.フィールド = '" & ABC & "')" END IF END IF です。 宜しくお願いします
- 締切済み
- その他(プログラミング・開発)
- SQL・・
SQL構築で聞かせてください。 テーブル 名前 購入月 購入日 カローラ 4 18 プリウス 5 2 クラウン 12 22 なカンジです・・。 文章で表すと、例えば、 4月16日~5月15日までのデータを取りたいのです。 SELECT * FROM kounyuu WHERE 名前 = プリウス 購入月 = 4 AND 購入日 >= 16 SELECT * FROM kounyuu WHERE 名前 = プリウス 購入月 = 5 AND 購入日 <= 15 この2つの SELECT 文を1つにすることは可能ですか? (名前には、常に同じ値が入ります)
- ベストアンサー
- その他(データベース)
- VBでAccessにSQL文を実行して値を取り出す
下記のソースは、 UserIDとPasswordをDBと照らし合わせて、 そのUserが存在すればTrue、存在しなければFalse を返すというプログラムです。 しかし初めてDBに接続し、まったく右も左も分からない 状況なので処理的におかしな点を教えていただけないでしょうか。 またDB接続からSQL実行までの簡単な流れを教えていただけると助かります。 adoRs = ADODB.Recordset adoCn = ADODB.Connection adoCd = ADODB.Command Login.txtName.Text = 比較するユーザー名 Login.txtPass.Text = 比較するパスワード です。その他わかりにくい点があったら質問を お願いします。 Private Function Func_UserSerch() As Boolean Func_UserSerch = False On Error GoTo UserSerchError 'レコードセットの取得 With adoRs .ActiveConnection = adoCn .Source = "user" .CursorType = adOpenStatic .LockType = adOpenForwardOnly .Properties("IRowsetIdentity") = True .Open End With MySQL = "SELECT * FROM user " & _ "WHERE UserID = " & Login.txtName.Text & _ "AND Password = " & Login.txtPass.Text & ";" 'SQLの実行 With adoCd .ActiveConnection = adoCn .CommandType = adCmdStoreProc .CommandText = MySQL .Execute End With If adoRs.EOF = True And adoRs.BOF = True Then Func_UserSerch = False Else Func_UserSerch = True End If UserSerchError: MsgBox "SQL実行中にエラーが発生しました" End Function
- ベストアンサー
- Visual Basic
- 一つのSQLで実行できるでしょうか?
sqliteで質問です。 今、以下のようなテーブル(table1)があったとします。 uid | date | comment 010 | 1211 | AAAAA 011 | 1211 | BBBBB 010 | 1220 | CCCCCC 011 | 1220 | DDDDDD このとき、1行目と4行目を取得や削除するようなSQLを一つで記述することは可能でしょうか? イメージてきには、 select * from table1 where {((uid = 010) and (date = 1211)), ((uid = 011) and (date = 1220))} みたいな感じにです。 つまり、where句の組み合わせを複数書いて一つのSQLで実行したいのです。 恐れ入りますが、よろしくお願いします。
- ベストアンサー
- その他(データベース)
- VisualStudioでデータベースへの登録ができないので教えてください
全くのプログラミング初心者ですが、仕事で作らなければならないため困っています。 VisualStudioで以下のように記述しましたが、Accessで作ったデータベースに登録ができません。 どこを直せば良いかアドバイスをお願いします。 'text欄の書き込み処理------------------------------------------ For intX=1 to maxanswer sSQL="select qs_no,ans_no,text from T_qs_ans where id=" & id & " and ans_no =" & intX Set AnsRs=DB.Execute(sSQL) if Not AnsRs.EOF then if AnsRs("text")=1 then 'text欄がある場合 if request("text" & intX)<>"" then 'text欄に書き込みがあった場合 sSQL="insert into T_qs_ans_text (id,qs_no,ans_no,text,kubun,votenum,kubunA) values " sSQL=sSQL & "(" & id & "," & intX & ",'" & request("text" & intX) sSQL=sSQL & "'," & kubun & "," & kubunA & "," & votenum & ")" DB.Execute(sSQL) end if end if end if '-------------------------------------------------------------- Next
- 締切済み
- その他(プログラミング・開発)
- SQL文の連結が、うまくいきません
いつもお世話になっております。 現在、SQL文生成プログラムを作成しているのですが エラーメッセージ 「Microsoft OLE DB Provider for SQL Server (0x80040E14) '.' 付近に不適切な構文があります。」 表示されて、どうしても解決出来ません ソースを記載しますのでアドバイス頂けないでしょうか? デバッガーみたいな事をさせてしまい、本当に申し訳ありません 開発者自分一人(ほぼ初めて)で、どうにも進みませんでしたので お願いいたします。 ※--ASPのデバッグに関して もう一つお聞きしたいのですが (出来ればこちらの質問も答えてくださると幸いです) 皆さんは、ASPのデバッグをどの様に行っていますか? VB6.0やVBAの場合は、ソースが不完全やエラーでも 「F8」を押して、ソースの途中まで稼働させて 「現在格納されている変数の中身」等を確認して 割とエラー解決もスムーズに出来ましたが、ASPではそれが出来ないため 難航しています(Line*** と エラーメッセージだけを頼りに) 皆さんはASPの場合、どの様にエラー解消されていますか? (どうにかして、自分一人でも安定して成果をあげていきたいので) 我流でも結構ですので、是非アドバイスお願いします SQL生成ソース '--SQL生成 strSQL = "select * from STA040, STA500M7" '--SQL作成(抽出場合分け) if check = "Day" then strSQL = strSQL + "where STA500M7.CODE040 = STA040.CODE" '--期日空白処理 Blank_out J_days_st,N_days_st,M_days_st,J_days_ed,N_days_ed,M_days_ed '--受注日BetWeen if J_days_st <> "" and J_days_ed <> "" then strSQL = strSQL + " and STA500M7.YYMMDD_1 BETWEEN " & J_days_st_sql & " and " & J_days_ed_sql & " " '--受注日start○,End× Elseif J_days_st <> "" and J_days_ed = "" then strSQL = strSQL + " and STA500M7.YYMMDD_1 >= " & J_days_st_sql & " " '--受注日start×,End○ Elseif J_days_st = "" and J_days_ed <> "" then strSQL = strSQL + " and STA500M7.YYMMDD_1 <= " & J_days_st_sql & " " '--受注日start×,End× Elseif J_days_st = "" and J_days_ed = "" then End if '--納期BetWeen If N_days_st <> "" and N_days_ed <> "" then strSQL = strSQL + " and STA500M7.YYMMDD_3 BETWEEN " & N_days_st_sql & " and " & N_days_ed_sql & " " '--受注日start○,End× Elseif N_days_st <> "" and N_days_ed = "" then strSQL = strSQL + " and STA500M7.YYMMDD_3 >= " & N_days_st_sql & " " '--受注日start×,End○ Elseif N_days_st = "" and N_days_ed <> "" then strSQL = strSQL + " and STA500M7.YYMMDD_3 <= " & N_days_st_sql & " " '--受注日start×,End× Elseif N_days_st = "" and N_days_ed = "" then End if '--見積日BetWeen If M_days_st <> "" and M_days_ed <> "" then strSQL = strSQL + " and STA500M7.YYMMDD_10 BETWEEN " & M_days_st_sql & " and " & M_days_ed_sql & " " '--見積日start○,End× Elseif M_days_st <> "" and M_days_ed = "" then strSQL = strSQL + " and STA500M7.YYMMDD_10 >= " & M_days_st_sql & " " '--納期start×,End○ Elseif M_days_st = "" and M_days_ed <> "" then strSQL = strSQL + " and STA500M7.YYMMDD_10 <= " & M_days_st_sql & " " '--納期start×,End× Elseif M_days_st = "" and M_days_ed = "" then End if 'strSQL = strSQL + "order by sta500m7.code ASC" 'strSQL = "select * from STA040,STA500M7 where STA500M7.CODE040 = STA040.CODE and STA500M7.YYMMDD_3 >= " & hiduke & " " 'strSQL = strSQL + " order by sta500m7.code DESC;" End if '↓ここがエラーだと表示されます(おそらくSQLが問題かと) Set objRS = objCon.Execute(strSQL)'レコードセットのオープン アドバイスお願いいたします
- ベストアンサー
- Microsoft ASP
- PL/SQLでのSQL文法
こんにちは。教えてください。 PL/SQLを使うのが初めで戸惑っています。 まず、PROCEDUREで =========================== BEGIN SELECT NAME FROM TABLE1 WHERE NAME='tanaka'; END; / =========================== このように書いて実行させようとすると、「コンパイルエラー」 「INTO句はこのSELECT文に入ります」というエラーが出ます。 SQLの文法的には間違ってないと思うのですが、INTO句とはこれいかに?? ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎて わかりませんでした。 PL/SQLやORACLEのメーリングリストでお勧めがありましたら教えてください。 よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
お礼
ありがとうございます。参考になりました。