问题描述
所以我在我的程序中创建了一个按钮,该按钮应该清除数据库中的所有表,但是在运行时单击该按钮时出现错误。如何消除该错误?
我正在使用的代码:
ClearDB 按钮的代码
procedure TfrmEntry.bmbClearDBClick(Sender: TObject);
var
i:integer;
begin
i:=MessageDlg('Are you sure you want to clear the Racers database? (all current data in the database will be lost.)',mtWarning,[mbOK,mbCancel],0);
if i = mrOk then
begin
//clears entire database
with dmRacers do
begin
tbl1660.DeleteRecords(arall);
tblXKarts.DeleteRecords(arall);
tblTwoPointOne.DeleteRecords(arall);
tblMidB.DeleteRecords(arall);
tblMidA.DeleteRecords(arall);
tblLateModel.DeleteRecords(arall);
tblSprints.DeleteRecords(arall);
tblV8.DeleteRecords(arall);
tblHeavyMetals.DeleteRecords(arall);
tblHotrods.DeleteRecords(arall);
tblPinkrods.DeleteRecords(arall);
tblStockrods.DeleteRecords(arall);
tblMinis.DeleteRecords(arall);
tblDevelopment.DeleteRecords(arall);
end;
end
else
begin
i:=MessageDlg('Clear aborted',mtinformation,[mbOk],0);
end;
end;
输入按钮代码
procedure TfrmEntry.btnEntryClick(Sender: TObject);
var
sRacerName,sLicence,sCarNum:string;
iNum:integer;
begin
//saves input (works perfectly)
sCarNum:=edtCarNumber.Text;
sRacerName:=edtRacerName.Text;
sLicence:=edtLicenseNum.Text;
//ifs for saving input to the db
if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = '1660s' then
begin
with dmRacers do
begin
tbl1660.insert;
tbl1660['Car Number']:=sCarNum;
tbl1660['Racer Name']:=sRacerName;
tbl1660['Licence']:=sLicence;
tbl1660.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = '2.1s' then
begin
with dmRacers do
begin
tblTwoPointOne.insert;
tblTwoPointOne['Car Number']:=sCarNum;
tblTwoPointOne['Racer Name']:=sRacerName;
tblTwoPointOne['Licence']:=sLicence;
tblTwoPointOne.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Crosskarts' then
begin
with dmRacers do
begin
tblXKarts.insert;
tblXKarts['Car Number']:=sCarNum;
tblXKarts['Racer Name']:=sRacerName;
tblXKarts['Licence']:=sLicence;
tblXKarts.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Heavy Metals' then
begin
with dmRacers do
begin
tblHeavyMetals.insert;
tblHeavyMetals['Car Number']:=sCarNum;
tblHeavyMetals['Racer Name']:=sRacerName;
tblHeavyMetals['Licence']:=sLicence;
tblHeavyMetals.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Hotrods' then
begin
with dmRacers do
begin
tblHotrods.insert;
tblHotrods['Car Number']:=sCarNum;
tblHotrods['Racer Name']:=sRacerName;
tblHotrods['Licence']:=sLicence;
tblHotrods.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Midgets A' then
begin
with dmRacers do
begin
tblMidA.insert;
tblMidA['Car Number']:=sCarNum;
tblMidA['Racer Name']:=sRacerName;
tblMidA['Licence']:=sLicence;
tblMidA.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Midgets B' then
begin
with dmRacers do
begin
tblMidB.insert;
tblMidB['Car Number']:=sCarNum;
tblMidB['Racer Name']:=sRacerName;
tblMidB['Licence']:=sLicence;
tblMidB.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Minis' then
begin
with dmRacers do
begin
tblMinis.insert;
tblMinis['Car Number']:=sCarNum;
tblMinis['Racer Name']:=sRacerName;
tblMinis['Licence']:=sLicence;
tblMinis.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Pinkrods' then
begin
with dmRacers do
begin
tblPinkrods.insert;
tblPinkrods['Car Number']:=sCarNum;
tblPinkrods['Racer Name']:=sRacerName;
tblPinkrods['Licence']:=sLicence;
tblPinkrods.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Sprints' then
begin
with dmRacers do
begin
tblSprints.insert;
tblSprints['Car Number']:=sCarNum;
tblSprints['Racer Name']:=sRacerName;
tblSprints['Licence']:=sLicence;
tblSprints.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Stockrods' then
begin
with dmRacers do
begin
tblStockrods.insert;
tblStockrods['Car Number']:=sCarNum;
tblStockrods['Racer Name']:=sRacerName;
tblStockrods['Licence']:=sLicence;
tblStockrods.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'SWD Development' then
begin
with dmRacers do
begin
tblDevelopment.insert;
tblDevelopment['Car Number']:=sCarNum;
tblDevelopment['Racer Name']:=sRacerName;
tblDevelopment['Licence']:=sLicence;
tblDevelopment.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'V8s' then
begin
with dmRacers do
begin
tblV8.insert;
tblV8['Car Number']:=sCarNum;
tblV8['Racer Name']:=sRacerName;
tblV8['Licence']:=sLicence;
tblV8.Post;
end;
end
else if cbxGridSelect.Items[cbxGridSelect.ItemIndex] = 'Late Models' then
begin
with dmRacers do
begin
tblLateModel.insert;
tblLateModel['Car Number']:=sCarNum;
tblLateModel['Racer Name']:=sRacerName;
tblLateModel['Licence']:=sLicence;
tblLateModel.Post;
end;
end;
end;
数据模块的代码
const
scConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%pathtomdb%racers.mdb;Mode=ReadWrite;Persist Security Info=False;';
procedure TdmRacers.DataModuleCreate(Sender: TObject);
var
path:string;
begin
path:=ExtractFilePath(ParamStr(0));
conToDB.ConnectionString := StringReplace(scConnectionString,'%pathtomdb%',path,[]);
conToDB.Connected:=True;
tbl1660.Active := True;
tblXKarts.Active := True;
tblTwoPointOne.Active := True;
tblMidB.Active := True;
tblMidA.Active := True;
tblLateModel.Active := True;
tblSprints.Active := True;
tblV8.Active := True;
tblHeavyMetals.Active := True;
tblHotrods.Active := True;
tblPinkrods.Active := True;
tblStockrods.Active := True;
tblMinis.Active := True;
tblDevelopment.Active := True;
end;
我收到的错误:
预先感谢所有帮助!
亲切的问候
PrimeBeat
解决方法
来自 borland.public.delphi.database.ado 中 2005 年的一个帖子:
http://www.devsuperpage.com/search/Articles.asp?ArtID=877427
问题:
我正在尝试从 TADOTable 中删除所有记录。我是 使用以下代码行:
tblInvoices.DeleteRecords(arAll);
但它给出了一个错误信息:“此操作是不允许的 上下文”。
知道是什么原因造成的吗?
原因:
不幸的是,Microsoft 从未为 DeleteRecords 实现该选项。 您将需要使用删除查询。
解决方案:
不要使用 DeleteRecords,而是使用如下例程:
CabInfo.Active := true;
MyCmd.CommandText := 'Delete * from CabInfo';
MyCmd.Execute;
CabInfo.Active := false;
其中 CabInfo 是您的表名。