Подскажите пож. Почему если запись создал админ то создается одна запись (нормально) Если юзер то дополнительно добавляется пустая строчка. Заранее спс.

спс

спс

??? Мне еще ждать от вас помощи ? или нет.

ExpD1 результат. 7 колонка. Купить это Up продать это Dn.Главная таблица вклатка математический анализ

DriveSoft wrote:

К сожалению проект не приложился, проверьте что его размер не превышает 3мб.

Получилось скачать проект ?

Не получилось загрузить. Сссылка https://cloud.mail.ru/public/GdDX/gURAGPfgD

Просьба. Подскажите пож где я прокололся. Уже 2 дня мучаюсь. Сделал по аналогии вашего проекта.Но почему-то в таблицу данные ложаться а в комбобоксе не отображаются. Заранее спс. Архив прилагаю.

https://cloud.mail.ru/public/8u7h/MPodEGzju Сссылка на проект

DriveSoft wrote:

Приложите пожалуйста ваш проект, постараюсь помочь.

проект в ахиве

Есть главная таблица. В ней колонка, в которой только 2 значения (купил и продал). Нудно вывести данные  в подвал под этой колонкой в процентном соотношении или отдельно в TextBox.  (купил + продал=100%) Должно выглядеть приблизительно так- (купил 70% продал 30%)
Подскажите пож скрипт как это сделать. Буду вам очень признателен. Заранее спс.

wertyby wrote:

Да пожалуйста, бросайте на мыло интересные листинги , добавлю. wertyby@gmail.com

Давайте сдесь выкидывать. Так проще и быстрее.
Покраска ячеек в таблице

procedure Form1_TableGrid1_OnChange (Sender: string);
var
    i,c: integer;
begin
    c := Form1.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
         if Form1.TableGrid1.Cells[3,i] = 'Да' then Form1.TableGrid1.Cell[3,i].Color := clRed;
         if Form1.TableGrid1.Cells[3,i] = 'Нет' then Form1.TableGrid1.Cell[3,i].Color := clGreen;
    end;
end;

Как вывести сумму в подвал таьлицы

procedure Form1_Button7_OnClick (Sender: string; var Cancel: boolean);
begin

end;

procedure Form1_GridAbonent_OnChange (Sender: string);
var
   i,c, q: integer;
begin
     q := 0;
     c := Form1.GridAbonent.RowCount - 1;
     for i := 0 to c do
         if ValidInt(Form1.GridAbonent.Cells[3, i]) then q := q + StrToInt(Form1.GridAbonent.Cells[3, i]);



     Form1.GridAbonent.Columns[3].Footer.Caption := IntToStr(q); // result
end;


begin
Form1.GridAbonent.Options := Form1.GridAbonent.Options + goFooter;
end.

Скрипт импорта.

procedure Form1_Button2_OnClick (Sender: string; var Cancel: boolean);
var
   OpenDialog: TOpenDialog; // объект для диалога выбора файла
   sl: TStringList; // объект, представляющий из себя текстовый список
   arrStr: array of string; // массив, в который будет возвращаться результат функции SplitString

   i,c: integer; // числовые переменные для цикла
   ValuteID: string;
   sDate: string;
   sval: string;
begin
     OpenDialog := TOpenDialog.Create(Form1); // создаем диалог выбора файла
     if OpenDialog.Execute then // запускаем диалог выбора файла, если результат выполенения True, значит файл был выбран
     begin
          sl := TStringList.Create; // создаем объект - текстовый список
          sl.LoadFromFile (OpenDialog.FileName); // загружаем в него csv файл, который пользователь выбрал через диалог выбора файла


          c := sl.Count - 1; // в переменной c будет содержаться количество строк в csv файле
          for i := 0 to c do  // запускаем цикл, чтобы пройтись по всем строчкам csv файла, который загрузили в объект sl (TStringList)
          begin
               arrStr := SplitString(sl[i], ';'); // sl[i] возвращает строку из csv файла, которую функция SplitString разделяет на столбцы. В данном csv файле в качестве разделителя столбцов используется знак ;

               // date - текстовое содержимое первого столбца содержится в arrStr[0]
               if arrStr[0]<>'' then // если данные есть
                  sDate := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[0])) + '"' // приводим дату к формату, который необходим для записи в БД
                  else sDate := 'NULL'; // иначе значение NULL

               // id_valute - текстовое содердимое второго столбца содержится в arrStr[1]
               ValuteID := SQLExecute ('SELECT id FROM valute WHERE valute LIKE "' + arrStr[1] +'"'); // ищем идентификатор названия валюты
               if ValuteID = '' then ValuteID := 'NULL';

               // value -  текстовое содержимое третьего столбца содердижится в arrStr[2]
               arrStr[2] := ReplaceStr(arrStr[2], ',', '.'); // т.к. в arrStr[2] число с плавающей запятой, на всякий случай заменяем запятую на точку, т.к. для записи в БД числа с плавающей запятой используется  точка
               if arrStr[2] = '' then arrStr[2] := 'NULL';


               // проверяем, для избежания дубликатов, данная проверка не обязательна, и зависит от вашей ситуации
               sval := SQLExecute('SELECT id FROM currency WHERE (date = ' + sDate + ') AND (id_valute = ' +  ValuteID + ') AND (value = ' + arrStr[2] + ') ;');

               if sval = '' then // если в переменной sval - пусто, значит SQL запрос ничего не вернул, и дубликата данных нет
                  SQLExecute ('INSERT INTO currency (date, id_valute, value) VALUES ('+ sDate +','+ ValuteID +','+arrStr[2] +');'); // с помощью SQL запрос вставляем данные в БД


               Form1.Label1.Caption := IntToStr(i) + ' of ' + IntToStr(c); // выводим в компонент надписи, какое количество строк с данными обработано
               Application.ProcessMessages; // необходимо, чтобы надпись в Label один обновилась
          end;



          sl.Free; // уничтожаем объект, после работы с ним
          Form1.TableGrid1.dbUpdate; // заставляем TableGrid обновить данные
     end;
     OpenDialog.Free; // уничтожаем объект, после работы с ним
end;


begin

end.

Письмо получил огромное вам спс

Выслал вам проект на почтовый ящик

можно его вам выслать на почтовый ящик

Подскажите пож. как сделать, если пользователь открывает запись главной таблицы которую он не может редактировать она была не активной. Текстовое поле
Многострочное поле Выпадающий список фото файл

wertyby wrote:

Исходник выложен. Программа Help&Manual. Можно скачать с оффсайта. http://download.ec-software.com/help-an … p-v710.exe эта версия 3925. для себя переводил версию 3922, Немного попозже выложу полностью 3922 + перевод, т.к. скорость отдачи у оператора маленькая. Насчет лекарства к программе - вопрос риторический, если хозяин форума даст добро выложу, если нет то только в личку. Но все равно работать в программе можно только без подключения к сети.
Хотя добавлю наверное, что выбранное игоревичем направление не совсем удобное - оптимальный варианты, что бы наполнением занимался один человек а все желающие поучаствовать выкладывали бы примеры например в этой ветке.

Вы займетесь сборником скриптов ? Мы все будем вам помагать. Выкладывать примеры скриптов. У вас так красочно и грамотно оформлен сборник скриптов. Попросим админа прикрепить тему в начале форума.

70

(36 replies, posted in Russian)

Респект. Жду не дождусь главу скрипты и SQL запросы

Огромное спс.

 var
   sUser: string = '';
   idUser: integer;
   isAdmin: boolean = False;
   isCheckBox: boolean = False;
   sHello: string;
  /// BAR CHART //////

{== BAR CHART ===========================================================================================}

{== BAR CHART ===========================================================================================}



procedure formIzm_CheckBox1_OnKeyUp (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
     if (isCheckBox) and (formIzm.bOK.dbGeneralTableId>0) then
         SQLExecute('UPDATE TabOtkaz SET StatusOtkaza = ' + formIzm.CheckBox1.sqlValue + ' WHERE id = '+IntToStr(formIzm.bOK.dbGeneralTableId));
end;

procedure formIzm_CheckBox1_OnMouseUp (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
     if (isCheckBox) and (formIzm.bOK.dbGeneralTableId>0) then
         SQLExecute('UPDATE TabOtkaz SET StatusOtkaza = ' + formIzm.CheckBox1.sqlValue + ' WHERE id = '+IntToStr(formIzm.bOK.dbGeneralTableId));
end;


procedure frmLogin_bLogin_OnClick (Sender: string; var Cancel: boolean);
var
   s: string;
begin
     // SQL-запрос на регистрацию пользователя и пароль
     s := SQLExecute('SELECT count(id) FROM users WHERE (id = ''' + IntToStr(frmLogin.cbLogin.dbItemID) + ''') AND (password = ''' + frmLogin.edPassword.Text + ''');');

     // SQL-запрос найден логин и пароль
     if (s <> '0') and (s<>'') then
     begin
          sUser := frmLogin.cbLogin.Text; // запомнить имя пользователя
          idUser := frmLogin.cbLogin.dbItemID; // запомнить идентификатор пользователя в базе


          // Administrator?
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.bUsers.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.Button5.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.Button1.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.Button4.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.Button6.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.bDelete.Visible:=False;

           // Can change CheckBox?
          if SQLExecute ('SELECT CheckBox FROM users WHERE id = '+IntToStr(idUser)) = '1' then isCheckBox := True;

          FormGlavn.Caption := 'User: ' + sUser;
          frmLogin.Close; // Закрыть главную форму
     end else MessageDlg('Некорректный пароль', mtError, mbOk, 0); // сообщение если неверный пароль

end;


procedure SavePersonal_OnShow (Sender: string; Action: string);
begin
    if Action = 'NewRecord' then SavePersonal.ComboBox1.dbItemID := idUser ;
end;

// мероприятия закрытия окна для входа
procedure frmLogin_OnClose (Sender: string; Action: string);
begin
     // если пользователь не определен, и Пользователь закрывает окно входа в систему, закройте главную форму
     if sUser='' then FormGlavn.Close;
end;


procedure formIzm_OnShow (Sender: string; Action: string);
begin
begin
    if Action = 'NewRecord' then formIzm.cbUser.dbItemID := idUser ;
end;
// удаление двойного клика по подчиненной таблице
begin
   FormGlavn.TableGrid2.dbPopupMenu.Items[0].Enabled:= False;
end;

end;


// защитить от удаления
procedure FormGlavn_bDelete_OnClick (Sender: string; var Cancel: boolean);
var
    sIdUser: string;
begin
    if isAdmin then Exit;

    sIdUser:=SQLExecute('SELECT id_users FROM TabOtkaz WHERE id='+IntToStr(FormGlavn.TableGrid2.dbItemID));
    if sIdUser<>IntToStr(idUser) then
    begin
        Cancel := True;
        ShowMessage('У вас нет разрешения удалять записи, которые не принадлежат вам.');
    end;
end;

// защитить от редактирования
procedure formIzm_bOK_OnClick (Sender: string; var Cancel: boolean);
begin
    if isAdmin then Exit;

    if idUser<>formIzm.cbUser.dbItemID then
    begin
        Cancel := True;
        ShowMessage('У вас нет разрешения редактировать записи, которые не принадлежат вам.');
    end;
end;



procedure FormGlavn_OnShow (Sender: string; Action: string);
begin
begin
     frmLogin.edPassword.PasswordChar := '*';
     frmLogin.ShowModal; // Форма для входа
     FormGlavn.mniAbout.OnClick := @MenuClickAbout;
     
end;
// удаление двойного клика по главной таблице
begin
   FormGlavn.TableGrid2.dbPopupMenu.Items[0].Enabled:= False;
end;

{== BAR CHART ===========================================================================================}

end;

procedure MenuClickAbout (Sender: string); // click in About menu item
begin
     frmAbout.ShowModal;
end;

procedure FormGlavn_TableGrid2_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
  zapolnenie();
end;

procedure FormGlavn_TableGrid2_OnKeyUp (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
   zapolnenie();
end;

procedure   zapolnenie ();
var  
 idS : string ;
begin
 idS := inttostr(FormGlavn.TableGrid2.dbItemID) ;
 FormGlavn.Obekt.text := SQLExecute('SELECT ob_name FROM tabobekt WHERE id =(SELECT id_tabobekt FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.Edit2.Text := SQLExecute('SELECT Name_Uzel FROM TabUselOborud WHERE id =(SELECT id_TabUselOborud FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.VneshProyavlOtkaza.Text := SQLExecute('SELECT Proyav_name FROM TabProyavlen WHERE id =(SELECT id_TabProyavlen FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.LitsoObnaruj.Text := SQLExecute('SELECT Obnarug_name FROM TabObnarug WHERE id =(SELECT id_TabObnarug FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.MetodUstraneniya.Text := SQLExecute('SELECT Metod_name FROM TabMetod WHERE id =(SELECT id_TabMetod FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.UsloviyaObnaruj.Text :=  SQLExecute('SELECT Usl_name FROM TabUslovia WHERE id =(SELECT id_TabUslovia FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.VidOborudovaniya.Text := SQLExecute('SELECT Vid_name FROM TabVid WHERE id =(SELECT id_TabVid FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.DefektNomer.Text := SQLExecute('SELECT DEF№ FROM tabotkaz WHERE id = '+idS ) ;
 FormGlavn.Edit4.Text := SQLExecute('SELECT ZAPAS FROM tabotkaz WHERE id = '+idS ) ;
 FormGlavn.Komentarii.Text := SQLExecute('SELECT Primechanie FROM tabotkaz WHERE id = '+idS ) ;
 FormGlavn.Edit3.Text := SQLExecute('SELECT OtcLico FROM tabotkaz WHERE id = '+idS ) ;

end;

// открытие файла руководство пользователя

procedure FormGlavn_Button3_OnClick (Sender: string; var Cancel: boolean);

begin

    OpenFile(ExtractFilePath(Application.ExeName) +'HelpR.chm');

end;

// нажатие скрытой кнопки

procedure FormGlavn_Button10_OnClick (Sender: string; var Cancel: boolean);

begin

   FormGlavn.Button10.Click

 end;

 // дубликат таблицы

      procedure FormGlavn_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
    if FormGlavn.TableGrid2.dbItemID <> -1 then
    begin
        frmPersons.TableGrid1.dbFilter := 'id_TabOtkaz='+FormGlavn.TableGrid2.sqlValue;
        frmPersons.TableGrid1.dbUpdate;
    end else
    begin
        frmPersons.TableGrid1.dbFilter := '';
        frmPersons.TableGrid1.dbUpdate;
    end;
    // отключенная кнопка пошаговые действия при не выделенной строке в таблице
    begin
    if FormGlavn.TableGrid2.SelectedRow = -1 then Cancel := True;
end;
end;



  // Окрашивание строк в главной таблицы
  
procedure FormGlavn_TableGrid2_OnChange (Sender: string);
var
    i,c,f,r: integer;
begin
    c := FormGlavn.TableGrid2.RowCount - 1;
    f := FormGlavn.TableGrid2.Columns.Count - 1;
  for i := 0 to c do
    begin   
      if FormGlavn.TableGrid2.Cells[0,i]='Нет'
          THEN
            for r := 0 to f do 
               FormGlavn.TableGrid2.Cell[r,i].Color := $008080FF; // закрашивание всей строки
    end;

end;


       // администрирование подчиненной таблицы

       // защитить от редактирования подчиненной таблицы



procedure formIzm_Button2_OnClick (Sender: string; var Cancel: boolean);
var
    sIdUser: string;
begin
    if isAdmin then Exit;

    sIdUser:=SQLExecute('SELECT id_users FROM TabDeystvPerson WHERE id='+IntToStr(formIzm.TableGrid1.dbItemID));
    if sIdUser<>IntToStr(idUser) then
    begin
        Cancel := True;      
        ShowMessage('У вас нет разрешения редактировать записи, которые не принадлежат вам.');
    end;
end;

     // защитить от удаления подчиненной таблицы
procedure formIzm_Button3_OnClick (Sender: string; var Cancel: boolean);
var
    sIdUser: string;
begin
    if isAdmin then Exit;

    sIdUser:=SQLExecute('SELECT id_users FROM TabDeystvPerson WHERE id='+IntToStr(formIzm.TableGrid1.dbItemID));
    if sIdUser<>IntToStr(idUser) then
    begin
        Cancel := True;
        ShowMessage('У вас нет разрешения удалять записи, которые не принадлежат вам.');
    end;
end;





begin
  //  Начала проверьте, есть ли пользователь, администратор базы данных
  // если нет, создать учетную запись администратора с именем пользователя admin и паролем admin
     if SQLExecute('SELECT count(id) FROM users;') = '0' then
     begin
         SQLExecute('INSERT INTO users (login, password, admin) VALUES ("admin", "admin", 1);');
         frmLogin.cbLogin.dbItemID:=1;
         frmLogin.edPassword.Text := 'admin';
     end;
     frmLogin.Button1.Default := True;
     formIzm.cbUser.Enabled:=false;

end.
 var
   sUser: string = '';
   idUser: integer;
   isAdmin: boolean = False;
   isCheckBox: boolean = False;
   sHello: string;
  /// BAR CHART //////

{== BAR CHART ===========================================================================================}

{== BAR CHART ===========================================================================================}



procedure formIzm_CheckBox1_OnKeyUp (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
     if (isCheckBox) and (formIzm.bOK.dbGeneralTableId>0) then
         SQLExecute('UPDATE TabOtkaz SET StatusOtkaza = ' + formIzm.CheckBox1.sqlValue + ' WHERE id = '+IntToStr(formIzm.bOK.dbGeneralTableId));
end;

procedure formIzm_CheckBox1_OnMouseUp (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
     if (isCheckBox) and (formIzm.bOK.dbGeneralTableId>0) then
         SQLExecute('UPDATE TabOtkaz SET StatusOtkaza = ' + formIzm.CheckBox1.sqlValue + ' WHERE id = '+IntToStr(formIzm.bOK.dbGeneralTableId));
end;


procedure frmLogin_bLogin_OnClick (Sender: string; var Cancel: boolean);
var
   s: string;
begin
     // SQL-запрос на регистрацию пользователя и пароль
     s := SQLExecute('SELECT count(id) FROM users WHERE (id = ''' + IntToStr(frmLogin.cbLogin.dbItemID) + ''') AND (password = ''' + frmLogin.edPassword.Text + ''');');

     // SQL-запрос найден логин и пароль
     if (s <> '0') and (s<>'') then
     begin
          sUser := frmLogin.cbLogin.Text; // запомнить имя пользователя
          idUser := frmLogin.cbLogin.dbItemID; // запомнить идентификатор пользователя в базе


          // Administrator?
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.bUsers.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.Button5.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.Button1.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.Button4.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.Button6.Visible:=False;
          if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else FormGlavn.bDelete.Visible:=False;

           // Can change CheckBox?
          if SQLExecute ('SELECT CheckBox FROM users WHERE id = '+IntToStr(idUser)) = '1' then isCheckBox := True;

          FormGlavn.Caption := 'User: ' + sUser;
          frmLogin.Close; // Закрыть главную форму
     end else MessageDlg('Некорректный пароль', mtError, mbOk, 0); // сообщение если неверный пароль

end;


procedure SavePersonal_OnShow (Sender: string; Action: string);
begin
    if Action = 'NewRecord' then SavePersonal.ComboBox1.dbItemID := idUser ;
end;

// мероприятия закрытия окна для входа
procedure frmLogin_OnClose (Sender: string; Action: string);
begin
     // если пользователь не определен, и Пользователь закрывает окно входа в систему, закройте главную форму
     if sUser='' then FormGlavn.Close;
end;


procedure formIzm_OnShow (Sender: string; Action: string);
begin
begin
    if Action = 'NewRecord' then formIzm.cbUser.dbItemID := idUser ;
end;
// удаление двойного клика по подчиненной таблице
begin
   FormGlavn.TableGrid2.dbPopupMenu.Items[0].Enabled:= False;
end;

end;


// защитить от удаления
procedure FormGlavn_bDelete_OnClick (Sender: string; var Cancel: boolean);
var
    sIdUser: string;
begin
    if isAdmin then Exit;

    sIdUser:=SQLExecute('SELECT id_users FROM TabOtkaz WHERE id='+IntToStr(FormGlavn.TableGrid2.dbItemID));
    if sIdUser<>IntToStr(idUser) then
    begin
        Cancel := True;
        ShowMessage('У вас нет разрешения удалять записи, которые не принадлежат вам.');
    end;
end;

// защитить от редактирования
procedure formIzm_bOK_OnClick (Sender: string; var Cancel: boolean);
begin
    if isAdmin then Exit;

    if idUser<>formIzm.cbUser.dbItemID then
    begin
        Cancel := True;
        ShowMessage('У вас нет разрешения редактировать записи, которые не принадлежат вам.');
    end;
end;



procedure FormGlavn_OnShow (Sender: string; Action: string);
begin
begin
     frmLogin.edPassword.PasswordChar := '*';
     frmLogin.ShowModal; // Форма для входа
     FormGlavn.mniAbout.OnClick := @MenuClickAbout;
     
end;
// удаление двойного клика по главной таблице
begin
   FormGlavn.TableGrid2.dbPopupMenu.Items[0].Enabled:= False;
end;

{== BAR CHART ===========================================================================================}

end;

procedure MenuClickAbout (Sender: string); // click in About menu item
begin
     frmAbout.ShowModal;
end;

procedure FormGlavn_TableGrid2_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
  zapolnenie();
end;

procedure FormGlavn_TableGrid2_OnKeyUp (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
   zapolnenie();
end;

procedure   zapolnenie ();
var  
 idS : string ;
begin
 idS := inttostr(FormGlavn.TableGrid2.dbItemID) ;
 FormGlavn.Obekt.text := SQLExecute('SELECT ob_name FROM tabobekt WHERE id =(SELECT id_tabobekt FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.Edit2.Text := SQLExecute('SELECT Name_Uzel FROM TabUselOborud WHERE id =(SELECT id_TabUselOborud FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.VneshProyavlOtkaza.Text := SQLExecute('SELECT Proyav_name FROM TabProyavlen WHERE id =(SELECT id_TabProyavlen FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.LitsoObnaruj.Text := SQLExecute('SELECT Obnarug_name FROM TabObnarug WHERE id =(SELECT id_TabObnarug FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.MetodUstraneniya.Text := SQLExecute('SELECT Metod_name FROM TabMetod WHERE id =(SELECT id_TabMetod FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.UsloviyaObnaruj.Text :=  SQLExecute('SELECT Usl_name FROM TabUslovia WHERE id =(SELECT id_TabUslovia FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.VidOborudovaniya.Text := SQLExecute('SELECT Vid_name FROM TabVid WHERE id =(SELECT id_TabVid FROM tabotkaz WHERE id = '+idS+')' ) ;
 FormGlavn.DefektNomer.Text := SQLExecute('SELECT DEF№ FROM tabotkaz WHERE id = '+idS ) ;
 FormGlavn.Edit4.Text := SQLExecute('SELECT ZAPAS FROM tabotkaz WHERE id = '+idS ) ;
 FormGlavn.Komentarii.Text := SQLExecute('SELECT Primechanie FROM tabotkaz WHERE id = '+idS ) ;
 FormGlavn.Edit3.Text := SQLExecute('SELECT OtcLico FROM tabotkaz WHERE id = '+idS ) ;

end;

// открытие файла руководство пользователя

procedure FormGlavn_Button3_OnClick (Sender: string; var Cancel: boolean);

begin

    OpenFile(ExtractFilePath(Application.ExeName) +'HelpR.chm');

end;

// нажатие скрытой кнопки

procedure FormGlavn_Button10_OnClick (Sender: string; var Cancel: boolean);

begin

   FormGlavn.Button10.Click

 end;

 // дубликат таблицы

      procedure FormGlavn_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
    if FormGlavn.TableGrid2.dbItemID <> -1 then
    begin
        frmPersons.TableGrid1.dbFilter := 'id_TabOtkaz='+FormGlavn.TableGrid2.sqlValue;
        frmPersons.TableGrid1.dbUpdate;
    end else
    begin
        frmPersons.TableGrid1.dbFilter := '';
        frmPersons.TableGrid1.dbUpdate;
    end;
    // отключенная кнопка пошаговые действия при не выделенной строке в таблице
    begin
    if FormGlavn.TableGrid2.SelectedRow = -1 then Cancel := True;
end;
end;



  // Окрашивание строк в главной таблицы
  
procedure FormGlavn_TableGrid2_OnChange (Sender: string);
var
    i,c,f,r: integer;
begin
    c := FormGlavn.TableGrid2.RowCount - 1;
    f := FormGlavn.TableGrid2.Columns.Count - 1;
  for i := 0 to c do
    begin   
      if FormGlavn.TableGrid2.Cells[0,i]='Нет'
          THEN
            for r := 0 to f do 
               FormGlavn.TableGrid2.Cell[r,i].Color := $008080FF; // закрашивание всей строки
    end;

end;


       // администрирование подчиненной таблицы

       // защитить от редактирования подчиненной таблицы



procedure formIzm_Button2_OnClick (Sender: string; var Cancel: boolean);
var
    sIdUser: string;
begin
    if isAdmin then Exit;

    sIdUser:=SQLExecute('SELECT id_users FROM TabDeystvPerson WHERE id='+IntToStr(formIzm.TableGrid1.dbItemID));
    if sIdUser<>IntToStr(idUser) then
    begin
        Cancel := True;      
        ShowMessage('У вас нет разрешения редактировать записи, которые не принадлежат вам.');
    end;
end;

     // защитить от удаления подчиненной таблицы
procedure formIzm_Button3_OnClick (Sender: string; var Cancel: boolean);
var
    sIdUser: string;
begin
    if isAdmin then Exit;

    sIdUser:=SQLExecute('SELECT id_users FROM TabDeystvPerson WHERE id='+IntToStr(formIzm.TableGrid1.dbItemID));
    if sIdUser<>IntToStr(idUser) then
    begin
        Cancel := True;
        ShowMessage('У вас нет разрешения удалять записи, которые не принадлежат вам.');
    end;
end;





begin
  //  Начала проверьте, есть ли пользователь, администратор базы данных
  // если нет, создать учетную запись администратора с именем пользователя admin и паролем admin
     if SQLExecute('SELECT count(id) FROM users;') = '0' then
     begin
         SQLExecute('INSERT INTO users (login, password, admin) VALUES ("admin", "admin", 1);');
         frmLogin.cbLogin.dbItemID:=1;
         frmLogin.edPassword.Text := 'admin';
     end;
     frmLogin.Button1.Default := True;
     formIzm.cbUser.Enabled:=false;

end.

Но все же задача стоит срыть от юзера и показать админу.

Подскажите пож как срыть меню (Инструменты) в программе, чтобы они видны были только администратору. Заранее спс за ответ.

скиньте пож кнопочный редактор. заранее спс.