|
Вопрос # 4 924/ вопрос решён / |
|
Приветствую, уважаемые эксперты!
Есть база данных Firebird. Туда каждые 3 минуты складываются данные.
Пишу программу визуализации данных в виде графика. Возникла такая проблема - при первом обращении процедура TForm1.Button3Click отрабатывает нормально, а если на форме еще раз кликнуть эту же кнопку - вызывается ошибка ---------------------------
Chaz
---------------------------
Access violation at address 004A6621 in module 'CHAZ.exe'. Read of address 00000055.
---------------------------
Она выходит при пошаговой отладке на строчке :
Active:=True;
Кто может подсказать - где моя ошибка...?
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- procedure TForm1.Button3Click(Sender: TObject);
-
- var
-
-
-
-
-
-
-
-
-
-
-
- begin
-
-
- IBDataBase1.Connected:=true;
- IBTransaction1.Active:=True;
- IBQuery1.Database:=IBDataBase1;
- IBQuery1.Transaction:=IBTransaction1;
-
- SSQL:=TStringList.Create;
- SSQL.Clear;
-
-
- KolKanGr:=ExecSQL(SSQL);
- SSQL.Free;
-
- if KolKanGr=0 then
- Begin
-
- Button3.Enabled:=False;
- Exit;
- End
- else Label3.Caption:='';
-
- if KolKanGr=-1 then
- begin
-
- end;
-
-
-
-
- if Param30=1 then KolPoint:=49 else KolPoint:=481;
-
-
-
-
-
- with Form1.IBQuery1 do
- begin
- RecNo:=i1;
- MasKn[i1].MBNO:=FieldValues['MbNo'];
- MasKn[i1].PTNO:=FieldValues['PtNo'];
- MasKn[i1].NameKan:=FieldValues['Name'];
- MasKn[i1].sign:=FieldValues['SIGN'];
- end;
-
- case Param30 of
- 1:begin
-
- end;
- 2:begin
-
- end;
- end;
-
-
-
- with Form1.IBQuery1 do
- begin
-
-
- SSql.Clear;
- SSql.Add('SELECT D.DATADATE, sum(D.VALUE0) FROM GRITEMS GI INNER JOIN DATAPW D');
- SSql.Add(' ON (GI.CSNO = D.CSNO) AND (GI.SSNO = D.SSNO) AND (GI.MBNO = D.MBNO) AND (GI.PTNO
= D.PTNO)');
- SSql.Add(Format('WHERE (D.PARAM =%2d)',[PARAM30]));
- SSql.Add(Format('AND (GI.GRNO =%2d)',[GRUPNOMER]));
- SSql.Add(Format('AND (D.DATADATE>"%s")AND(D.DATADATE<="%s") group
BY D.DATADATE'
- ,[DateTimeToStr(AVTime[1]),DateTimeToStr(AVTime[2])]));
-
-
- Active:=False;
- SQL:=SSql;
-
- FetchAll;
- First;
- i:=0;
- while not Eof do
- begin
- Inc(i);
- MasValue[i]:=Fields[1].AsVariant;
- Next; if Eof then break;
- end;
-
- SSQL.Free;
-
- End;
-
- ValueSum:=0;
- if Param30=1 then Koef:=0.5 else Koef:=0.05;
-
-
- begin
- ValueSum:=ValueSum+MasValue[i]*Koef;
-
- Series1.AddXY(i,ValueSum,'',clRed);
- end;
- Series2.AddXY(0,0,'',clBlue);
- Series2.AddXY(KolPoint,POTREBLENIE,'',clBlue);
-
-
- IBDataBase1.Connected:=false;
-
- SSQL.Clear;
- Button3.Enabled:=False;
- IBTransaction1.Active:=False;
-
- end;
 |
Вопрос задал: vitalik32 (статус: Посетитель)
Вопрос отправлен: 17 января 2011, 09:04
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 17 января 2011, 09:44; участников в обсуждении: 2.
|
min@y™ (статус: Доктор наук), 17 января 2011, 09:26 [#1]:
Active:=False;
SQL:=SSql; // Куда указывает SSql, если ты в строке 28 вызываешь его декструктор?
Active:=True; // - Вот на этой строчке при втором вызове процедуры выходит ошибка.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
vitalik32 (статус: Посетитель), 17 января 2011, 09:42 [#2]:
Но в первый вызов код работает же...
|
|
vitalik32 (статус: Посетитель), 17 января 2011, 09:44 [#3]:
Заремил эту строчку - теперь прога работает .... Большое спасибо Вам!
|
17 января 2011, 09:45: Статус вопроса изменён на решённый (изменил автор вопроса — vitalik32)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|