这个问题如何解决?在线等!UP也有分
在数据窗口中删除当前行后,我想用删掉的这一行后面的一行的行号来Retrieve,如果删除行是最后一行,则用第一行的行号来Retrieve,请问各位如何实现? 问题点数:80、回复次数:24Top
1 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:08:21 得分 50
在删除代码中这么写:
Int Row
Row=dw_1.GetRow()
dw_1.DeleteRow(Row)
If Row>dw_1.RowCount() Then
dw_1.Retrieve(1)
Else
dw_1.Retrieve(Row)
End IfTop
2 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 21:23:58 得分 0
出错:Retrieve argument 1 does not match expected type
Dw_1的retrieve参数是string型,可是加引号还是出错Top
3 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:25:33 得分 0
Retrieve(String(1))Top
4 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 21:33:35 得分 0
还是出错,真搞不懂
Top
5 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:35:49 得分 0
什么地方出错,你的检索参数是怎么定义的 出错信息是什么?Top
6 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:37:27 得分 0
如果检索参数类型为String,这么写:
Int Row
Row=dw_1.GetRow()
dw_1.DeleteRow(Row)
If Row>dw_1.RowCount() Then
dw_1.Retrieve(String(1))
Else
dw_1.Retrieve(String(Row))
End If
Top
7 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 21:43:58 得分 0
删除代码如下:
string ls_id
integer li_rowcount
integer li_getrow
li_rowcount = dw_1.RowCount()
li_getrow = dw_1.GetRow()
ls_id = dw_1.object.p_line_id[dw_1.GetRow()]
Integer li_return
Integer li_i
li_return = messagebox("系统提示", "确定删除该记录吗?", question!, YesNo!, 2)
IF li_return <> 1 THEN return
DELETE FROM product_line
WHERE p_line_id = :ls_id;
IF SQLCA.SQLCode <> 0 THEN
messagebox("系统提示", "删除该记录失败!")
ROLLBACK;
ELSE
COMMIT;
li_i = messagebox("系统提示", "该记录已被成功删除!")
if li_getrow > dw_1.RowCount() then
dw_1.Retrieve(1)
else
dw_1.Retrieve(li_getrow)
end if
END IF
出错信息:Retrieve argument 1 does not match expected typeTop
8 楼icedot(小雨)回复于 2004-01-03 21:46:30 得分 10
这个错误就是你的参数类型不相同。
你用了。 CodeMagic(写错了吧) 的方法还是错了吗?不会吧。Top
9 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:51:41 得分 0
你的数据窗口为FreeForm风格的吧?
你可以在删除前先记录下一条记录的主键,而不是它的记录编号,这样写:
String Id
......
......
li_getrow = dw_1.GetRow()
If li_getrow=dw_1.RowCount() Then
Id=dw_1.GetItemString(1,'为主键的列名')
Else
Id=dw_1.GetItemString(dw_1.RowCount() +1,'为主键的列名')
End If
....
....
把
COMMIT;
li_i = messagebox("系统提示", "该记录已被成功删除!")
if li_getrow > dw_1.RowCount() then
dw_1.Retrieve(1)
else
dw_1.Retrieve(li_getrow)
end if
改为:
Commit;
dw_1.Retrieve(Id)
Top
10 楼CodeMagic(ErrorDetector)回复于 2004-01-03 21:53:25 得分 0
li_getrow = dw_1.GetRow()
If li_getrow=dw_1.RowCount() Then
Id=dw_1.GetItemString(1,'为主键的列名')
Else
Id=dw_1.GetItemString(dw_1.RowCount() +1,'为主键的列名')
End If
dw_1.DeleteRow(li_getrow)Top
11 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:01:35 得分 0
是啊,我的Retrieve参数类型是String啊,真是奇怪Top
12 楼CodeMagic(ErrorDetector)回复于 2004-01-03 22:04:03 得分 0
你按照我写的代码改了么?Top
13 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:10:50 得分 0
改了,还是不行
Top
14 楼CodeMagic(ErrorDetector)回复于 2004-01-03 22:12:40 得分 0
你的数据窗口为FreeForm风格的吗?
你为主键设的检索条件吗?
什么错误?Top
15 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:31:01 得分 0
真是麻烦你了,我都不好意思了。
我的数据窗口为FreeForm风格, 没有为主键设的检索条件
你再看看代码:
string ls_id, ls_next_id
integer li_rowcount
integer li_getrow
li_rowcount = dw_1.RowCount()
li_getrow = dw_1.GetRow()
ls_id = dw_1.object.p_line_id[dw_1.GetRow()]
If li_getrow=dw_1.RowCount() Then
ls_next_id = dw_1.GetItemString(1, 'p_line_id')
Else
ls_next_id = dw_1.GetItemString(dw_1.GetRow() + 1, 'p_line_id')
End If
Integer li_return
Integer li_i
li_return = messagebox("系统提示", "确定删除该记录吗?", question!, YesNo!, 2)
IF li_return <> 1 THEN return
DELETE FROM product_line
WHERE p_line_id = :ls_id;
IF SQLCA.SQLCode <> 0 THEN
messagebox("系统提示", "删除该记录失败!")
ROLLBACK;
ELSE
COMMIT;
dw_1.Retrieve(ls_next_id)
END IF
Top
16 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:34:10 得分 0
错误信息为:Invalid Datawindow Row/Column Specified at line 12 in clicked event....Top
17 楼CodeMagic(ErrorDetector)回复于 2004-01-03 22:42:21 得分 0
把
DELETE FROM product_line
WHERE p_line_id = :ls_id;
改为
dw_1.DeteleRow(li_getrow)Top
18 楼happyscaiyu(酸菜鱼)回复于 2004-01-03 22:49:42 得分 0
今晚是弄不出来了,头都大了.
无论如何还是谢谢你了,请明天再帮忙Top
19 楼CodeMagic(ErrorDetector)回复于 2004-01-03 23:29:06 得分 0
在删除部分这样写即可:
Int Row
If MessageBox('系统提示','确定删除该记录吗?',Question!,YesNo!,2)<>1 Then Return
Row=dw_2.GetRow()
dw_2.DeleteRow(Row)
If Row>dw_2.RowCount() Then
dw_2.ScrollToRow(1)
Else
dw_2.ScrollToRow(Row)
End IfTop
20 楼CodeMagic(ErrorDetector)回复于 2004-01-03 23:39:03 得分 0
1 删除后,使用检索条件是错误的。因为使用带参数的检索条件,那么检索出来的记录只有一条,这相当于这一次删除操作删除了N-1 条记录,这是不正确的。
2 在别的地方进行更新,例如在窗体关闭时进行Commit; ,不要在删除部分进行Commit; 。更新代码如下:
If dw_2.Update()<>1 Then
Rollback;
Else
Commit;
End IfTop
21 楼zhaotjh(我堕落了……)回复于 2004-01-03 23:55:08 得分 5
up哦Top
22 楼sinkiangscorpio(诸葛军师)回复于 2004-01-04 20:31:09 得分 5
你应该告诉我们出错在哪一行?Top
23 楼banalman(IT解放者)回复于 2004-01-04 20:52:28 得分 5
您删除记录通过后台来的,而数据窗口没有同步。
出现的错误提示,就是例如下面的情况就会出现错误。如果数据窗口只有一行,那么您的代码显然会出现错误。
另外您的这种做法有点怪,我想问问您究竟想实现怎样的功能。Top
24 楼dingzhaofeng(Alading)回复于 2004-01-04 21:28:15 得分 5
upTop




