while not ADOTable_NoteBook.Eof do
begin
FindListBox.Items.AddObject(ADOTable_NoteBook.FieldByname('recTitle').AsString, pointer(ADOTable_NoteBook.FieldByname('recSerial').asinteger));//存储列表名和字段标识进LIXTBOX
ADOTable_NoteBook.Next ;
end;
删除时 定位记录 下面的操作我想不写出来你也会了吧?
这是写在你点LISTBOX时
ADOTable_NoteBook.Locate('recSerial',integer(FindListBox.Items.Objects[FindListBox.ItemIndex]),[])
这是在ListBox 的双击事件中
procedure ListBox1DblClick(Sender: TObject);
begin
table1.close;
table1.Open;
if MessageDlg('确定删除?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
if table1.Locate('fieldname',ListBox1.Items[ListBox1.ItemIndex],[])then
//fieldname 为字段名
table1.Delete;
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
end;
我用了happyloner兄的代码,
data.ADD.close;
data.ADD.Open;
if MessageDlg('确定删除?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
if data.ADD.Locate('名称',ListBox1.Items[ListBox1.ItemIndex],[])then
data.ADD.Delete;
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
可是却出现了如下的错误提示信息
list index out of bounds(-1).
这是什么原因吗大家帮我这个菜鸟吧
这里多谢了,回答后我再多给分给大家好不好?
我已经知道错在什么地方了!
这是因为data.ADD.Locate里要读取ListBox1.Items[ListBox1.ItemIndex],而如果此时
ListBox1里没有内容被选中的话,ListBox1.ItemIndex=-1,也因此会出错,因为无法读
取内容。
你在locate的时候必须在listbox1里要有内容被选中,这就可以了!要不你可以加一个
异常处理,也可以避免此错误!
我替你改了一下,你试试:
data.ADD.close;
data.ADD.Open;
if listbox1.itemindex>0 then
begin
if MessageDlg('确定删除?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
if data.ADD.Locate('名称',ListBox1.Items[ListBox1.ItemIndex],[])then
data.ADD.Delete;
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
end
else
if listbox1.itemindex=-1 then
showmessage('没有内容被选中');