Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.10.2006, 23:05
Аватар для CHARLIE
CHARLIE CHARLIE вне форума
Прохожий
 
Регистрация: 10.10.2006
Сообщения: 3
Репутация: 10
По умолчанию вопрос об ошибке

есть БД, обращаюсь к ней, через датамодуль..SQL запрос, работаю
закрываю очищаю запрос,
а при выходе и з программы выводится ошибка

access violation ..ну и так далее..именно по моему запросу, почему такое может быть? как поправить?
Ответить с цитированием
  #2  
Старый 11.10.2006, 06:19
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Код в студию
Ответить с цитированием
  #3  
Старый 11.10.2006, 22:18
Аватар для CHARLIE
CHARLIE CHARLIE вне форума
Прохожий
 
Регистрация: 10.10.2006
Сообщения: 3
Репутация: 10
По умолчанию

код следующий
dm.qry.sql.clear;
dm.qry.sql.add('select * from {условия}')
dm.qry.sql.active:=true;

работаю с этим модулем...
потом обнуляю его
и в конце он пишит access violation
может быть есть где почитать про эту ошибку?
Ответить с цитированием
  #4  
Старый 12.10.2006, 05:22
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Ну если почитать, то вот:
Цитата:
Ошибка "Access Violation" возникает, когда идёт обращение к памяти к которой обращение запрещено. Это возможно во многих случаях, но наиболее типичные ситуации я попытаюсь перечислить:

1) Обращение к не созданному объекту.
Код:
var e:TEdit; 
begin 
  e.text:='Hello world!'; 
end; 
В данном случае объект e ещё не создан и идёт обращение к памяти, которая ещё не выделена.


2) Обращение к уже разрушенному объекту:
Код:
var e:TEdit; 
begin 
  ... 
  e.free; 
  ... 
  e.text:='Hello world'; 
end; 
Тут есть хитрость, допустим вы хотите проверить есть ли объект и модернизируете код:
Код:
if e<>nil then e.text:='Hello world!'; 
или
Код:
if assigned(e) then  e.text:='Hello world!'; 
Особенно часто приходится такое делать когда
надо уничтожить объект:
Код:
if e<>nil then e.free; 
Так вот - такой код может быть источником ошибки, так как метод Free автоматически не устанавливает указатель в Nil. Обязательно после каждого Free используйте установление указателя в nil:
Код:
e.free; 
e:=nil; 
3) При выходе за границы динамического массива обычно генерится ошибка "Index out of bound", но возможно и возникновение Access Violation, особенно когда не стоят опции компилляции для проверки границ массивов. Эта ошибка может быть очень сложна в отлаживании - дело в том что допустим у вас есть массив а длиной в 10 элементов, в пишете:
Код:
a[20]:=something; 
И эта строка может пройти как и надо, без всяких проблем, но её выполнение повредит какой-то другой код, причём каждый раз другой! Теперь самая безобидная операция типа i:=10 может вдруг внезапно дать Access Violation.

3) На форме на onCreate вызывается что-то с других форм - эти другие формы на этот момент еще не созданы

4) На форме на onDestroy вызывается что-то с других форм - эти другие формы на этот момент уже разрушены
Взято из DRKB
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter