Delphi 使用 ACCESS 和 ADO 连接的数据库连接
Delphi Database Connection Using ACCESS and ADO connections
好吧,基本上我已经在我的计算项目上工作了一段时间,我已经完成了 90% 的工作,但是我遇到了 Delphi 的问题,其中说我的数据库未连接/连接有问题,但是我已经尝试将信息写入屏幕,这表明我想要拾取的物品实际上被拾取了,所以失败是在输入物品时入数据库。然而,这不应该发生,因为系统已经从 table 中显示了数据库信息,并且用户可以在程序中从数据库 tables 物理地 select 东西但是当试图存储时信息返回到它刚刚中断的数据库中。我和我的计算机老师无法解决,任何帮助将不胜感激。
问题出现在新订单页面上。如果您想查看系统,则可以从此处下载 https://drive.google.com/folderview?id=0B_iRfwwM9QpHVXJnSkx4U1FjMlk&usp=sharing
procedure Tform1.btnSaveClick(Sender: TObject);
var orderID:integer;
count:integer;
begin
try
//save into the order table first
tblOrder.Open;
tblOrder.Insert;
tblOrder.FieldByName('CustomerID').value:= strtoint(cboCustomer.Text);
tblOrder.Close;
tblOrder.Open;
tblOrder.Last;
orderID:=tblOrder.FieldByName('OrderID').Value;
showmessage(inttostr(orderID));
for count := 1 to nextFree-1 do
begin
if itemOrdered[count,1]<>0 then
begin
tblOrderLine.Open;
tblOrderLine.AppendRecord([orderID, itemOrdered[count,1],itemOrdered[count,2]]);
end;
end;
showmessage('The order has been saved');
except
showmessage('There was a problem connecting to the database');
end;
end;
你做的太多了打开,做点什么,关闭,打开。不要那样做,因为几乎可以肯定这就是问题的原因。如果数据已经显示,则数据库已经打开。如果你想让它继续显示,数据库必须保持打开状态。
我也删除了你的try..except
。如果你愿意,你可以把它放回去;我个人喜欢允许异常发生,这样我就可以从异常消息中找出数据库操作失败的原因,而不是隐藏它并且不知道是什么原因导致它不起作用。
procedure Tform1.btnSaveClick(Sender: TObject);
var
orderID: integer;
count: integer;
begin
//save into the order table first
tblOrder.Insert;
tblOrder.FieldByName('CustomerID').value:= strtoint(cboCustomer.Text);
tblOrder.Post;
orderID:=tblOrder.FieldByName('OrderID').Value;
showmessage(inttostr(orderID));
for count := 1 to nextFree-1 do
begin
if itemOrdered[count, 1] <> 0 then
begin
tblOrderLine.AppendRecord([orderID, itemOrdered[count,1],itemOrdered[count,2]]);
tblOrderLine.Post;
end;
end;
showmessage('The order has been saved');
end;
好吧,基本上我已经在我的计算项目上工作了一段时间,我已经完成了 90% 的工作,但是我遇到了 Delphi 的问题,其中说我的数据库未连接/连接有问题,但是我已经尝试将信息写入屏幕,这表明我想要拾取的物品实际上被拾取了,所以失败是在输入物品时入数据库。然而,这不应该发生,因为系统已经从 table 中显示了数据库信息,并且用户可以在程序中从数据库 tables 物理地 select 东西但是当试图存储时信息返回到它刚刚中断的数据库中。我和我的计算机老师无法解决,任何帮助将不胜感激。
问题出现在新订单页面上。如果您想查看系统,则可以从此处下载 https://drive.google.com/folderview?id=0B_iRfwwM9QpHVXJnSkx4U1FjMlk&usp=sharing
procedure Tform1.btnSaveClick(Sender: TObject);
var orderID:integer;
count:integer;
begin
try
//save into the order table first
tblOrder.Open;
tblOrder.Insert;
tblOrder.FieldByName('CustomerID').value:= strtoint(cboCustomer.Text);
tblOrder.Close;
tblOrder.Open;
tblOrder.Last;
orderID:=tblOrder.FieldByName('OrderID').Value;
showmessage(inttostr(orderID));
for count := 1 to nextFree-1 do
begin
if itemOrdered[count,1]<>0 then
begin
tblOrderLine.Open;
tblOrderLine.AppendRecord([orderID, itemOrdered[count,1],itemOrdered[count,2]]);
end;
end;
showmessage('The order has been saved');
except
showmessage('There was a problem connecting to the database');
end;
end;
你做的太多了打开,做点什么,关闭,打开。不要那样做,因为几乎可以肯定这就是问题的原因。如果数据已经显示,则数据库已经打开。如果你想让它继续显示,数据库必须保持打开状态。
我也删除了你的try..except
。如果你愿意,你可以把它放回去;我个人喜欢允许异常发生,这样我就可以从异常消息中找出数据库操作失败的原因,而不是隐藏它并且不知道是什么原因导致它不起作用。
procedure Tform1.btnSaveClick(Sender: TObject);
var
orderID: integer;
count: integer;
begin
//save into the order table first
tblOrder.Insert;
tblOrder.FieldByName('CustomerID').value:= strtoint(cboCustomer.Text);
tblOrder.Post;
orderID:=tblOrder.FieldByName('OrderID').Value;
showmessage(inttostr(orderID));
for count := 1 to nextFree-1 do
begin
if itemOrdered[count, 1] <> 0 then
begin
tblOrderLine.AppendRecord([orderID, itemOrdered[count,1],itemOrdered[count,2]]);
tblOrderLine.Post;
end;
end;
showmessage('The order has been saved');
end;