gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:55:07 25 4
gpt4 key购买 nike

我正在尝试从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com