Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 6

AV при связывании IBQ и IBDb

04.04.2018, 09:41. Показов 1225. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро!
Столкнулся с проблемой связывания IBQuery и IBDatabase при динамической работе. Выбивает AV и причину понять не могу.
Код привел ниже (частично убрав всё, что не имеет отношение к ошибке) и проблемный участок со связыванием БД с IBQ.
Очевидно, что делаю, что - то не так, объясните, пожалуйста, в чем может быть дело?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  TDatabaseConnect = class
    private
      FIBDatabase: TIBDatabase;
    public
      constructor Create;
      destructor Destroy; override;
      function Connect: TStateOfConnect;
  end;
 
  TUserVerification = class
    private
      FDatabaseConnect: TDatabaseConnect;
    public
      constructor Create;
      destructor Destroy; override;
      function CheckUser(AUsername, AUserPassword: string): TStateOfUser;
  end;
 
  TAMSystem = class
    private
      FUser: TUserVerification;
    public
      constructor Create;
      destructor Destroy; override;
      function CheckAccessForApp(AUserName, AUserPassword: string; ATaskID: Integer): TStateOfAccessForApp;
  end;
 
  { реализация методов }
function TUserVerification.CheckUser(AUsername, AUserPassword: string): TStateOfUser;
  var
    IBQueryAuthorization: TIBQuery;
begin
  IBQueryAuthorization := TIBQuery.Create(nil);
  IBQueryAuthorization.Database := FDatabaseConnect.FIBDatabase; // отрабатывает без ошибок
 
  { что - то тут еще делаю }
end;
 
function TAMSystem.CheckAccessForApp(AUserName, AUserPassword: string;
  ATaskID: Integer): TStateOfAccessForApp;
var
  IBQueryTaskOnExecuter: TIBQuery;
begin
  IBQueryTaskOnExecuter := TIBQuery.Create(nil);
  IBQueryTaskOnExecuter.Database := FUser.FDatabaseConnect.FIBDatabase; // Access Violation вылетает 
 
  { что - то тут еще делаю }   
end;
 
 { вызов }
procedure TForm1.Button2Click(Sender: TObject);
  var
    AMSs: TAMSystem;
begin
  AMSs := TAMSystem.Create;
  AMSs.CheckAccessForApp('vic121', '123', 26);
  FreeAndNil(AMSs);
end;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.04.2018, 09:41
Ответы с готовыми решениями:

Ошибка при связывании БД
Не получается связать делпфи с БД Access 2003 в ConnectionString прописал все что нужно, пароль на бд не стоит, пользователь бд -Admin ...

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

Ошибка при связывании таблиц в Delphi 7
Есть 2-е таблицы в Access В Delphi 7 пытаюсь создать зависимость от Сотрудники, поля Код сотрудника до РобочееВремя Табельный...

10
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
04.04.2018, 10:49
Объект FUser где создается?
0
0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 6
04.04.2018, 10:51  [ТС]
Delphi
1
2
3
4
constructor TAMSystem.Create;
begin
  FUser := TUserVerification.Create;
end;
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
04.04.2018, 11:08
inherited добавь.
Объекты FDatabaseConnect и FIBDatabase тоже создаются?
0
0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 6
04.04.2018, 11:13  [ТС]
Inherited добавлял, не помогло. Насколько я понимаю его использование актуально для наследника.

Цепочка конструкторов:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
constructor TDatabaseConnect.Create;
begin
  FIBDatabase := TIBDatabase.Create(nil);
 
  {  ниже написаны настройки подключения к БД }
end;
 
constructor TUserVerification.Create;
begin
  FDatabaseConnect := TDatabaseConnect.Create;
end;
 
constructor TAMSystem.Create;
begin
  FUser := TUserVerification.Create;
end;
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
04.04.2018, 11:57
В любом случае inherited лишним не будет и позволит отсеять часть подозрений.
Других явных ошибок я в коде не вижу. Возможен вариант, что исключение возникает строчкой ниже или выше. Надо отладчиком смотреть что именно вызывает исключение.
0
0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 6
04.04.2018, 12:20  [ТС]
Посмотрите на изображение, указатель на объект в порядке, как я понимаю, но при переходе на следующую инструкцию выбивает AV сразу же. Пишу этот модуль под FMX, но ничего от этой платформы не использую, возможно, это даст наводку.
Миниатюры
AV при связывании IBQ и IBDb  
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
04.04.2018, 12:28
Лучший ответ Сообщение было отмечено Vic121 как решение

Решение

IBQueryTaskOnExecuter - локальная переменная, а значит в ней скорее всего мусор вместо 0 и проверка на существование объекта некорректна. Да и не имеет смысла в данном случае.
0
0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 6
04.04.2018, 12:32  [ТС]
Цитата Сообщение от FIL Посмотреть сообщение
существование объекта некорректна. Да и не имеет смысла в данном случае
Знаю, по привычки уже везде этот код пишу

Т.е. IBQueryTaskOnExecuter сделать полем класса?
В таком случае, почему тут отработало связывание нормально?
Delphi
1
2
3
4
5
6
7
8
9
function TUserVerification.CheckUser(AUsername, AUserPassword: string): TStateOfUser;
  var
    IBQueryAuthorization: TIBQuery;
begin
  IBQueryAuthorization := TIBQuery.Create(nil);
  IBQueryAuthorization.Database := FDatabaseConnect.FIBDatabase; // отрабатывает без ошибок
 
  { что - то тут еще делаю }
end;
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
04.04.2018, 12:49
Цитата Сообщение от Vic121 Посмотреть сообщение
почему тут отработало связывание нормально?
Еще раз: проверка существования объекта в коде на скрине некорректна - объекта нет, а проверка показывает, что есть и объект не создается, что и приводит к AV.
Просто создавай объект без проверки.
0
0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 6
04.04.2018, 13:30  [ТС]
Относительно проверки, дело не в ней, проверял и без неё. В реализации метода TUserVerification.CheckUser тоже присутствует этот код, только я его тут не стал показывать.

В любом случае спасибо за эту наводку
Цитата Сообщение от FIL Посмотреть сообщение
локальная переменная
, сделал как поле класса и все заработало, а потом решил оставить локальной, но по наводке
Цитата Сообщение от FIL Посмотреть сообщение
а значит в ней скорее всего мусор вместо 0
принудительно занилить
Delphi
1
IBQueryTaskOnExecuter.Database := nil
и тоже без ошибок. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2018, 13:30
Помогаю со студенческими работами здесь

Ошибка при связывании dateTimePicker и DataGridView
В Access есть таблица, в которой 4 столбца(ФИО, дата рождения, адрес, телефон) для заполнения. Я планировала записать дату рождения через...

Тип данных при позднем связывании
Меняю раннее связывание на позднее, вот такой код работает отлично: Dim g_WordApp As New Word.Application Dim Pic As Shape ...

Ошибка при связывании данных в Repeater
Доброго времени суток Снова обращаюсь к вам за помощью. Ни как не могу понять, почему возникает ошибка. Есть такой код разметки: ...

Формат вывода даты при связывании
переменная типа DateTime Связываю свой класс сначала с dataGrid. Там отображение 20.01.2010. Потом некоторые поля связываю для вывода...

Создание элемента на форме при позднем связывании
у меня имеется некий визуальный компонент написанный на c#, связываюсь с ним я с помощью позднего связывания, необходимо его создать на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »