Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2022, 12:54   #1
ksmak
Новичок
Джуниор
 
Регистрация: 16.05.2022
Сообщений: 2
По умолчанию Deplhi FireDAC Firebird

Добрый день. Использую Delphi 10.4 Communty Edition, базу данных FireBird 3.0, компоненты FireDAC. Хочу написать процедуру для инициализации справочников из базы. Вот часть кода программы:

Код:

procedure TfrmMain.InitDictionaries;
var
  i: Integer;
begin
  for i := 0 to Length(xDic) - 1 do
  begin
     LoadDic(xDicFileName, xDic[i]);
  end;
end;

procedure TfrmMain.LoadDic(DicFileName: String; var xDic: TSDictionary);
var
  sql: String;
  _id: Int64;
  _name: String;
  _is_enabled: Integer;
begin
  sql := 'SELECT * FROM ' + xDic.Table + ' ORDER BY NAME';
  try
    qry.Close;
    qry.sql.Clear;
    qry.sql.Add(sql);
    qry.Open;
    while not qry.Eof do
    begin
        _id := qry.FieldByName('ID').AsLargeInt;
        //здесь возникает ошибка
        _name := qry.FieldByName('NAME').AsString;
        _is_enabled := qry.FieldByName('IS_ENABLE').AsInteger;
        xDic.Append(qry.FieldByName('ID').AsLargeInt, 
           qry.FieldByName('NAME').AsString, qry.FieldByName('IS_ENABLE').AsInteger);
      qry.Next;
    end;
  except
    on E: Exception do
      MessageDlg(E.ClassName + ': ' + E.Message, mtWarning, [mbOK], 0);
  end;
end;
Если я запускаю программу под пользователем SYSDBA то она без ошибок отрабатывает(в цикле обрабатывается около 100 таблиц). Но если запускаю под любым другим пользователем то где-то на 16-17 таблице (у всех все по разному) выдает непонятную ошибку access violation. Хотя доступ ко всем таблицам у на всех пользователях установлен. Ошибка возникает именно в процедуре LoadDic. Помогите пожалуйста, никак не могу найти причину ошибки. Заранее благодарю.
ksmak вне форума Ответить с цитированием
Старый 17.05.2022, 09:08   #2
ksmak
Новичок
Джуниор
 
Регистрация: 16.05.2022
Сообщений: 2
По умолчанию

Вроде решил проблему. Были неправильные параметры подключения TFDConnection:
Код:
     connection.Connected := False;
     connection.Params.Clear;
     connection.DriverName := 'FB';
     connection.Params.Add('Protocol=TCPIP');
     connection.Params.Add('Server=' + xUserSession.Server);
     connection.Params.Database := xUserSession.Database;
     connection.Params.Username := xUserSession.Username;
     connection.Params.Password := xUserSession.Password;
     connection.Params.Add('CharacterSet=' + xUserSession.CharacterSet);
     connection.Params.Add('SQLDialect=3');
     connection.Connected := True;
исправил на это:
Код:
    connection.Connected := False;
    connection.Params.Clear;
    connection.Params.Add('DriverID=FB');
    connection.Params.Add('Database=' + xUserSession.Server + ':' +
      xUserSession.Database);
    connection.Params.Add('User_Name=' + xUserSession.Username);
    connection.Params.Add('Password=' + xUserSession.Password);
    connection.Params.Add('CharacterSet=' + xUserSession.CharacterSet);
    connection.Params.Add('SQLDialect=3');
    connection.Connected := True;
После это ошибки перестали появляться.
ksmak вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FireDac компоненты linda88 Общие вопросы Delphi 9 15.09.2019 07:21
Где взять FireDAC? Ship_1 Компоненты Delphi 8 09.01.2018 10:13
выходные параметры хранимой процедуры (FireBird 2.5, FireDac) Dozent БД в Delphi 2 20.10.2014 07:25
JSON, Deplhi Varossa Работа с сетью в Delphi 0 10.09.2010 15:14