Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
Mysql 将所有临时(别名)列结果添加到TMemo_Mysql_Delphi - Fatal编程技术网

Mysql 将所有临时(别名)列结果添加到TMemo

Mysql 将所有临时(别名)列结果添加到TMemo,mysql,delphi,Mysql,Delphi,目标是从DBGrid中选择第一个条目,它为我提供id_employee值,运行SQL查询并接收包含结果的临时列别名 到目前为止,这是可行的。通过在MySQL Workbench中使用查询确认,它将返回该表中具有特定id的所有行的列total的所有值 现在,我需要它复制临时别名结果列中的所有单个结果,并将它们粘贴到TMemo中。完成后,它应该转到DBGrid中的下一条记录,并重复整个过程 我该怎么做?我尝试过使用另一个for循环并遍历Result字段,但它不起作用 MySQL工作台中使用上述查询的

目标是从DBGrid中选择第一个条目,它为我提供id_employee值,运行SQL查询并接收包含结果的临时列别名

到目前为止,这是可行的。通过在MySQL Workbench中使用查询确认,它将返回该表中具有特定id的所有行的列total的所有值

现在,我需要它复制临时别名结果列中的所有单个结果,并将它们粘贴到TMemo中。完成后,它应该转到DBGrid中的下一条记录,并重复整个过程

我该怎么做?我尝试过使用另一个for循环并遍历Result字段,但它不起作用

MySQL工作台中使用上述查询的结果图片:-这些需要输入到TMemo中

我使用MyDAC组件作为查询组件

编辑:

但它不起作用。对于我遇到的每个id_员工,只添加第一个结果值。同一id_员工的潜在其他人不会添加到备忘录中。我需要将每个id_员工的所有结果值添加到备忘录中

这是更改为查询后在备忘录中的外观。打开并运行上面的代码:

它们都是正确的,因为它们中的每一个都只代表每个id_员工的结果中的第一个值。还有更多。该表包含多个行,每个id_员工的总值不同。在Workbench中,当我对一个id_员工运行查询时,它们成功地显示出来,但在备忘录中,由于循环,只有第一个被添加,而其余的没有

通过比较这两张图片,您可以看到-35是它为id_employee=1找到的第一个值,并将其添加到Memo 2nd picture-1st值中。但它完全忽略了 接下来的5个值是pic 1,并继续添加它为第二个id_employee id_employee=2找到的第一个值,即20 pic 2-第二个值,然后忽略id_employee=2的其他值,同时在第三个移动,添加第一个值,依此类推


我很困惑

遍历数据集行的正确方法是while not dataset.Eof循环

如果查询在执行时返回多行,则还需要该查询的循环

begin
  DBGrid4.DataSource.DataSet.First;
  while not DBGrid4.DataSource.DataSet.Eof do
  begin
    lunaQuery.SQL.Clear;
    lunaQuery.SQL.Text := 'SELECT total AS Result FROM table1 WHERE 
    id_employee=:id_employee AND Month(date)=:month AND Year(date)=:year';
    lunaQuery.Params.ParamByName('id_employee').AsInteger :=  DBGrid4.DataSource.DataSet.FieldByName('id').AsInteger;
    lunaQuery.Params.ParamByName('month').AsString := ComboBox3.Text;
    lunaQuery.Params.ParamByName('year').AsString := Edit3.Text;
    lunaQuery.Open;

    while not LunaQuery.Eof do
    begin
      Memo1.Lines.Add(lunaQuery.FieldByName('Result').AsString);
      lunaQuery.Next;
    end;
    lunaQuery.Close;
    DBGrid4.DataSource.DataSet.Next;
  end;
end;

Memo1.Lines.Add有什么问题?lunaQuery.ExecSQL用于UPDATE/INSERT/DELETE语句。使用lunaQuery.Open或lunaQuery.Active:=True浏览SELECT语句的记录结果。除了错误使用ExecSQL(用于INSERT、UPDATE或DELETE等操作,而不是使用@MartynA指出的Open返回任何结果集)之外,您发布的代码没有任何问题。只要解决这个问题,并取消对Memo1.Lines.Add行的注释。@whosrady-Oops,谢谢你指出它。完全错过了。现在更改并更新了我的问题,因为它仍然不起作用。这就是我的想法。请看下面我的答案。感谢上帝。最后这让我快发疯了。对其进行测试并按预期工作。我感谢您的帮助,谢谢您,并为我的含糊不清表示歉意。我很高兴@KenWhite向您展示了正确的方法。带回家的消息之一是永远不要在dataset上使用for循环-而是使用while而不是dataset.eof。
begin
  DBGrid4.DataSource.DataSet.First;
  while not DBGrid4.DataSource.DataSet.Eof do
  begin
    lunaQuery.SQL.Clear;
    lunaQuery.SQL.Text := 'SELECT total AS Result FROM table1 WHERE 
    id_employee=:id_employee AND Month(date)=:month AND Year(date)=:year';
    lunaQuery.Params.ParamByName('id_employee').AsInteger :=  DBGrid4.DataSource.DataSet.FieldByName('id').AsInteger;
    lunaQuery.Params.ParamByName('month').AsString := ComboBox3.Text;
    lunaQuery.Params.ParamByName('year').AsString := Edit3.Text;
    lunaQuery.Open;

    while not LunaQuery.Eof do
    begin
      Memo1.Lines.Add(lunaQuery.FieldByName('Result').AsString);
      lunaQuery.Next;
    end;
    lunaQuery.Close;
    DBGrid4.DataSource.DataSet.Next;
  end;
end;