database - 如何从 TDBAdvListView 中删除选定的数据库记录?

标签 database delphi delphi-xe2

我正在测试 ComponentAce 的绝对数据库

我的表单上有一个 TABSTable、TABSDatabase 和一个 TDataSource,数据显示在 TDBAdvListView 中,MultiSelect 和 RowSelect 为 True。我只有一张表。

当选择 TDBAdvListView 中的一个或多个项目时,我想让数据库删除选定的记录。

我在下面的代码中尝试过这种方式:

procedure TMain.DeleteEntry2Click(Sender: TObject);
var
  i: Integer;
begin
  with DBAdvListView1.DataSource.DataSet do
  begin
    for i := DBAdvListView1.Items.Count - 1 downto 0 do begin
    if DBAdvListView1.Items[i].Selected then
    begin
      DBAdvListView1.DataSource.DataSet.GotoBookmark(Pointer(DBAdvListView1.Items[i]));
      DBAdvListView1.DataSource.DataSet.Delete;
      end;
    end;
  end;
end;

这总是会导致错误消息:

Cannot retrieve record - Native error: 10026

我对数据库编程的经验很少,我做错了什么?

编辑:

我在数据库中添加了一个名为 ID 的新字段,该字段是从 0 开始的整数,希望我可以使用 Locate 方法引用它们,并尝试使用下面的代码。这不会产生错误,但只会删除 ListView 中的第一条记录,如果我选择多个记录,它将删除与所选记录不同的记录。

我的新代码:

procedure TMain.DeleteEntry2Click(Sender: TObject);
var
  i: Integer;
begin
  with DBAdvListView1.DataSource.DataSet do
  begin
    DBAdvListView1.BeginUpdate;
    First;
    for i := DBAdvListView1.Items.Count - 1 downto 0 do begin
    if DBAdvListView1.Items[i].Selected then
    begin
      if dbTable.Locate('ID',DBAdvListView1.Items[i].Selected,[]) then
      dbTable.Delete;
      Next;
      end;
    end;
  dbTable.Close;
  dbTable.Open;
  DBAdvListView1.EndUpdate;
  end;
end;

由于某些奇怪的原因,必须关闭并打开 dbTable 才能看到更改 - 我尝试过刷新但无济于事......

编辑:

//根据要求包含表结构...

  • ID 整数 0
  • 标题字符串 200
  • 作者字符串 100
  • 日期字符串 20
  • 位置字符串 60
  • 类别字符串 100
  • ISBN-13 字符串 20
  • ISBN-10 字符串 20

在 Absolute Database Utils 目录中,有一个 DatabaseManager.exe,我用它来创建实际的表,在这里我现在还设置了以下类型的主键:

类型 - 主要 姓名 - ID

索引字段:

列名称 - ID 不区分大小写 - False ASC-真 最大索引大小 - 20

最佳答案

如果你知道所有要删除的记录的主键,那么你可以使用一条SQL查询语句来一次性删除所有选定的记录 -

delete from table
where id in (1, 7, 15, 23, 45);

您必须手动构建此查询,即创建保存 ID 号的字符串。

关于database - 如何从 TDBAdvListView 中删除选定的数据库记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12939283/

相关文章:

delphi - 如何将RETRIEVAL_POINTERS_BUFFER结构翻译为Delphi?

delphi - 六角格计算

delphi - 把所有这些 if 语句写得更干净

mysql - 如何在 mysql 中创建 ALPHANUMERIC 约束?

sql - Insert if exists 只有在表中有记录时才有效

delphi - 以一定角度绘制文本

delphi - 如何使用Delphi检测Windows 10是否处于平板电脑模式?

mysql - MySQL 中的子查询如果存在则检索最大日期 NULL 如果不存在

java - 如何从注册号牌中获取车主信息?

delphi - 将自定义事件分配给对象 OnMouseEnter 事件