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