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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2018, 14:33   #1
edmynt
Пользователь
 
Аватар для edmynt
 
Регистрация: 03.06.2009
Сообщений: 83
По умолчанию LoginPrompt не работает в ADO

Есть БД access в папке с прогой. Все выполняется в потоке.
LoginPrompt:=false; не работает, выдает ошибку, если убрать rty, то вообще тишина. База защищена паролем. На самом пользователе пароля нет. Офис 2007, но сохранил в режиме 2003, чтобы все работало.

Код:
function RegUser(command,UserID:string):string;
var
  s,namber,code:string;
  i:integer;
  connect:TADOConnection;
  table:TADOTable;
begin
  if MatchesMask(command,'/reg [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] *') then
    begin
      //выделяем телефон и код сотрудника
        i:=Pos(' ',command);
        s:=Copy(command,i+1,length(command));
        namber:=Copy(s,1,10);
        i:=pos(' ',s);
        code:=Copy(s,i,length(s));
        code:=stringReplace(code,' ','',[rfReplaceAll]);  //убрать пробелы из строки
      form1.Memo1.Lines.Add(UserID+' '+namber+' '+code);
      try
      form1.Memo1.Lines.Add('Вход в тру');
        //создаем компаненты для связи с БД
          CoInitialize(nil);
          connect:=TADOConnection.Create(nil);
          CoUnInitialize;
          connect.Connected:=false;

          connect.CommandTimeout:=30;
        //  connect.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=admin;Data Source=work_bd.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False;Jet OLEDB:Database Password=3444080';
          connect.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=admin;Data Source=work_bd.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=True;Jet OLEDB:Database Password=3444080';
          connect.LoginPrompt:=false;
          connect.ConnectOptions:=coConnectUnspecified;
          connect.ConnectionTimeout:=15;
          CoInitialize(nil);
          table:=TADOTable.Create(nil);
          CoUnInitialize;
          table.Connection:=connect;
          table.TableName:='man';
       //работаем с базой
        connect.Connected:=true;
       // connect.Open;
          form1.Memo1.Lines.Add('Подключились к базе');
        table.Active:=true;
        form1.Memo1.Lines.Add(IntToStr(length(code)));
        table.First;
        for I := 0 to table.RecordCount-1 do
          begin
            form1.Memo1.Lines.Add(table.FieldByName('Фамилия').AsString);
            if ((table.FieldByName('Телефон1').AsString=namber)or
                (table.FieldByName('Телефон2').AsString=namber))and
                (table.FieldByName('КодСотрудника').AsString=code) then
                begin
                  table.Edit;
                  table.FieldByName('UIN').AsString:=UserID;
                  table.FieldByName('Права').AsString:='3';
                  table.FieldByName('Авторизация').AsBoolean:=True;
                  table.Post;
                  s:='Вы успешно зарегистрированны';
                  break;
                end
                else
                begin
                  s:='Вы не найдены в базе';
                end;
               table.Next;
          end;

      except
        s:='Ошибка регистрации, попробуйте позднее';
      end;
      table.Active:=False;
   //   connect.Close;
      connect.Connected:=false;
      table.Destroy;
      connect.Destroy;
      Result:=s;
    end
    else
    begin
      Result:='Для регистрации в боте введите /reg телефон без 8 и код сотрудника'+
        '%0AПример: %0A/reg 9035678901 14715';
    end;

end;
Пробывал и ставить пароль на пользователя к безе и менять коннект стринг по разному, ничего не помогает. Если убрать LoginPrompt, выскакивает окошко с паролем, при этом все работает буз пароля, если нажать ОК. Понимаю, что все это из за потока, так как есть отдельная форма с доступом к бд и там все работает.
edmynt вне форума Ответить с цитированием
Старый 26.05.2018, 18:51   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Раз поток - может, не хватает synchronize?
Или CriticalSection
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 27.05.2018, 11:41   #3
edmynt
Пользователь
 
Аватар для edmynt
 
Регистрация: 03.06.2009
Сообщений: 83
По умолчанию

Нашел ошибку, рано закрыл CoUnInitialize
Код:
CoInitialize(nil);
....
CoUnInitialize;
edmynt вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает компонент ADO Connection Kn1fe Общие вопросы Delphi 1 04.02.2017 22:24
ADO.net + ACCESS не работает INSERT INTO Necare Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 24.05.2012 16:27
не работает relese версия проги и debug работает тока на моем компе D][mon C# (си шарп) 2 04.05.2012 20:21
Не работает связка access + ADO + VBA kksav Microsoft Office Access 3 19.05.2011 09:23
Zeosdbo, loginprompt goldragon БД в Delphi 6 16.05.2010 20:56