当前位置: 代码迷 >> PB >> 怎么删除一个DW中的所有数据
  详细解决方案

怎么删除一个DW中的所有数据

热度:180   发布时间:2016-04-29 09:22:50.0
如何删除一个DW中的所有数据
SELECT Comm002.IP,
Comm001.IP_Loca,
Comm002.Loss,
Comm002.Plant_NO, 
Comm002.S_Date, 
  Comm002.Lost, 
Comm002.Shift

FROM Comm002 INNER JOIN
  Comm001 ON Comm002.IP = Comm001.IP_ADD 
AND Comm001.Plant_NO = Comm002.Plant_NO
where Comm002.Plant_NO like :ag_plant + "%"
and Comm002.Shift like :ag_shift + "%" 
and Comm002.R_Date like :ag_date + "%"
and substring(Comm002.loss,1,CHARINDEX('%', Comm002.Loss) -1 ) >= :ag_loss
///这是dw中用的sql
我想写一个删除,一次性删除dw中显示的所有数据tab_1.tabpage_2.dw_1.AcceptText()
integer row_count
row_count=tab_1.tabpage_2.dw_1.rowcount() //得到数据记录的行数

if messagebox('提示信息','你确定要删除吗?',question!,OKCancel! )=1 then
if row_count=0 then 
messagebox('提示','记录数为0,不能再删除')

else
//tab_1.tabpage_2.dw_1.deleteRow(dw_1.getrow()) //删除当前记录
int i
for i=1 to row_count+1
tab_1.tabpage_2.dw_1.deleteRow(i)
tab_1.tabpage_2.dw_1.update()
commit;
i=i+1
next

messagebox('提示','删除成功')
//tab_1.tabpage_2.dw_1.reset()
end if
else
return;
end if
//每次删除只是。删除其中的几行,不知何故,请求

------解决方案--------------------
tab_1.tabpage_2.dw_1.RowsMove(1, row_countDelete!, tab_1.tabpage_2.dw_1, 1, Primary!)
------解决方案--------------------
循环删除DW 的行要注意一个问题:
DW 每删除一行后,其rowcount() 是会变的。
解决的办法可以是 for i = rowcount() to 1 step -1

像LZ 这种循环

row_count=tab_1.tabpage_2.dw_1.rowcount() //得到数据记录的行数

。。。。。。。。。。。。。。。
else
//tab_1.tabpage_2.dw_1.deleteRow(dw_1.getrow()) //删除当前记录
int i
for i=1 to row_count+1
tab_1.tabpage_2.dw_1.deleteRow(i)
tab_1.tabpage_2.dw_1.update()
commit; 
i=i+1
next
。。。。。


可以用草稿纸画一下,就明白问题在哪里了。


------解决方案--------------------
举个例:
DW 共3行,
int lc, li

lc = dw.rowcount() //li=3
for li = 1 to lc //(1 to 3)
dw.deleterow(li) 
/* li=1 时 deleterow(1)若成功,删除的是原DW 的第一行,则dw.rowcount() = 2, 原第二行变为 1 原第三行变为2 ....
li=2 时 deleterow(2)若成功,删除删除了第一行的原DW ,也就是删除了原dw 的第三行,则dw.rowcount() = 1,
....
li=3时, dw已经不存在第三行。,
*/
next

循环完以后,DW 还会剩下原DW 的第二行。

------解决方案--------------------
每次只能删除当中几行的原因是每删除一行后,你的dw中的rowcount都变化,所以会删不到,可以用这个来删:tab_1.tabpage_2.dw_1.rowsmove(1,row_count,Primary!,tab_1.tabpage_2.dw_1,1,Delete!)
------解决方案--------------------
如果你用for循环去删除数据的话,每必要每删除一条都去提交的,可以全部for循环都执行完后再提交,或者就用我上面给的语句一次全部删除啊。

tab_1.tabpage_2.dw_1.AcceptText()
integer row_count
row_count=tab_1.tabpage_2.dw_1.rowcount() //得到数据记录的行数

if messagebox('提示信息','你确定要删除吗?',question!,OKCancel! )=1 then
 if row_count=0 then
messagebox('提示','记录数为0,不能再删除')
 else
tab_1.tabpage_2.dw_1.rowsmove(1,row_count,Primary!,tab_1.tabpage_2.dw_1,1,Delete!)
if tab_1.tabpage_2.dw_1.update() <> 1 then 
messagebox('提示','删除失败!')
rollback;
return 
else
commit; 
messagebox('提示','删除成功')
end if
 end if
else
 return;
end if
  相关解决方案