環境:Windows2000 VisualBasic.Net2003
お世話になっております。
現在、データベース(Mdb)に登録した条件により、表示するフォームを切り替える
という仕組みを作ろうとしております。
データベース側には、「A=1」など、条件となる式を直接登録し、Vb側で、
IF 【ここにデータベースの値を代入】 Then 〜
というプログラムを走らせることによって、データベース側でプログラムを変更
出来るようにと考えているのですが、データベースの値(式)を代入する変数の
定義が
Dim ○○○ As String では、
IF "A=1" Thenとなってしまいます。(当然ですが。。。)
変数を文字(数値)ではなく、計算式として認識させる方法について、どなたか
アドバイスを頂けないでしょうか?
> "A=1"
のAという変数はいつ決まるのでしょうか?
Dim A As Integer
A=1
If 【ここにデータベースの値を代入】 Then
ということならば、
データベースの値は文字列でしかないので、
> Dim A As Integer
> A=1
のような値とは比較できません。
文字列のAの値が1 という情報をどこかに登録し、比較時にAという文字で引っ張ってくるようにします。
(たとえばHashTableを使って変数名文字列と値を登録するとか)
> "A=1"
は、所詮文字列なので、自分でどんな式か解釈する必要があります。
複雑でなければ、比較演算子で分割して調べればよいです。
一例)
分割
A・・・変数A
=・・・比較演算子 =
1・・・数値の1
実際の処理
左辺=文字列"A"の値をHashTableからもってくる
右辺=1という数字
Select Case 比較演算子
Case "="
結果=(左辺=右辺)
Case ">"
結果=(左辺>右辺)
....
End Select
みたいに。
結構めんどくさいですが。
ただ、A=B+1 みたいなことやるとまた難しくなるので。。。
よく考えたら、
> データベース側には、「A=1」など、条件となる式を直接登録し、Vb側で
ではなく、ある値にして、VB側でそれで切り分けたほうがいいような。
Select Case データベースの値
Case "1"
フォームAを表示
Case "2"
フォームBを表示
End Select
そういう処理を行わせるのであれば、VB.NET よりも
JScript.NET の方が楽なんですけれどね…。(^^;
------------------------------------
import System;
var value1 : String;
var formula: String;
value1 = "12345";
formula = "value1 - 100";
// 『value1 - 100 は 12245 です。』と出力される。
Console.WriteLine( String.Format("{0} は {1} です。", formula, eval(formula)) );
------------------------------------
とりあえず今回の場合は、変数のデータを、mdb内のテーブルに
持たせればよいのでは無いでしょうか。
たとえば、その「A」がテーブルの列名(TABLE1.A)だとすれば、
必要な変数の値を、そのテーブルに格納してから、
式 = "A - 1"
SQL = "SELECT " & 式 & " FROM TABLE1"
のような SQL にて問い合わせる事で、計算結果を得られますよね。
それ以外の方法であれば、このあたり。
http://dobon.net/vb/melma/dotnet34.txt
Blue様、魔界の仮面弁士様、アドバイスありがとうございます。
また、ご報告が遅くなってしまい、申し訳ありません。
現在、Blue様のアドバイス(2006/02/06(月) 15:05:40)を元に、
SelectCaseを使用して、動作を確認している状況です。
この方法でどうにか実現できそうです。ありがとうございます。
魔界の仮面弁士様に教えて頂いた方法も、明日早速試してみます。ただ、
SQLの発行による計算は、現状のコーディングでは出来ないので、
参考URLを試してみます。
(フォーム1を表示する時に、MDBから取得した複数のデータを配列に格納し、
フォーム1への入力値をキーとして、配列の中の情報を絞り込む形で作って
入る為。。。。。)
お二方共、親切なアドバイスに感謝いたします。
ツイート | ![]() |