powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / двойное условие
31 сообщений из 31, показаны все 2 страниц
двойное условие
    #39707606
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure frmAdmin_bStartSQLiteServer_OnClick (Sender: TObject; var Cancel: boolean);
var
    s: string;
    ini:TInifile;
begin
    s := '';
    SelectDirectory('Caption', '', s);
    ini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    if ini.WriteString ('Options', 'server', s) AND ini.WriteString ('Options', 'DBMS','sqlite' ) then begin
    ini.Free;
    showmessage('Подключение выполнен успешно, программа будет перезагружена.');
    frmLogin.Close;
    OpenFile('start.bat');
    end else
    showmessage('Ошибка, Подключение не выполнено.');
end;



как правельно записать?

Код: pascal
1.
if ini.WriteString ('Options', 'server', s) AND ini.WriteString ('Options', 'DBMS','sqlite' ) then begin
...
Рейтинг: 0 / 0
двойное условие
    #39707613
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю вот что: если первое условие, т.е. ini.WriteString ('Options', 'server', s), окажется FALSE, то выполнение IF дальше не пойдет и ini.WriteString ('Options', 'DBMS','sqlite' ) даже не произойдет. Или так и было задумано? Если нет, следует ввести промежуточные переменные
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
   bServerOptionsSaved : boolean;
   bSqliteOptionsSaved : boolean;
begin
   bServerOptionsSaved  := ini.WriteString ('Options', 'server', s);
   bSqliteOptionsSaved  := ini.WriteString ('Options', 'DBMS','sqlite');
   
   if bServerOptionsSaved  and  bSqliteOptionsSaved  then ...
...
Рейтинг: 0 / 0
двойное условие
    #39707615
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VladimirVVP
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure frmAdmin_bStartSQLiteServer_OnClick (Sender: TObject; var Cancel: boolean);
var
    s: string;
    ini:TInifile;
begin
    s := '';
    SelectDirectory('Caption', '', s);
    ini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    if ini.WriteString ('Options', 'server', s) AND ini.WriteString ('Options', 'DBMS','sqlite' ) then begin
    ini.Free;
    showmessage('Подключение выполнен успешно, программа будет перезагружена.');
    frmLogin.Close;
    OpenFile('start.bat');
    end else
    showmessage('Ошибка, Подключение не выполнено.');
end;




как правельно записать?

Код: pascal
1.
if ini.WriteString ('Options', 'server', s) AND ini.WriteString ('Options', 'DBMS','sqlite' ) then begin



Правильно вообще весь этот код переписать
Если не вникать в смысл кода, то как-то так

Код: 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.
procedure frmAdmin_bStartSQLiteServer_OnClick (Sender: TObject; var Cancel: boolean);
var
   ini : TInifile;
   Test : Boolean ;
begin
    s := '';
    SelectDirectory('Caption', '', s);
    ini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    try
       Test := ini.WriteString ('Options', 'server', s)
       if not Test then Exit ;
       Test := ini.WriteString ('Options', 'DBMS','sqlite' ) ;
    finally
      ini.Free;
      frmLogin.Close;
    end ;

    if Test then
     begin
          showmessage('Подключение выполнен успешно, программа будет перезагружена.');
          OpenFile('start.bat');
     end else
      showmessage('Ошибка, Подключение не выполнено.');
end;
...
Рейтинг: 0 / 0
двойное условие
    #39707616
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVPкак правельно записать?

Просто убери if, AND и then.

RTFM try-finally/except.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
двойное условие
    #39707628
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семёнini.WriteString ('Options', 'server', s), окажется FALSE

Вас не смущает, что WriteString это процедура или в свежих версиях её перековали в функцию?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
двойное условие
    #39707678
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКроик Семёнini.WriteString ('Options', 'server', s), окажется FALSE

Вас не смущает, что WriteString это процедура или в свежих версиях её перековали в функцию?..
Пока еще процедура. Но вдруг ТС наследника наваял?
...
Рейтинг: 0 / 0
двойное условие
    #39707698
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКроик Семёнini.WriteString ('Options', 'server', s), окажется FALSE

Вас не смущает, что WriteString это процедура или в свежих версиях её перековали в функцию?..

это упустил из внимания, если честно :)
отвечал на вопрос:

авторкак правельно записать?

Код: pascal
1.
if ini.WriteString ('Options', 'server', s) AND ini.WriteString ('Options', 'DBMS','sqlite' ) then begin
...
Рейтинг: 0 / 0
двойное условие
    #39707712
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVPкак правельно записать?А что хотелось сделать?
...
Рейтинг: 0 / 0
двойное условие
    #39707714
Олег Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все не правильно!
Вообще не понятно, что хочет проверить автор. Права на запись или наличие ini?
А как же ini.UpdateFile?
...
Рейтинг: 0 / 0
двойное условие
    #39707715
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Олег ТретьяковВсе не правильно!
Вообще не понятно, что хочет проверить автор. Права на запись или наличие ini?
А как же ini.UpdateFile?

defecatorЕсли не вникать в смысл кода
...
Рейтинг: 0 / 0
двойное условие
    #39707724
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Олег ТретьяковА как же ini.UpdateFile?Это актуально для TMemIniFile, но не для обычного TIniFile
...
Рейтинг: 0 / 0
двойное условие
    #39707743
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я только учусь... по немного вникаю

1. прочитать setting.ini
2. если запись 'Options', 'server' и 'Options', 'DBMS' есть, то сообщит об этом пользователю
3. если нет то вывести диалог выбора папки
4. записать выбранный адрес в 'Options', 'server' и 'Options', 'DBMS', 'sqlite'
5. вывести сообщение (настройки изминены, программа будет перезагружена)
6. если записать не получилось то сообщить пользователю (ошибка)
7. перезагружаем программу

может типа
if запись нет then
{условия
либо if либо case}
else
showmessage('такая запись уже есть')
...
Рейтинг: 0 / 0
двойное условие
    #39707752
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Прочитал настройки.
2. Если они пустые, то вывести диалог настроек.
2.1. ОК = Сохранить настройки. Отмена = выход из приложения.
3. Соединиться.
4. Если ошибка соединения, то пункт 2.
...
Рейтинг: 0 / 0
двойное условие
    #39707757
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVPЯ только учусь...

Плохому, судя по коду

Учиться следует по содержимому папки Demos в Delphi
...
Рейтинг: 0 / 0
двойное условие
    #39707766
Олег Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд,
Да, точно. В какой-то старой версии приходилось это делать.
...
Рейтинг: 0 / 0
двойное условие
    #39708215
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure frmAdmin_bBeackSQLite_OnClick (Sender: TObject; var Cancel: boolean);
var
    ini : TInifile;
begin
    ini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    if ini.ValueExists('Options', 'server') AND ini.ValueExists('Options','DBMS') then
    begin
         try
           ini.DeleteKey('Options', 'server');
           if ini.ValueExists('Options', 'server') then Exit ;
           ini.WriteString ('Options', 'DBMS','sqlite');
           if ini.ValueExists('DBMS','sqlite') then Exit ;
           showmessage('Возврат к использованию SQLite выполнен, программа будет перезагружена.');
           ini.Free;
           frmLogin.Close;
           OpenFile('start.bat');
           finally
           showmessage ('Ошибка записи!');
        end;
    end else
   showmessage ('Программа уже подключена к SQLite.');
 end;



давайте доработаем, в принцепе этот вариант работает..
только я не пойму как мне сделать проверку ключа ini.ValueExists('Options','DBMS', 'mysql')
...
Рейтинг: 0 / 0
двойное условие
    #39708224
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVPтолько я не пойму как мне сделать проверку ключа ini.ValueExists('Options','DBMS', 'mysql')
Функция ValueExists возвращает true, если в секции Options имеется значение DBMS. Вы же хотите проверить, равно ли значение DBMS mysql. Для это нужно взять значение из [Options] DBMS, к примеру поместив в переменную, и сравнить значение переменной с 'mysql'.
...
Рейтинг: 0 / 0
двойное условие
    #39708235
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VladimirVVP
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure frmAdmin_bBeackSQLite_OnClick (Sender: TObject; var Cancel: boolean);
var
    ini : TInifile;
begin
    ini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    if ini.ValueExists('Options', 'server') AND ini.ValueExists('Options','DBMS') then
    begin
         try
           ini.DeleteKey('Options', 'server');
           if ini.ValueExists('Options', 'server') then Exit ;
           ini.WriteString ('Options', 'DBMS','sqlite');
           if ini.ValueExists('DBMS','sqlite') then Exit ;
           showmessage('Возврат к использованию SQLite выполнен, программа будет перезагружена.');
           ini.Free;
           frmLogin.Close;
           OpenFile('start.bat');
           finally
           showmessage ('Ошибка записи!');
        end;
    end else
   showmessage ('Программа уже подключена к SQLite.');
 end;




давайте доработаем, в принцепе этот вариант работает..
тебе уже вчера сказали использовать try-finally
...
Рейтинг: 0 / 0
двойное условие
    #39708261
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVP try
....
finally
showmessage ('Ошибка записи!');
end;
[/src]

давайте доработаем

Давайте лучше закопаем поглубже и будем писать правильно, изучая, в том числе Demos
...
Рейтинг: 0 / 0
двойное условие
    #39708343
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
schi,
Извените, но я в отличии от вас хотя бы пытаюсь написать а вот вы строите из себя супер пупер, а сами даже попытку сделать не можете, я то же могу посоветовать вам книги читать и что?
я же писал уже что учусь только а вы сразу (плохому ), знаете лучше, так покажите, не знаете, так зачем вообще комментируете..
...
Рейтинг: 0 / 0
двойное условие
    #39708348
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VladimirVVPschi,
Извените, но я в отличии от вас хотя бы пытаюсь написать а вот вы строите из себя супер пупер, а сами даже попытку сделать не можете, я то же могу посоветовать вам книги читать и что?
я же писал уже что учусь только а вы сразу (плохому ), знаете лучше, так покажите, не знаете, так зачем вообще комментируете..

ты бы учился по книжке основам паскаля, а не на форуме
...
Рейтинг: 0 / 0
двойное условие
    #39708349
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45,
Проверка, существует ли заданный ключ в указанной секции:

function ValueExists(const Section, Ident: string): Boolean;

тоесть
ini.ValueExists('Options','DBMS')

а мне нужно проверить
('Options','DBMS', 'mysql')
...
Рейтинг: 0 / 0
двойное условие
    #39708350
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VladimirVVPgoldmi45,
Проверка, существует ли заданный ключ в указанной секции:

function ValueExists(const Section, Ident: string): Boolean;

тоесть
ini.ValueExists('Options','DBMS')

а мне нужно проверить
('Options','DBMS', 'mysql')

что тебе непонятно вот здесь
goldmi45Функция ValueExists возвращает true, если в секции Options имеется значение DBMS. Вы же хотите проверить, равно ли значение DBMS mysql. Для это нужно взять значение из [Options] DBMS, к примеру поместив в переменную, и сравнить значение переменной с 'mysql'.
?
...
Рейтинг: 0 / 0
двойное условие
    #39708372
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVPа мне нужно проверить
('Options','DBMS', 'mysql')
если существует ini.WriteString, то существует и ini.ReadString. Считываете значение, проверяете и всё.
...
Рейтинг: 0 / 0
двойное условие
    #39708377
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторini.WriteString

Оберни процедуры ini.WriteString в свои функции, которые будут возвращать False или True и тогда всё получится
...
Рейтинг: 0 / 0
двойное условие
    #39708435
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVPschi,
Извените, но я в отличии от вас хотя бы пытаюсь написать а вот вы строите из себя супер пупер, а сами даже попытку сделать не можете, я то же могу посоветовать вам книги читать и что?
я же писал уже что учусь только а вы сразу (плохому ), знаете лучше, так покажите, не знаете, так зачем вообще комментируете..

А я Demos изучал, между прочим. Чего и советую уже в который раз.
...
Рейтинг: 0 / 0
двойное условие
    #39708514
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
54.
procedure Form1_bMySQL_OnClick (Sender: TObject; var Cancel: boolean);
begin
    SwitchDBMS('mysql');
end;

procedure Form1_bSQLite_OnClick (Sender: TObject; var Cancel: boolean);
begin
    SwitchDBMS('sqlite');
end;



function SwitchDBMS(DBMS: string): boolean;
var
    ini : TInifile;
begin
    result := False;
    ini:= TIniFile.Create(Application.SettingsFile);
    try

        if DBMS = 'sqlite' then
        begin
            if ini.ReadString('Options', 'DBMS', '') = 'sqlite' then ShowMessage ('Программа уже подключена к SQLite.')
            else begin
                try
                    ini.WriteString('Options', 'DBMS', 'sqlite');
                    result := true;
                    OpenFile('start.bat');
                    Form1.Close;
                except
                    ShowMessage('Ошибка записи в ini файл.');
                end;
            end;                                         
        end;

        if DBMS = 'mysql' then
        begin
            if ini.ReadString('Options', 'DBMS', '') = 'mysql' then ShowMessage ('Программа уже подключена к MySQL.')
            else begin
                try
                    ini.WriteString('Options', 'DBMS', 'mysql');
                    result := true;
                    OpenFile('start.bat');
                    Form1.Close;
                except
                    ShowMessage('Ошибка записи в ini файл.');
                end;
            end;
        end;

    finally
        ini.Free;
    end;
end;
...
Рейтинг: 0 / 0
двойное условие
    #39708517
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VladimirVVP
Код: 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.
54.
procedure Form1_bMySQL_OnClick (Sender: TObject; var Cancel: boolean);
begin
    SwitchDBMS('mysql');
end;

procedure Form1_bSQLite_OnClick (Sender: TObject; var Cancel: boolean);
begin
    SwitchDBMS('sqlite');
end;



function SwitchDBMS(DBMS: string): boolean;
var
    ini : TInifile;
begin
    result := False;
    ini:= TIniFile.Create(Application.SettingsFile);
    try

        if DBMS = 'sqlite' then
        begin
            if ini.ReadString('Options', 'DBMS', '') = 'sqlite' then ShowMessage ('Программа уже подключена к SQLite.')
            else begin
                try
                    ini.WriteString('Options', 'DBMS', 'sqlite');
                    result := true;
                    OpenFile('start.bat');
                    Form1.Close;
                except
                    ShowMessage('Ошибка записи в ini файл.');
                end;
            end;                                         
        end;

        if DBMS = 'mysql' then
        begin
            if ini.ReadString('Options', 'DBMS', '') = 'mysql' then ShowMessage ('Программа уже подключена к MySQL.')
            else begin
                try
                    ini.WriteString('Options', 'DBMS', 'mysql');
                    result := true;
                    OpenFile('start.bat');
                    Form1.Close;
                except
                    ShowMessage('Ошибка записи в ini файл.');
                end;
            end;
        end;

    finally
        ini.Free;
    end;
end;



В случае ошибки записи в файл форма Form1 никогда не закроется
...
Рейтинг: 0 / 0
двойное условие
    #39708742
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

программа должна перезагрузиться только в случае успешной записи записи, что бы новые настройки принять
...
Рейтинг: 0 / 0
двойное условие
    #39708764
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVP,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
 
SwitchDBMS('mysql');
...
SwitchDBMS('sqlite');
....
if DBMS = 'sqlite' then
....
                    ini.WriteString('Options', 'DBMS', 'sqlite');


Вот просто интересно, зачем столько текстовых констант?.. Почему бы не сделать типа
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
type
  TDBMS = (dbMYSQL, dbSQLITE);
...
SwitchDBMS(dbSQLITE);
...
if DBMS = dbSQLITE then
....
                    ini.WriteString('Options', 'DBMS', 'sqlite');
...
Рейтинг: 0 / 0
двойное условие
    #39708768
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже проще:

Код: 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.
type
  TDBMS = (dbMYSQL, dbSQLITE);

const
  TDBMSText: array [TDBMS] of string = ('mysql', 'sqlite');
...
SwitchDBMS(dbSQLITE);
...
function SwitchDBMS(DBMS: string): boolean;
var
  ini : TInifile;
begin
  result := False;
  ini:= TIniFile.Create(Application.SettingsFile);
  try
    if ini.ReadString('Options', 'DBMS', '') = TDBMSText[DBMS] then 
      ShowMessage(Format('Программа уже подключена к %s.', [TDBMSText[DBMS]]))
    else try
      ini.WriteString('Options', 'DBMS', TDBMSText[DBMS]);
      result := true;
      OpenFile('start.bat');
      Form1.Close;
    except
      ShowMessage('Ошибка записи в ini файл.');
    end;
  finally
    ini.Free;
  end;
end;
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / двойное условие
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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