Topic: двойное условие

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;

что не так

 if ini.WriteString ('Options', 'server', s) AND ini.WriteString ('Options', 'DBMS','sqlite' ) then begin

Re: двойное условие

и так не получается

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;

    end ;

    if Test then
     begin
          showmessage('Подключение выполнен успешно, программа будет перезагружена.');
          frmLogin.Close;
          OpenFile('start.bat');
     end else
      showmessage('Ошибка, Подключение не выполнено.');
end;

Re: двойное условие

К сожалению код с ошибками. А что вы пытаетесь сделать?



if ini.WriteString ('Options', 'server', s) AND ini.WriteString ('Options', 'DBMS','sqlite' ) then

Этот код не имеет смысла, т.к. метод WriteString не возвращает какого либо значения.



Test := ini.WriteString ('Options', 'server', s)

Также и этот код не имеет смысла.

Dmitry.

4 (edited by sibprogsistem 2018-09-25 16:26:34)

Re: двойное условие

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('DBMS','sqlite') then
    begin
        ini.DeleteKey('Options', 'server');
        ini.WriteString ('Options', 'DBMS','sqlite');
        showmessage('Возврат к использованию SQLite выполнен, программа будет перезагружена.') ;
        ini.Free;
        frmLogin.Close;
        OpenFile('start.bat');
    end else
   showmessage ('Программа уже подключена к SQLite.');
 end;

сюда мне нужно дабавить сообщение об ошибке если удалить или записать не удалось

5 (edited by sibprogsistem 2018-09-25 17:02:17)

Re: двойное условие

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;

теперь у меня такая проблема;

if ini.ValueExists('Options', 'server') AND ini.ValueExists('Options','DBMS') then

мне нужно, что бы происходила проверка если нет ini.ValueExists('Options', 'server') и если есть  ini.ValueExists('Options','DBMS', 'sqlite')

if not ini.ValueExists('Options', 'server')

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

Re: двойное условие

sibprogsistem

Сделал для вас проект с примером.

Post's attachments

Attachment icon Switch SQLite MySQL.zip 8.44 kb, 281 downloads since 2018-09-26 

Dmitry.

Re: двойное условие

if ini.ReadString('Options', 'DBMS', '') = 'sqlite'
в копилку!

пасибо!

Re: двойное условие

if ini.ReadString('Options', 'DBMS', '') = 'sqlite'   then ShowMessage ('Программа уже подключена к SQLite.')

Дело в том, что  при возвращении к sqlite нужно проверять не только  DBMS но и ('Options', 'server')
в  случае ('Options', 'server','сервер') это сервер
а при возвращении к sqlite это ('Options', 'server','сервер') нужно удалять..

нужно двйное условие, потому как если программа подключена к серверу то в DBMS уже есть значение sqlite

AND not ini.ValueExists('Options', 'server')

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

Re: двойное условие

сделал так

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') then ini.DeleteKey('Options', 'server');
SwitchDBMS('sqlite');
end;