我在 Delphi 2005 中有一个程序,它在几个地方使用了一个TADOQuery
组件 , 。CalQuery
连接CalCon
连接到 Access *.mdb 文件(在 Access 2003 中创建)。
它一直工作正常,直到今天突然停止工作。每当主单元尝试对CalQuery
. 下面是一个代码示例,但这发生在同一个表单中。它似乎没有发生在副本上CalQuery
,CalCon
它连接到其他单元中的同一数据库(我看不出我在这个单元和其他单元之间所做的任何不同)。
if (PatientGrid.RowCount = 2) and (PatientGrid.ColCount = 1) then
begin
if DayGrid.Cells[7, DayGrid.Row] = 'New' then
begin
if DayGrid.Cells[5, DayGrid.Row] = '' then
begin
CalCon.Open();
CalQuery.SQL.Clear;
CalQuery.SQL.Text := 'SELECT ClinicID FROM Clinic WHERE RoomNo = '+DayGrid.Cells[0, DayGrid.Row]+' '+
'AND [Date] = '+OldDateForSQL(DayViewDP.Date);
CalQuery.Open;
CalQuery.First;
ClinicID := CalQuery.FieldByName('ClinicID').Value;
CalQuery.Close;
CalQuery.SQL.Clear;
CalQuery.SQL.Text := 'SELECT SlotID FROM Slot WHERE ClinicID = '+IntToStr(ClinicID)+' '+
'AND AppTime = CStr('+QuotedStr(DayGrid.Cells[8, DayGrid.Row])+')';
CalQuery.Open;
CalQuery.First;
SlotID := CalQuery.FieldByName('SlotID').Value;
CalQuery.Close;
CalQuery.SQL.Clear;
CalQuery.SQL.Text := 'INSERT INTO Appointment (SlotID, ClinID, HospNo, Name) '+
'VALUES ('+IntToStr(SlotID)+', '+IntToStr(ClinicID)+', '+QuotedStr('XXXXXX')+
', '+QuotedStr(PatientGrid.Cells[0,1])+')';
CalQuery.ExecSQL;
CalCon.Close;
RefreshDayGrid(Sender);
end else ShowMessage('A patient is already booked into that slot.');
end else ShowMessage('You can only book new slots manually. Please book follow-ups from PiMS.');
end;
(所有网格都是 StringGrids,而不是 DBGrids。)
访问冲突发生在CalQuery.SQL.Clear;
。如果我将此行注释掉,它会在下一个崩溃。正如我所说,代码一直运行到现在,一切似乎都已正确声明。确切的错误是:
模块“PainCal.exe”中地址 004A91D4 的访问冲突。读取地址 00000260。
我一直在研究CalCon
连接的数据库,但只有表(我必须清除所有数据并希望重置 autonum 字段,所以我删除并重新创建了几个表)。我尝试重建连接字符串,CalCon
但这没有帮助。数据库文件似乎很好。
这不是我以前遇到过的事情,我在其他地方也看不到任何类似的问题,所以我不确定接下来要检查什么。