delphi - 添加到数据库不起作用

标签 delphi ado

我进行查询以查看 Assets 编号是否在数据库中,它返回 false,因此我想将数据添加到数据库中,我没有收到任何错误。但它从不添加数据。

  //check if its there, if so update it, if not add it.
if fdeptlayout.adoquery1.IsEmpty then
begin
  showmessage('adding new machine to db');
  with Fdeptlayout.ADOQuery1 do
    begin
    sql.Clear;
    sql.BeginUpdate;
    sql.add('INSERT INTO MList ');
    sql.Add('(Zone,Dept,Number,Name,Asset,IsPanel');
    sql.Add(',FinalLocation,Left,Top) ');
    sql.Add('VALUES ( :Zone, :Dept, :Number, :Name, :Asset, :IsPanel');
    sql.Add(', :FinalLocation, :Left, :Top)');
    sql.EndUpdate;
    Parameters.ParamByName('Zone').Value  := CZone;
    Parameters.ParamByName('Dept').Value  := CDept;
    Parameters.ParamByName('Number').Value := CNumber;
    Parameters.ParamByName('Name').Value  := CName;
    Parameters.ParamByName('Asset').Value := CAsset;
    Parameters.ParamByName('IsPanel').Value := CIsPanel;
    Parameters.ParamByName('FinalLocation').Value := CFinalLocation;
    Parameters.ParamByName('Left').Value := CLeft;
    Parameters.ParamByName('Top').Value := CTop;
    open;

最佳答案

看来您使用的是 adoquery1用于获取数据并发送命令。

你不能那样做。

使用追加

您可以将数据直接附加到打开的数据集

with Fdeptlayout.ADOQuery1 do
begin
  // append a new row
  Append; 

  // set data to all fields
  FieldByName('Zone').Value := CZone;
  FieldByName('Dept').Value  := CDept;
  FieldByName('Number').Value := CNumber;
  FieldByName('Name').Value  := CName;
  FieldByName('Asset').Value := CAsset;
  FieldByName('IsPanel').Value := CIsPanel;
  FieldByName('FinalLocation').Value := CFinalLocation;
  FieldByName('Left').Value := CLeft;
  FieldByName('Top').Value := CTop;

  // post the new added data to the dataset
  Post; 
end;

使用 SQL 命令

您必须使用单独的查询实例来执行 sql 命令
with TADOQuery.Create( nil ) do
try
  // Prepare
  Connection := Fdeptlayout.ADOQuery1.Connection;

  sql.add('INSERT INTO MList ');
  sql.Add('(Zone,Dept,Number,Name,Asset,IsPanel');
  sql.Add(',FinalLocation,Left,Top) ');
  sql.Add('VALUES ( :Zone, :Dept, :Number, :Name, :Asset, :IsPanel');
  sql.Add(', :FinalLocation, :Left, :Top)');

  Parameters.ParamByName('Zone').Value  := CZone;
  Parameters.ParamByName('Dept').Value  := CDept;
  Parameters.ParamByName('Number').Value := CNumber;
  Parameters.ParamByName('Name').Value  := CName;
  Parameters.ParamByName('Asset').Value := CAsset;
  Parameters.ParamByName('IsPanel').Value := CIsPanel;
  Parameters.ParamByName('FinalLocation').Value := CFinalLocation;
  Parameters.ParamByName('Left').Value := CLeft;
  Parameters.ParamByName('Top').Value := CTop;

  // Execute the statement
  ExecSQL;

finally
  Free;
end;

// Update the data
Fdeptlayout.ADOQuery1.Refresh;
// or even better
Fdeptlayout.ADOQuery1.Requery;

关于delphi - 添加到数据库不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15241953/

相关文章:

mysql - 如何提高记录集处理的性能

Delphi:数学表达式

arrays - 如何使用Delphi填充结构/记录数组?

arrays - 使用枚举类型访问动态数组

sql - 在插入时将 SQL 标识返回到 VB 变量

excel - 无法更新 EXCEL VBA 中的 ADO 记录集

delphi - ADO Error异常处理?

delphi - 如何获取TSpeedButton的双击事件?

delphi - 拦截TAB键并抑制它

azure - 如何将参数从 Azure DevOps 管道传递到 Bicep 模板