关于叛别一个值是否合法的问题?(100分)

  • 主题发起人 主题发起人 sunjinhua
  • 开始时间 开始时间
S

sunjinhua

Unregistered / Unconfirmed
GUEST, unregistred user!
详细内容:
数据结构如下:
Table1的字段可能有如下值:

a1 b1
1 100
2 200
3 300
1 200
1 90

TAble2可能有如下值:
a1 B1beginValue B1endValue
1 100 200
1 400 500
2 300 400

实际上Table2定义了一种规则,即table1中a1与b1的组合是
否存在于Table2中.

如果table1.a1字段在Table2中查到,则同记录中的b1值一定要在table2对应其值的
b1BeginValue与b1EndValue之间.我的麻烦是在Table2中可能存在多条记录来定义其
范围.正如上面列出的例子:a1=1时,我们能够看出在Table2中,b1一定要在100..200或
400..500之间.

如果table1.a1字段在Table2中查不到.即在Table2中没有定义规则,则忽略.

怎样通过代码来实现,一时间没有好的解决办法.
 
select table2.al, table1.bl from table1, table2
where table1.al=:value and table1.al = table2.al and
table1.bl>=table2.blbeginvalue and table1.bl<=table2.blendvalue
如果返回不为空表说明al为:value时的bl合法
 
用delphi写一段代码应该不难,如果要象Another_eYes一样,全用SQL语句
比较困难.
 
用2个 table ,并建立关联,如:

Table1.SQL.Text := 'Select * from Table1';
Table2.SQL.Text := 'Select * from Table2 Where a1 = :a1 ';
table2.DataSource := DataSource1 // DataSource1.DataSet := Table1
while Not table2.eof do
Begin
if (Table1.FieldByName('b1').AsInteger <= Table2.FieldByName('b1EndValue').AsInteger) And
(Table1.FieldByName('b1').AsInteger >= Table2.FieldByName('b1BeginValue').AsInteger) then
Begin
// 这就是所要找的条件
// do something
...
Break;
End;
Table2.Next;
end;

但我比较倾向于eYes 的方法.
 
一个Sql语句解决,正如Another_eyes所言。
 
按Another_eYes的作法已经完成,没能及时发分,不好意思。
 
后退
顶部