Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Пароль на таблице


Автор: useless 1.12.2004, 07:44
Есть некий алиас BDE, в нём есть некая Paradox-таблица. Делаем:
Код
........
var
  table: TTable;
begin
  table := TTable.Create(nil);
  table.DatabaseName := 'alias';
  table.TableName := 'table.db';
  table.Active := true;
.......................
end;
и вот в строке table.Active := true; вылетает окошко и просит ввести пароль. Пароль известен. Где в программе нужно его ввести, чтобы во время работы не вылетало окошко.

Автор: Dimich 1.12.2004, 08:51
Вот при использовании ADO в ADOConnection есть ConnectionString и LoginPrompt, при использовании ODAC в OraSession есть ConnectString и ConnectPrompt а вот для BDE затрудняюсь ответить. Однако может я натолкнул Вас на путь решения?

Автор: useless 1.12.2004, 09:30
Dimich, тогда если не трудно пример ADO ConnectionString для подключения к BDE.

Автор: useless 1.12.2004, 10:26
ConnectionString для ADO я нашёл, но так долго подключается, что я отказываюсь использовать ADO для доступа к Paradox.

Посему вопрос в первом посте остаётся открытым: Где в программе вводить пароль?

Автор: Vit 1.12.2004, 16:45
Компонент - Database

Автор: useless 2.12.2004, 10:47
ОК. Используем TDatabase.
Вот мой код:
Код
..........................
var
       db: TDatabase;
       table: TTable;
       str: string;
begin
    db := TDatabase.Create(nil);
    db.AliasName := 'TOOLS';
    db.DatabaseName := 'tools';
    db.LoginPrompt := false;
    db.Params.Add('PASSWORD=syskma');
    db.Connected := true;

    table := TTable.Create(nil);
    table.DatabaseName := 'tools';
    table.TableName := 'main.db';
    table.Active := true;
...............................................
end;
Когда делаю table.Active := true один хрен вылетает окно с запросом пароля. Где тут ошибка?

Автор: RNS 2.12.2004, 11:18
Сними выделение с Login Promt компоненты TDatabase...

Автор: useless 2.12.2004, 13:04
Непонял, как снять выделение?

Автор: Vit 2.12.2004, 16:41
Database1.LoginPromt:=False

Автор: Dayana 2.12.2004, 17:10
Код

db.AliasName := 'TOOLS'


а вот db.DataBase должно быть отличное от AliasName, свое название

Код

db.DatabaseName := 'mytools'


и тогда

Код

table.DatabaseName := 'mytools'


иначе table снова напрямую обращается к алиасу в BDE...

Автор: useless 3.12.2004, 07:36
Люди, подправил код как советуете:
Код
...........................
var
    db: TDatabase;
    table: TTable;
begin
    db := TDatabase.Create(nil);
    db.AliasName := 'TOOLS';
    db.DatabaseName := 'mytools';
    db.LoginPrompt := False;
    db.Params.Add('Password=syskma');
    db.Connected := true;

    table := TTable.Create(nil);
    table.DatabaseName := 'mytools';
    table.TableName := 'main.db';
    table.Active := true;
...........................................
end;
Не работает - хоть ты тресни. Пароль теперь не спрашивает, но выдаёт ошибку "Insufficient table rights for operation. Password required." В Database Explorer попробовал открыть эту таблицу с паролем "syskma" - открывает без проблем.

Помогите разобраться!

Автор: useless 4.12.2004, 10:04
Неужели, я так никогда и не смогу достучаться до запароленой таблицы !!!!
smile

Автор: Dimich 6.12.2004, 08:59
Как временный вариант, можно попробовать использовать функцию keybd_event () для заполнения поля с username и password в окошке ConnectDialogа.
Однако я знаю, что сейчас на меня обрушится гора критики от Вас, и Вы будете правы. Это не выход, а всего лишь один из вариантов временного решения проблемы.

Автор: useless 6.12.2004, 09:05
Да я уже и на такой вариант согласен, если по-хорошему не получается. smile Можно по-подробнее об этом варианте, я новичок в Delphi.

Автор: Dimich 6.12.2004, 09:33
Вот такой корявый примерчик:
Код
Const
 UserName = 'USERNAME';
 Password = 'MYPASSWORD';
var
 i : Integer;
begin
 // поместим в буфер клавы username,Tab,password,Tab,Enter
 // симулируем ввод username
 for i := 1 to Length (UserName) do
   keybd_event(Byte (UserName [i]), 0, 0, 0);
 // клавиша Tab
 keybd_event(9, 0, 0, 0);
 // симулируем ввод password
 for i := 1 to Length (Password) do
   keybd_event(Byte (Password [i]), 0, 0, 0);
 // клавиша Tab
 keybd_event(9, 0, 0, 0);
 // клавиша Enter
 keybd_event(13, 0, 0, 0);
 // Теперь пытаемся получить доступ к таблице, чтобы выскочило окошко ConnectDialogа
 // ....................
end;

Автор: Dimich 6.12.2004, 10:34
Один сильный минус тут получается: если мы поместили в "буфер клавиатуры" username и password, а ConnectDialog не появился по какой-то причине, а/или произошло переключение на другую программу (напр. MS Word), то мы получаем наш username и password набранные прямо в этом Word'e! Что еще веселее можно придумать?

Автор: Akella 20.12.2004, 14:26
а что за таблица? Paradox?
Добавлено @ 14:31
а попробуй без alias`ов,

Код

Procedure TfmMain.ConnectToDB(sFile:String);
var
sPath:string;
begin
try
  DB.Connected:=False;
  Db.DriverName:='STANDARD';
  DB.Params.Clear;
  if (sFile<>'') AND (FileExists(sFile)) then begin
    sPath:=ExtractFileDir(sFile);
    if Copy(sPath,length(sPath),1)<>'\'  then sPath:= sPath+'\';
  end;
  DB.Params.Add('Path='+sPath);
  DB.Params.Add('Default Driver=Paradox');
  tAp.TableType:=ttParadox;
  tAp.TableName:=ExpandFileName(sFile);
  tAp.Open;
  tAreaCodes.Open;
 except

 end;//try-except
end;//proc



Автор: Cetus 24.12.2004, 12:14
var Password: String;

begin
Password := 'qwerty';
Session.AddPassword(Password);
end;

но если пароль будет не верен, то окошко вылетит все равно,
если не нравиться стандартное окошко сделай свое.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)