批处理dbgrid多行选择数据出错。提示List index out of bounds (1)。(50)

  • 主题发起人 主题发起人 21968578
  • 开始时间 开始时间
2

21968578

Unregistered / Unconfirmed
GUEST, unregistred user!
处理dbgrid多行选择数据出错。提示List index out of bounds (1)。如果虚线中的内容不加入则正常,请诸位看看问题在哪? procedure TForm1.Button2Click(Sender: TObject); var i:integer; bookmarklist:tbookmarklist; bookmark:tbookmarkstr; s:string; begin bookmark:=DataModule2.ADOQuery1.Bookmark; try listbox1.Clear; bookmarklist:=tbookmarklist.Create(nil); bookmarklist:=dbgrid1.SelectedRows; for i:=0 to bookmarklist.Count-1 do begin DataModule2.ADOQuery1.Bookmark:=bookmarklist; s:=DataModule2.ADOQuery1.fieldbyname('bookname').AsString; listbox1.Items.Add(s); //这行用于测试能否得到选定行的数据//----------下面的数据处理语句加上则出错---------- DataModule2.ADOQuery1.CLose; DataModule2.ADOQuery1.SQL.Clear; DataModule2.ADOQuery1.SQL.Add('update book set bookmoney = 666 where bookname=:s'); DataModule2.ADOQuery1.execSQL;//---------- end; finally DataModule2.ADOQuery1.bookmark:=bookmark; end; end;
 
大哥,你的做法肯定会错了,你的for 循环出错在。加上你的语句 bookmarklist.Count-1 肯定会有变化的。你的做完后跳出循环,重新在执行。或者把你的数据压到队列或者堆栈里去作!
 
问题出在你用用一个ADOQUERY了,你的书签保存后,因为ADOQUEYR已经CLOSE了,所以书签已经不存在了。你UPDATE语句时换用另一个ADOQUERY就行了。procedure TForm1.Button2Click(Sender: TObject); var i:integer; bookmarklist:tbookmarklist; bookmark:tbookmarkstr; s:string; begin bookmark:=DataModule2.ADOQuery1.Bookmark; try listbox1.Clear; bookmarklist:=tbookmarklist.Create(nil); bookmarklist:=dbgrid1.SelectedRows; for i:=0 to bookmarklist.Count-1 do begin DataModule2.ADOQuery1.Bookmark:=bookmarklist; s:=DataModule2.ADOQuery1.fieldbyname('bookname').AsString; listbox1.Items.Add(s); //这行用于测试能否得到选定行的数据//----------下面的数据处理语句加上则出错---------- DataModule2.ADOQuery2.CLose; DataModule2.ADOQuery2.SQL.Clear; DataModule2.ADOQuery2.SQL.Add('update book set bookmoney = 666 where bookname=:s'); DataModule2.ADOQuery2.execSQL;//---------- end; finally DataModule2.ADOQuery1.bookmark:=bookmark; end; end;
 
书签问题,。。。
 
后退
顶部