Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 单击TListBox中的任何项目时,索引超出范围(-1)_Database_Sqlite_Delphi_Delphi Xe8 - Fatal编程技术网

Database 单击TListBox中的任何项目时,索引超出范围(-1)

Database 单击TListBox中的任何项目时,索引超出范围(-1),database,sqlite,delphi,delphi-xe8,Database,Sqlite,Delphi,Delphi Xe8,名为lboMtrlList的TListBox由数据库中的记录填充。运行应用程序时,数据正确显示。单击列表中的任何项目时,显示错误: 索引超出范围(-1) 尽管列表不是空的 下面是填充lboMtrlList的代码: procedure TfrmMakeQuote.FormCreate(Sender: TObject); begin con := TFDConnection.Create(nil); query := TFDQuery.Create(con); con.LoginPro

名为
lboMtrlList
TListBox
由数据库中的记录填充。运行应用程序时,数据正确显示。单击列表中的任何项目时,显示错误:

索引超出范围(-1)

尽管列表不是空的

下面是填充
lboMtrlList
的代码:

procedure TfrmMakeQuote.FormCreate(Sender: TObject);
 begin
  con := TFDConnection.Create(nil);
  query := TFDQuery.Create(con);
  con.LoginPrompt := false;
  con.Open('DriverID=SQLite;Database=C:\Users\katiee\Documents\Embarcadero\Studio\Projects\ProgramDatabase;');
  query.Connection := con;
  performQuery;

  query.SQL.Text :=
  'SELECT [Material Description] FROM MtrlDatabase ORDER BY MtrlID';
 try
  query.Open;
  lboMtrlList.Items.Clear;
  while not query.EOF do
   begin
    lboMtrlList.Items.Add(query.Fields[0].AsString);
    query.Next;
   end;
  finally
   query.Close;
 end;
 //ledtDesc.Height :=  81;
 //ledtNotes.Height :=  51;
 end;
我希望能够双击
lboomtrlist
中的一个项目,并将其移动到另一个名为
lboSelectedMtrl
TListBox
中。代码如下:

procedure TfrmMakeQuote.lboMtrlListDblClick(Sender: TObject);
 begin
  lboMtrlList.Items.Add(lboSelectedMtrl.Items.Strings[lboSelectedMtrl.ItemIndex]);
 end;
我希望能够双击
lboomtrlist
中的一个项目,并将其移动到另一个名为
lboSelectedMtrl
TListBox

你的代码做的恰恰相反。它正在尝试将项目从
lboSelectedMtrl
移动到
lboMtrlList
。由于在
lboSelectedMtrl
中未选择任何项(
lboSelectedMtrl.ItemIndex
为-1),因此您将获得边界错误

交换ListBox变量,并添加一些错误检查:

procedure TfrmMakeQuote.lboMtrlListDblClick(Sender: TObject);
var
  Idx: Integer;
begin
  Idx := lboMtrlList.ItemIndex;
  if Idx <> -1 then
    lboSelectedMtrl.Items.Add(lboMtrlList.Items.Strings[Idx]);
end;
过程TfrmMakeQuote.lboMtrlListDblClick(发送方:TObject);
变量
Idx:整数;
开始
Idx:=lboMtrlList.ItemIndex;
如果Idx-1那么
lboSelectedMtrl.Items.Add(lboMtrlList.Items.Strings[Idx]);
结束;
我希望能够双击
lboomtrlist
中的一个项目,并将其移动到另一个名为
lboSelectedMtrl
TListBox

你的代码做的恰恰相反。它正在尝试将项目从
lboSelectedMtrl
移动到
lboMtrlList
。由于在
lboSelectedMtrl
中未选择任何项(
lboSelectedMtrl.ItemIndex
为-1),因此您将获得边界错误

交换ListBox变量,并添加一些错误检查:

procedure TfrmMakeQuote.lboMtrlListDblClick(Sender: TObject);
var
  Idx: Integer;
begin
  Idx := lboMtrlList.ItemIndex;
  if Idx <> -1 then
    lboSelectedMtrl.Items.Add(lboMtrlList.Items.Strings[Idx]);
end;
过程TfrmMakeQuote.lboMtrlListDblClick(发送方:TObject);
变量
Idx:整数;
开始
Idx:=lboMtrlList.ItemIndex;
如果Idx-1那么
lboSelectedMtrl.Items.Add(lboMtrlList.Items.Strings[Idx]);
结束;

您确定列表框上没有任何其他事件吗?尝试使用:
lboMtrlList.Items.Add(lboSelectedMtrl.Items[lboSelectedMtrl.itemlindex])1)您不需要
字符串
,因为它是
的默认属性。只需使用
lboSelectedMtrl.Items[lboSelectedMtrl.ItemIndex]
。2) 永远不要假设
ItemIndex
是有效的。始终先测试:
如果lboSelectedMtrl.ItemIndex-1,则为
。如果列表框中没有项目并且双击了它,会发生什么情况?3) 您能否在不使用查询填充列表框的简单测试应用程序中重现此结果?如果是这样的话,你的帖子应该使用该代码。如果没有,那么进行更仔细的检查,看看您的查询是否返回任何行;如果没有,则列表框中没有项目。4)OnDoubleClick事件仅在双击控件时触发(顾名思义),因此如果单击项目时出现异常(如一次而非双击),则问题不在您发布的代码中;它将出现在
OnClick
事件中,或者出现在
OnChange
事件中。您确定列表框中没有其他事件吗?尝试使用:
lboMtrlList.Items.Add(lboSelectedMtrl.Items[lboSelectedMtrl.itemlindex])1)您不需要
字符串
,因为它是
的默认属性。只需使用
lboSelectedMtrl.Items[lboSelectedMtrl.ItemIndex]
。2) 永远不要假设
ItemIndex
是有效的。始终先测试:
如果lboSelectedMtrl.ItemIndex-1,则为
。如果列表框中没有项目并且双击了它,会发生什么情况?3) 您能否在不使用查询填充列表框的简单测试应用程序中重现此结果?如果是这样的话,你的帖子应该使用该代码。如果没有,那么进行更仔细的检查,看看您的查询是否返回任何行;如果没有,则列表框中没有项目。4)OnDoubleClick事件仅在双击控件时触发(顾名思义),因此如果单击项目时出现异常(如一次而非双击),则问题不在您发布的代码中;它将出现在
OnClick
事件中,或者出现在
OnChange
事件中。你完全正确,我已经交换了它们,并且它完全按照我想要的方式工作。很尴尬,我甚至没有注意到这是一个错误的方法。谢谢。你说得完全对,我换了它们,它完全按照我想要的那样工作。很尴尬,我甚至没有注意到这是一个错误的方法。谢谢