database - 写入 MS Access 数据库 (Delphi) 的问题

标签 database delphi ms-access

我正在尝试从 Delphi 向 Microsoft Access 数据库写入一些代码。我从 TStringGrid 获取数据。第一列有 ItemID,第二列有数量。我希望它遍历 TStringGrid 并将每一行保存为数据库中的重复行,并将订单 ID 保存在每一列上(每个订单的订单 ID 保持相同,因此不需要更改)。

运行时出现错误

"Project Heatmat.exe raised an exception class EVarientInvalidArgError with message 'Invalid Argument'. Process Stopped."

我不明白为什么它会给我这个错误,而且你可能会看到我还不太擅长编码。任何帮助将不胜感激!

谢谢。

procedure TCreateNewOrder.btnSaveClick(Sender: TObject);
var 
  intNumber, count : integer;
begin
  Count:= 0;
  if messagedlg ('Are you sure?', mtWarning, [mbyes, mbno], 0) = mryes then
  begin
    with HeatmatConnection.HeatmatDatabase do
    begin
      intNumber:= TBLOrder.RecordCount;
      TBLOrder.Append;

      TBLOrder['CustomerID']:= CompanyName.ItemIndex+1;
      TBLOrder['OrderID']:= intNumber +1;

      for count:= 1 to StringGrid1.RowCount-1 do
      begin
        TBLOrderedItem.Append;
        TBLOrderedItem['OrderID']:= intNumber+1;
        TBLOrderedItem['ItemID']:= StringGrid1.Cells[1, count];
        TBLOrderedItem['Quantity']:= StringGrid1.Cells[2, count];
        TBLOrderedItem.Post;
      end;
    end;
  end;
end;

最佳答案

TStringGrid 单元格是字符串。尝试将字符串直接分配给数字字段将引发异常。

因此,一个好的做法是通过 AsStringAsIntegerAsBoolean 等为数据库字段赋值...这将使正确的转换。

在您的代码中使用:

TBLOrderedItem.FieldByName('ItemID').AsString := StringGrid1.Cells[1, count];    

数量也是如此。

要分配一个整数值使用:

TBLOrderedItem.FieldByName('OrderID').AsInteger := intNumber + 1;

顺便说一句,你忘记了 TBLOrder.Post 即:

....
TBLOrder.Append;
TBLOrder.FieldByName('CustomerID').AsInteger := CompanyName.ItemIndex + 1;
TBLOrder.FieldByName('OrderID').AsInteger := intNumber + 1;
TBLOrder.Post;
...

最后,我还建议将 TBLOrder 重命名为 tblOrder,这样它的名称就不会暗示它是一个 Type

关于database - 写入 MS Access 数据库 (Delphi) 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9702443/

相关文章:

mysql - 导出表包含从 Access 到 csv 的 'date' 字段

php - 如何在 php 中生成唯一随机数

sql - INSERT INTO SELECT * FROM,同时将数据类型转换为外键

delphi - 在 TgraphicControl 中将 jpg 设置为位图

sql - 在运行时与用户选择的DSN的TSQLConnection

sql - 使用内连接来连接 3 个表?

sql-server - 存储与数据库无关的模式

mysql - UNION MySQL 的问题

mysql - 记录所有 mysql 查询

windows - 设置信息提示的位置