変数自体を式として流用するには?

解決


Hine  2006-02-06 23:19:35  No: 130116

環境:Windows2000  VisualBasic.Net2003

お世話になっております。
現在、データベース(Mdb)に登録した条件により、表示するフォームを切り替える
という仕組みを作ろうとしております。

データベース側には、「A=1」など、条件となる式を直接登録し、Vb側で、

IF 【ここにデータベースの値を代入】  Then  〜

というプログラムを走らせることによって、データベース側でプログラムを変更
出来るようにと考えているのですが、データベースの値(式)を代入する変数の
定義が

Dim ○○○ As String では、
IF  "A=1" Thenとなってしまいます。(当然ですが。。。)

変数を文字(数値)ではなく、計算式として認識させる方法について、どなたか
アドバイスを頂けないでしょうか?


Blue  2006-02-07 00:01:09  No: 130117

> "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 みたいなことやるとまた難しくなるので。。。


Blue  2006-02-07 00:05:40  No: 130118

よく考えたら、
> データベース側には、「A=1」など、条件となる式を直接登録し、Vb側で
ではなく、ある値にして、VB側でそれで切り分けたほうがいいような。

Select Case データベースの値

Case "1"
    フォームAを表示
Case "2"
    フォームBを表示
End Select


魔界の仮面弁士  2006-02-07 00:12:15  No: 130119

そういう処理を行わせるのであれば、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


Hine  2006-02-07 10:16:18  No: 130120

Blue様、魔界の仮面弁士様、アドバイスありがとうございます。
また、ご報告が遅くなってしまい、申し訳ありません。

現在、Blue様のアドバイス(2006/02/06(月) 15:05:40)を元に、
SelectCaseを使用して、動作を確認している状況です。

この方法でどうにか実現できそうです。ありがとうございます。

魔界の仮面弁士様に教えて頂いた方法も、明日早速試してみます。ただ、
SQLの発行による計算は、現状のコーディングでは出来ないので、
参考URLを試してみます。
(フォーム1を表示する時に、MDBから取得した複数のデータを配列に格納し、
  フォーム1への入力値をキーとして、配列の中の情報を絞り込む形で作って
  入る為。。。。。)

お二方共、親切なアドバイスに感謝いたします。


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

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






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