0

我在 Delphi 2005 中有一个程序,它在几个地方使用了一个TADOQuery组件 , 。CalQuery连接CalCon连接到 Access *.mdb 文件(在 Access 2003 中创建)。

它一直工作正常,直到今天突然停止工作。每当主单元尝试对CalQuery. 下面是一个代码示例,但这发生在同一个表单中。它似乎没有发生在副本上CalQueryCalCon它连接到其他单元中的同一数据库(我看不出我在这个单元和其他单元之间所做的任何不同)。

          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但这没有帮助。数据库文件似乎很好。

这不是我以前遇到过的事情,我在其他地方也看不到任何类似的问题,所以我不确定接下来要检查什么。

4

0 回答 0