powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Окно авторизации Delphi
43 сообщений из 43, показаны все 2 страниц
Окно авторизации Delphi
    #39485249
valli_vasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Помогите мне с одной проблемой) Суть такая, я создал программу при запуске которой открывается окно авторизации, после прохождения авторизации открывается главное окно программы. Так вот проблема в том, что окно авторизации не закрывается после открытия главного окна, а продолжает висеть пока его не закроешь с кнопки Выход, но если его закрыть с кнопки Выход то закрывается вся программа( А мне надо чтобы работало так, запустили программу открылось окно авторизации, прошли авторизацию, закрылось окно авторизации потом открылось главное окно программы. Лазил везде по форумам пытался разобраться но нечего так и не нашел( Помогите люди добрые пожалуйста!

Последовательность моих действий при создании проекта программы:
1. Создал Дата Модуль (DataModule1) в него поместил ADOConnection1 и ADOQuery1 подключил туда базу данных (bd.mdb) с логинами и паролями.
2. Создал Форму (Form2) это форма авторизации на нее поместил два Edit1, Edit2 и две Button1,Button2.
3. Создал Форму (Form3) это форма главного окна программы она пока пустая.

Код Project1 (Код создания проекта)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {DataModule1: TDataModule},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TDataModule1, DataModule1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.



Код Unit1 (Дата Модуль)
Код: pascal
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.
unit Unit1;

interface

uses
  SysUtils, Classes, DB, ADODB;

type
  TDataModule1 = class(TDataModule)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DataModule1: TDataModule1;

implementation

{$R *.dfm}

end.



Код Unit2 (Окно авторизации)
Код: pascal
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.
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1, Unit3;

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
begin
Close;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
 DataModule1.ADOQuery1.SQL.Clear;
 DataModule1.ADOQuery1.SQL.Add('SELECT Password FROM Users WHERE login='+#39+Edit1.Text+#39);
 DataModule1.ADOQuery1.Open;
  if DataModule1.ADOQuery1.IsEmpty
   then
    ShowMessage('Ïîëüçîâàòåëü '+Edit1.Text+' íå íàéäåí!')
   else
  if DataModule1.ADOQuery1.FieldByName('Password').Value <> Edit2.Text
   then
    ShowMessage('&#205;&#229;&#226;&#229;&#240;&#237;&#251;&#233; &#239;&#224;&#240;&#238;&#235;&#252;!')
   else
    Form3.Show;
end;

end.



Ну и Код Unit3 (Главное окно программы оно пока пустое)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm3 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

end.


Создаю проект в Delphi 7. Подскажите где и как править код чтобы все получилось. Заранее очень благодарен за ответ!
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485250
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
begin
  Application.Initialize;
  Application.CreateForm(TDataModule1, DataModule1);

  { форма авторизации }
  Application.CreateForm(TForm2, Form2);
  if Form2.ShowModal = idOK then
   begin
       { если авторизовались, создаём и открываем главную форму }
       Application.CreateForm(TForm3, Form3);
       Application.Run;
   end ;
end.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485253
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
begin
  Application.Initialize;
  Application.CreateForm(TDataModule1, DataModule1);

  { форма авторизации }
  Application.CreateForm(TForm2, Form2);
  if Form2.ShowModal = idOK then
   begin
       { если авторизовались, создаём и открываем главную форму }
       Application.CreateForm(TForm3, Form3);
       Application.Run;
   end ;
end.



Немножко поправлю,
Application.Run;
лучше вынести вниз за условие.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485255
valli_vasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое за такой быстрый ответ!)
Добавил ваш код, но при тестовом запуске программы из Delphi показывает ошибку

[Error] Project1.dpr(15): Undeclared identifier: 'idOK'

что я не так сделал?
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485256
valli_vasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я новичок в программировании не пинайте сильно если что)
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485257
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
schidefecator
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
begin
  Application.Initialize;
  Application.CreateForm(TDataModule1, DataModule1);

  { форма авторизации }
  Application.CreateForm(TForm2, Form2);
  if Form2.ShowModal = idOK then
   begin
       { если авторизовались, создаём и открываем главную форму }
       Application.CreateForm(TForm3, Form3);
       Application.Run;
   end ;
end.




Немножко поправлю,
Application.Run;
лучше вынести вниз за условие.

Зачем ? Нет авторизации - выход из программы.
Всё.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485258
valli_vasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал в Button1 поставить ModalResult в mrOK но ошибка [Error] Project1.dpr(15): Undeclared identifier: 'idOK' все равно осталась(
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485264
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
valli_vasiaПопробовал в Button1 поставить ModalResult в mrOK но ошибка [Error] Project1.dpr(15): Undeclared identifier: 'idOK' все равно осталась(

в Uses надо прописать модуль Controls
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485265
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
тьфу, не Controls, а Windows
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485272
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

разве не mrOk?
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485273
valli_vasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно поподробнее про Uses и Windows? чет я не совсем понял что куда сори)
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485276
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
wadmandefecator,

разве не mrOk?
можно и mrOK, можно и idOK, поскольку mrOK = idOK в файле Controls.pas
Мне привычнее idOK
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485277
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
valli_vasiaа можно поподробнее про Uses и Windows? чет я не совсем понял что куда сори)
читать что-нибудь про Паскаль не пробовал ?
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485279
valli_vasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в Uses на форме авторизации? как прописать модуль Windows и какой?
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485280
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
valli_vasiaв Uses на форме авторизации? как прописать модуль Windows и какой?
ладно, умываю руки, тут всё бесполезно.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485286
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorschiпропущено...


Немножко поправлю,
Application.Run;
лучше вынести вниз за условие.

Зачем ? Нет авторизации - выход из программы.
Всё.

В свое время сталкивался с тем, что компоненты (TClientDataSet, если память не изменяет) созданные на автоматически создаваемых датамодулях, при их разрушении в отсутствии Application.Run выдавали AV. Дело было давно, деталей не помню, но с тех пор стараюсь Application.Run вызывать при любых условиях.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485330
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valli_vasiaв Uses на форме авторизации? как прописать модуль Windows и какой?
Код: pascal
1.
2.
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs;


вот так выглядят подключенные модули. Сам смотри что и куда надо добавить.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485336
valli_vasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо разобрался.

Сейчас не могу сообразить как сделать проверку на пользователей. То есть когда пользователь авторизуется то на Label1 в форме Form3 надо показывать фамилию того кто авторизовался. Создана база access там таблица и в ней четыре столбца 1. (Номер пользователя по порядку) 2. login (Логин) 3. password (Пароль) 4. np (Ф.И.О пользователя)

Вот код:

Код: pascal
1.
2.
3.
  if Edit1.Text<>'admin' then
     begin
   Form3.Label1.Caption:=DataModule1.ADOTable1.FieldByName('np').AsString;



Он смотрит что пользователь ввел в поле Edit1, проверяет что ввели не admin и тогда прописывает в Label1 фамилию из столбца np базы. Но проблема кода в том что он берет только одну фамилию независимо кто зашел, то есть не понимает какой конкретно пользователь авторизовался. В общем не могу сообразить как изменить этот код чтобы программа понимала что например зашел пользователь под номером 3 (или по логину) и прописала в Label1 его фамилию из столбца np . Помогите разобраться пожалуйста. Заранее благодарен!
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485339
Жышы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valli_vasiaВсем спасибо разобрался.

Сейчас не могу сообразить как сделать проверку на пользователей. То есть когда пользователь авторизуется то на Label1 в форме Form3 надо показывать фамилию того кто авторизовался. Создана база access там таблица и в ней четыре столбца 1. (Номер пользователя по порядку) 2. login (Логин) 3. password (Пароль) 4. np (Ф.И.О пользователя)

Вот код:

Код: pascal
1.
2.
3.
  if Edit1.Text<>'admin' then
     begin
   Form3.Label1.Caption:=DataModule1.ADOTable1.FieldByName('np').AsString;



Он смотрит что пользователь ввел в поле Edit1, проверяет что ввели не admin и тогда прописывает в Label1 фамилию из столбца np базы. Но проблема кода в том что он берет только одну фамилию независимо кто зашел, то есть не понимает какой конкретно пользователь авторизовался. В общем не могу сообразить как изменить этот код чтобы программа понимала что например зашел пользователь под номером 3 (или по логину) и прописала в Label1 его фамилию из столбца np . Помогите разобраться пожалуйста. Заранее благодарен!

Ну какие еще Label1? Если форма сразу же закрывается.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485340
valli_vasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите где и что не так?
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485342
Жышы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valli_vasiaПодскажите где и что не так?
Лето, отдыхай, зачем тебе сейчас Паскаль?
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485354
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valli_vasia> Подскажите где и что не так?

Что именно подсказать-то? Много чего не так.
Во-первых, проверять надо не запросом типа
SELECT Password WHERE login = Edit1.Text
и далее сравнением пароля с Edit2.Text, а
select 1 where login = :login and password = :psw

Во-вторых, твоё "не понимает какой конкретно
пользователь авторизовался" не очень понятно
с т.з. кода, т.к. логин вводится и проверяется
вроде бы правильно (убедись отладчиком).

В общем, не вываливай все вопросы кучей,
иначе мало кому захочется отвечать и помогать,
лучше спрашивай по одному.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485378
valli_vasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну у меня вопрос один как этот код доработать чтобы он писал в Lebel1 фамилию того кто авторизовался.
Есть таблица там четыре столбца:
login password np 1 user1 user1 Иванов И.И. 2 user2 user2 Петров П.П. 3 user3 user3 Сидоров С.С.

Авторизация проходит нормально то есть по логину и паролю входит нормально, но код ниже выдает фамилию Иванов и не важно кем я зайду хоть 1 хоть 2 или 3 пользователем все равно в Lebel1 пишется Иванов. Вот и не могу разобраться как код этот переделать чтобы фамилия писалась правильно к каждому пользователю. Помогите пожалуйста.


Код: pascal
1.
2.
3.
  if Edit1.Text<>'admin' then
     begin
   Form3.Label1.Caption:=DataModule1.ADOTable1.FieldByName('np').AsString;
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485410
s77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s77
Гость
ADOQuery1.FieldByName('np').Value ?

ну и запрос надо select * from ...
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485412
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
s77ADOQuery1.FieldByName('np').Value ?

ну и запрос надо select * from ...

* не надо
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485563
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valli_vasia> Ну у меня вопрос один как этот код доработать
valli_vasia> чтобы он писал в Lebel1 фамилию того кто авторизовался.

Ну вот запрос который я выше поправлял -
select np from users where login = :login and password = :psw

Потом проверяешь if ADOQuery.RecordCount > 0 then
Label.Caption := ADOQuery.FieldByName('np').asString;

P.S. Книжки штудируй.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485565
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Потом проверяешь if ADOQuery.RecordCount > 0 then
> Label.Caption := ADOQuery.FieldByName('np').asString;

else, соответственно, raise Exception.Create('Логин/пароль неверные')
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485593
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам> Потом проверяешь if ADOQuery.RecordCount > 0 then
> Label.Caption := ADOQuery.FieldByName('np').asString;

else, соответственно, raise Exception.Create('Логин/пароль неверные')


raise ELoginError.Create...

Я, как Рикки-Тики-Тави со змеями, борюсь с теми, кто использует Exception, не создавая от него наследников. Хрен потом отфильтруешь в вызывающем коде.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485599
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
schiГаджимурадов Рустам> Потом проверяешь if ADOQuery.RecordCount > 0 then
> Label.Caption := ADOQuery.FieldByName('np').asString;

else, соответственно, raise Exception.Create('Логин/пароль неверные')


raise ELoginError.Create...

Я, как Рикки-Тики-Тави со змеями, борюсь с теми, кто использует Exception, не создавая от него наследников. Хрен потом отфильтруешь в вызывающем коде.

и нафига на каждый чих наследников создавать ?
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485640
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorschiпропущено...


raise ELoginError.Create...

Я, как Рикки-Тики-Тави со змеями, борюсь с теми, кто использует Exception, не создавая от него наследников. Хрен потом отфильтруешь в вызывающем коде.

и нафига на каждый чих наследников создавать ?

А чтобы потом отфильтровывать свои от EAccessViolation.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485649
Жышы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schidefecatorпропущено...


и нафига на каждый чих наследников создавать ?

А чтобы потом отфильтровывать свои от EAccessViolation.
А разве EAccessViolation - не класс-наследник?

И для чего их отфильтровывать? Чтобы прибивать EAccessViolation?
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485658
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖышыА чтобы потом отфильтровывать свои от EAccessViolation.А разве EAccessViolation - не класс-наследник?

И для чего их отфильтровывать? Чтобы прибивать EAccessViolation? Предполагаю, что одна из причин - не вываливаться в отладчик под IDE на каждый чих эксепшен.
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485673
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
DimonkaЖышыпропущено...
А разве EAccessViolation - не класс-наследник?

И для чего их отфильтровывать? Чтобы прибивать EAccessViolation? Предполагаю, что одна из причин - не вываливаться в отладчик под IDE на каждый чих эксепшен.

чтобы не вываливаться, надо делать так, чтобы они в коде не возникали.
А если возникли, то разбираться и устранять
Имхо
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485678
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi> raise ELoginError.Create...

Спорить не буду, пусть будет так.
Просто это очень далеко от уровня ТСа.
Ему до этого ещё расти и расти.
На сейчас ему нужно просто
работающий код научиться писать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485687
Жышы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimonkaЖышыпропущено...
А разве EAccessViolation - не класс-наследник?

И для чего их отфильтровывать? Чтобы прибивать EAccessViolation? Предполагаю, что одна из причин - не вываливаться в отладчик под IDE на каждый чих эксепшен.

Хорошо бы узнать у самого коллеги schi...
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485692
Жышы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorDimonkaпропущено...
Предполагаю, что одна из причин - не вываливаться в отладчик под IDE на каждый чих эксепшен.

чтобы не вываливаться, надо делать так, чтобы они в коде не возникали.
А если возникли, то разбираться и устранять
Имхо

Разные случаи бывают. Например, наш разлюбимый фастрепорт генерирует имена компонентов без проверки на существование такого же, ловит эксцепшн и модифицирует имя, пока не нарвется на свободное...
Сие выливается в нервный тик у девелоперов, которые в дизайнтайме выполняют копипасте элементов отчета...
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485703
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖышыDimonkaпропущено...
Предполагаю, что одна из причин - не вываливаться в отладчик под IDE на каждый чих эксепшен.

Хорошо бы узнать у самого коллеги schi...

Сам коллега исповедует принцип: не обрабатывай то, чего не можешь обработать, описанный тут:

http://delphikingdom.ru/asp/viewitem.asp?catalogid=1392#SubSubHeader_2_6_11
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485722
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамПотом проверяешь if ADOQuery.RecordCount > 0 then
ИМХО, так феншуйнее проверять

Код: pascal
1.
if not (ADOQuery.BOF and ADOQuery.EOF) then
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485727
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд> ИМХО, так феншуйнее проверять

Я бы не сказал, хотя это дело вкуса.
Но опять же, автору (и не только)
это будет менее понятно и наглядно.

Код должен легко читаться и быть
понятен с первого раза. Желательно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485751
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдГаджимурадов РустамПотом проверяешь if ADOQuery.RecordCount > 0 then
ИМХО, так феншуйнее проверять

Код: pascal
1.
if not (ADOQuery.BOF and ADOQuery.EOF) then



Феншуйнее (и читабельнее) проверять

Код: pascal
1.
if not ADOQuery.IsEmpty then
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485752
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiКвейдпропущено...
ИМХО, так феншуйнее проверять

Код: pascal
1.
if not (ADOQuery.BOF and ADOQuery.EOF) then



Феншуйнее (и читабельнее) проверять

Код: pascal
1.
if not ADOQuery.IsEmpty then



Правда not в условном операторе читабельности не добавляет
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485780
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Против IsEmpty не возражаю, хотя он всё равно в RecordCount вырождатся.

schi> Правда not в условном операторе читабельности не добавляет

Да нормально смотрится. "Если не пусто". В крайнем случае,
комильфобельности для, можно then-else местами поменять,
хотя это будет неправильнее и не по Макконнелллу, IIRC.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Окно авторизации Delphi
    #39485781
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖышыНапример, наш разлюбимый фастрепорт генерирует имена компонентов без проверки на существование такого же, ловит эксцепшн и модифицирует имя, пока не нарвется на свободное...
Сие выливается в нервный тик у девелоперов, которые в дизайнтайме выполняют копипасте элементов отчета...Такие девелоперы ССЗБ. А подход стандартный
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TComponent.SetName(const NewName: TComponentName);
begin
  if FName <> NewName then
  begin
    if (NewName <> '') and not IsValidIdent(NewName) then
      raise EComponentError.CreateResFmt(@SInvalidName, [NewName]);
    if FOwner <> nil then
      FOwner.ValidateRename(Self, FName, NewName) else
      ValidateRename(nil, FName, NewName);
    SetReference(False);
    ChangeName(NewName);
    SetReference(True);
  end;
end;
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Окно авторизации Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]