关于SQl语句的问题(30分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样的问题:
比如有表“dbo.salary_storage”(销售库)、“dbo.Area”(区域库)和“dbo.product_storage”(产品库)
三表的数据如下:
dbo.salary_storage dbo.Area
id area.id product.id sign id area
1 1 1 1 广东省
2 2 3 2 湖南省
3 4 1 3 广西
4 3 4 4 北京

dbo.product_storage
id product_name
1 A1
2 A2
3 A3
4 A4

我现在做一个多条件查询:
Edit.text是用来写区域,Edit2.text是用来写产品的。
代码如下:
procedure TSearch_Form.BitBtn1Click(Sender: TObject);
var
sqlstring:string;
begin
if Edit1.Text <>'' then
begin
sqlstring:=' A1.area like '''+Edit1.Text+'''';
end;
if Edit2.Text <>'' then
begin
if sqlstring<>'' then
begin
sqlstring:=sqlstring+' and p1.product_name like '''+Edit2.Text+'''';
end
else
begin
sqlstring:=' p1.product_name like '''+Edit2.Text+'''';
end;
end;
with query1 do
begin
close;
sql.clear;
sql.add('SELECT s1.id, s1.area_id, s1.product_id,');
sql.add('from Salary_Storage s1, product_storage p1,');
sql.add('Area a1 where');
sql.add(Sqlstring);
sql.add(' and s1.area_id=a1.id and s1.product_id=p1.id');
open;
end;
end;

如果在edit1.text写“广%”,在edit2.text写“A1”,则销售库显示:
id area_id product_id sign
1 1 1

我想根据查询的结果进行“update salary_storage set sign='yes' where ?”,结果如下:
id area_id product_id sign
1 1 1 yes

但where后面的语句如何写?
显然这样写是肯定不行:
with query do
begin
close;
sql.clear;
sql.add('update salary_storage set sign=''yes'' where ');
sql.add(sqlstring);
Execsql;
end;
因为sqlstring='A1.Area like '广%' and p1.product_name like 'A1'',怎么办,如何做呢?
 
update salary_storage
set sign='yes'
from Salary_Storage s1, product_storage p1,Area a1
where <font color=red>---Here is your "Sqlstring"</font>
and s1.area_id=a1.id and s1.product_id=p1.id
 
接受答案了.
 
后退
顶部