一个 更新 数据库记录 的问题!(200分)

  • 主题发起人 主题发起人 qpmz99
  • 开始时间 开始时间
Q

qpmz99

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有2张表:type,BOM .
表type: 如下
type Quantity
1500W/50HZ 500
1500W/60HZ 700
1000W/50HZ 100

表BOM:如下
PartNum 1500W/50HZ 1500W/60HZ 1000W/50HZ
HDW-1010 1 1 2
HDW-1024 3 4 1
HDW-1144-2 2 1 1
HDW-1175-1 1 2 2

要求:根据 type表更新 BOM表。使BOM表中的“1500W/50HZ”,“1500W/60HZ”,“1000W/50HZ”的值 乘以 type表中对应型号后的数量。最后得到的结果如下:
PartNum 1500W/50HZ 1500W/60HZ 1000W/50HZ
HDW-1010 500 700 200
HDW-1024 1500 2800 100
HDW-1144-2 1000 700 100
HDW-1175-1 500 1400 200
编程环境为:delphi7 + access
请问如何实现以上结果?
 
update BOM set [1500W/50HZ]=b.Quantity*a.[1500W/50HZ]
from BOM a,type b
where b.type='1500W/50HZ'

update BOM set [1500W/60HZ]=b.Quantity*a.[1500W/60HZ]
from BOM a,type b
where b.type='1500W/60HZ'

update BOM set [1000W/50HZ]=b.Quantity*a.[1000W/50HZ]
from BOM a,type b
where b.type='1000W/50HZ'
 
是行列互换的变化,可以分语句实现,
var partnum:string;
qty :float;

zqry1.sql.add(select * from type)
zqry1.open;
while not zqry1.eof do
begin
partnum := xxxx
qty := xxx
zqry2.sql.add('update bom set ' + partnum + '= '+ partnum + ' * ' + floattostr(qty) + ' where partnum =''' + partnum + '''';
zqry2.execute;
zqry1.next;
end;

简单的说,就是将type 的partnum 值,取出来,做为另外一个sql查询的字段名字,再计算出值,ok???只是方法,代码,自己具体化
 
TO bsense:
后面的 “ where partnum =''' + partnum + '''' ”我看不懂啊,好像不对啊
 
你不要使用这种字符相加的方式,看起来很费力!
使用Format函数

string lsValue,lsSQL;
lsSQL = 'where partnum=%s';
lsValue = 'HDW-1010';
Format(lsTemp, QuotedStr(lsValue))
这样查错也相当方便
 
这都看不懂,呵呵
 
你通过将第1个标的数据压入数组。第二个数据也压入数组。
进入,第3个标。通过循环 判断的方法逐个算。
用SQL命令看的不懂。
 
多人接受答案了。
 
后退
顶部