投稿者 魔界の仮面弁士  (社会人) 投稿日時 2014/6/19 20:38:19
> ※Textbox1はtextのプロパティで「0」を最初から入れています。
> If TextBox1.Text = 0 Then

これは非常にマズイです。

Text プロパティが返すのは 文字列(String 型)です。
しかし上記の比較式では、右辺の「0」が整数値(Integer 型)になっていますよね。

型をあわせるために、右辺も文字列型にして、
 『If TextBox1.Text = "0" Then』
と書くようにしましょう。 


『If TextBox1.Text = 0 Then』という記述の場合、VB は「=」の両辺を
数値(Double 型)に変換してから比較する仕様になっています。

すなわち上記は、「If CDbl(TextBox1.Text) = 0.0 Then」という意味で
実行されてしまっているということです。


TextBox1 の内容が、初期値に指定した「0」のままであるとか、あるいは
「123」などといった数値として記入されている場合には、現在の
『If TextBox1.Text = 0 Then』でのチェックを通過できます。しかし、もしも
TextBox1 の内容が、「」や「abc」などに変更された場合、
『If TextBox1.Text = 0 Then』のコードのままでは、Double 型への
型変換エラーが実行時に発生してしまうことになります。


> 今の所、ID、パスワード作成時にある程度のセキュリティを高めていると思っています。

それは「作成時」の法則であって、「入力時」の制限ではありませんよね。

本来のIDやパスワードはそういうルールであったとしても、利用者はそれらと異なる文字列を、
【間違えて入力してしまう】(あるいは意図的な誤入力などの)恐れがあります。

その場合に誤動作やエラーが起きぬようにするための対策として
 ・範囲外の文字が入力できないように、画面側に入力制限を施す
 ・データベースに渡す前に入力値検査を行うようにする
あるいは
 ・「'」を「''」に置き換えるか、パラメータクエリーを用いる
といった対処が必要になってくるわけです。



> Private Function CheckUser(id As String, pass As String) As Boolean
この CheckUser 関数は、戻り値として何を返したいのでしょうか?

ログインできたかどうかを、True/False で返したいなら、As Boolean で良いですが、
ログインされたユーザー名を文字列として返したいなら、As String にするべきです。


> Return BBB '「RESULT <> 0」にするとString "横横太郎       " から型 'Boolean' への変換は無効です。とエラー。

いいえ、そうはならないはずです。

もしも『String "横横太郎       " から型 'Boolean' への変換は無効です。』
というエラーが出力されたなら、それは「Return RESULT」と書いた場合でしょう。

「Return RESULT <> 0」としたのなら、エラーメッセージは
  『String "横横太郎       " から型 'Double' への変換は無効です。』
となるはずです。


> エラー回避の為にBBBを使用 

修正の方向性が間違っています。

RESULT には、ログインしたユーザー名(文字列)を格納したのですよね。
であれば、Function CheckUser の戻り値も As String にしておくべきです。


なお、As Boolean のままにしておきたいのであれば、ログインできたかどうかを確認するため、
「Return Not String.IsNullOrEmpty(RESULT)」などと書くことができます。