SQL中で、FORM名が変数のコントロールを指定するには


EG  2004-08-23 18:10:59  No: 115826

よろしくお願いします。
下記のようなSQLでFORM上のTEXTBOXの値を抽出条件に指定しています。

mySql = " SELECT AA.NAME From AA where AA.NO = '" & Form1.txtNO.Text & "'"

このFORM1の部分を可変にしたいと思い、
Dim ObjF as string
でForm名を格納したものを上記SQLで指定したいのですが、
'" & '" + ObjF + "'&.txtNO.Text & "'"
とやってみたところ、やはりうまく指定できていません。

どのように書けばいいのでしょうか???


魔界の仮面弁士  2004-08-23 18:41:32  No: 115827

そのような設計にするのであれば、「フォーム名」を渡すのではなく、
「フォーム」その物を渡した方が手っ取り早いかも。

たとえば、
  Private Function GetSQL(ByVal F As Form) As String
     GetSQL = "SELECT 〜 WHERE 項目名 = '" & F.txtNO.Text & "'"
  End Function
のように宣言しておいて
    Dim SQL As String
    SQL = GetSQL(Form2)
のように呼び出すとか。
 
# なお、この場合、テキストボックスに「' OR 1=1 OR ''='」などと
# 書かれた時に、WHERE句が「項目名='' OR 1=1 OR ''=''」のように
# なってしまうので、実際には、「'」などの処理も必要になるでしょう。


EG  2004-08-23 19:02:12  No: 115828

どうもありがとうございます。
なるほど、このような方法もあるのですね。。。
勉強になります。

ただ後学の為、「FORM1」という文字列を格納した変数(ObjF)を
SQL上で指定するにはどのような記述をすればいいのか、
これについてもお教えいただけないでしょうか。


いな  2004-08-23 20:07:48  No: 115829

>ただ後学の為、「FORM1」という文字列を格納した変数(ObjF)を
>SQL上で指定するにはどのような記述をすればいいのか、

魔界の仮面弁士さんのレスでいけないの?

たとえば、
  Private Function GetSQL(ByVal F As Form) As String
     GetSQL = "SELECT 〜 WHERE 項目名 = '" & F.txtNO.Text & "'"
  End Function
のように宣言しておいて
    Dim SQL As String
    SQL = GetSQL(Form1)
のように呼び出すとか。


EG  2004-08-23 22:33:06  No: 115830

ご指摘いただきありがとうございます。
確かにこの方法でも十分可能と思います。

ただ、GetSQL(Form1)のFORM1を明示的に指定するのでなく
変動する呼び出し元FORMをSETしていきたいので
GetSQL(Form1)のFORM1の部分を変数にせざるを得ません。

SQL分の使いまわしはできるのですが、変化するFORM名を
扱うにはどこかで変数に格納しないといけないのかな、と
考えています。

素人ですので、考えが誤っておりましたら、またご指摘願います。


クラスタ准尉  2004-08-23 23:08:43  No: 115831

フォーム名が変動するのであれば
meキーワードを使用して呼出すようにしてはいかがでしょう?

例えば
GetSQL(me)

試してみてください。


特攻隊長まるるう  2004-08-25 03:17:13  No: 115832

[VB.NET]だと↓こーゆー問題になると思ったんだけど[VB6.0]だとそうですよねぇ。いけますねぇ(汗)。
 http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200408/04080006.txt
↑実行時バインディングとかでできたかも?でも Object 型とか使うのもなぁ。…どうなんでしょ?(別スレ立てようかな?)

クラスタ准尉さんの補足…各 Form で自分自身ならクラスタ准尉さんの
おっしゃる通り、Me で十分いけます。
>GetSQL(Form1)のFORM1の部分を変数にせざるを得ません。
>  Private Function GetSQL(ByVal F As Form) As String
F は既に変数です。Form1 も Form2 も受け取ります。呼び出し側
でも Form クラスの参照変数を使えばいいだけではないですか?
[VB6.0]
Private Sub Form_Load()
    Dim FormX As Form
    Set FormX = Me
    Call GetSQL(FormX)
    Set FormX = Form1
    Call GetSQL(FormX)
    Set FormX = Form2
    Call GetSQL(FormX)
End Sub

Private Function GetSQL(ByVal F As Form) As String
   Debug.Print F.Text1.Text
End Function


特攻隊長まるるう  2004-08-25 03:35:19  No: 115833

過去ログを『Load Form1』とかで検索すると…
…ってこのキーワードは常連でないと思い浮かばないでしょうが(^^;)
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200309/03090039.txt
とか参考になるんじゃないですか?。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加