Я делал так:
- на форме записи спрятан Едитбокс (он больше ни для чего мне не нужен), в который копируется логин  с формы входа.
- в главной таблице колонка user
- в таблице данных журнала колонка user
Фрагмент кода:

procedure frmDocProcessingShort_bOK3_OnClick (Sender: string; var Cancel: boolean);
var
   sCurrentDate: string;
   sDocNameNAF: string;
   sOperation: string;
   sUser: string;
   sForm: string;
begin
     sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn:ss.000', now) + '"';
     sDocNameNAF  := '"'+frmDocProcessingShort.MemoDocName3.Text+'"';
     sUser  := '"'+frmDocProcessingShort.user.Text+'"';
     sForm  := '"'+frmDocProcessingShort.form.Text+'"';

     if sLastActionForm = 'NewRecord' then sOperation := '"Додано"';
     if sLastActionForm = 'ShowRecord' then sOperation := '"Змінено"';

     SQLExecute ('INSERT INTO logNAF (date, user, form, operation, docNameNAF)' +
     'VALUES ('+sCurrentDate+', '+sUser+', '+sForm+','+sOperation+','+sDocNameNAF+')');
     frmActions1.tgActions1.dbUpdate;
end; 

В итоге у меня в журнале пишется логин. Кроме того, таким же образом через sForm у меня учитываются таблицы ( а их три , на форме заполнения каждой - едитбокс, в нём некое значение по умолчанию), по которым была работа:

procedure frmDocProcessingNAF_OnShow (Sender: string; Action: string);
begin
     frmDocProcessingNAF.user.Text:=sUser; // запись логина в EditBox на frmDocProcessingNAF
     frmDocProcessingNAF.form.Text := 'НАФ';
     sLastActionForm := Action;

327

(7 replies, posted in Russian)

kunar80 wrote:

А если в моём проекте основных гридов три? Мне кажется, что журнал всё равно можно сделать один? Ведь значения пишуться в другую таблицу ( у Вас это logs), и в неё можно собрать все необходимые колонки из трёх гридов?

Работает. Но проблема с ID. В logs записал id_doc. В скрипте: sDoc1ID, sDoc2ID и sDoc3ID. sDoc1ID работает правильно, а sDoc2ID и sDoc3ID пишут значение "-1" на любую операцию.
Впрочем, думаю, что мне от ID лучше вообще отказаться, так как у меня учитываются документы, каждый из которых имеет свой собственный номер.  И проблема отпадёт сама собой.

328

(28 replies, posted in Russian)

Подскажите, как переписать этот код импорта

procedure frmChoice_bImportNAF_OnClick (Sender: string; var Cancel: boolean);
var
   OpenDialog: TOpenDialog;
   sl: TStringList;
   arrStr: array of string;

   i,c: integer;

   sid_sked: string; //опись
   sDocNumNAF: string; //номер дела
   sDocNameNAF: string; //название
   sid_year: string; //год формирования
   sid_period: string; //срок хранения
   sPagesNAF: string; //количество страниц
   sNoteNAF: string; //примечание

   YY, MM, DD: string;


begin

     OpenDialog := TOpenDialog.Create(frmChoice);
     if OpenDialog.Execute then
     begin
          sl := TStringList.Create;
          sl.LoadFromFile (OpenDialog.FileName); ///открытие файла




          c := sl.Count - 1;
          for i := 1 to c do
          begin
               arrStr := SplitString(sl[i], ';');


               //0 sid_sked
               if arrStr[0] <> '' then
               begin
                    sid_sked := SQLExecute ('SELECT id FROM sked WHERE sked LIKE "' + arrStr[0] +'"');
                    if sid_sked = '' then
                    begin
                         SQLExecute ('INSERT INTO sked (sked) VALUES ("'+ arrStr[0] +'");');
                         sid_sked := IntToStr(Last_Insert_id('sked'));
                         if sid_sked = '-1' then sid_sked := 'NULL';
                    end;
               end else sid_sked := 'NULL';


               //1 sDocNumNAF
               if arrStr[1]<>'' then sDocNumNAF := '"'+arrStr[1]+'"' else sDocNumNAF := 'NULL';


               //2 sDocNameNAF
               if arrStr[2]<>'' then sDocNameNAF := '"' +  ReplaceStr(arrStr[2], '"', '""') + '"' else sDocNameNAF := 'NULL';


               //3 sid_year
               if arrStr[3] <> '' then
               begin
                    sid_year := SQLExecute ('SELECT id FROM year WHERE year LIKE "' + arrStr[3] +'"');
                    if sid_year = '' then
                    begin
                         SQLExecute ('INSERT INTO year (year) VALUES ("'+ arrStr[3] +'");');
                         sid_year := IntToStr(Last_Insert_id('year'));
                         if sid_year = '-1' then sid_year := 'NULL';
                    end;
               end else sid_year := 'NULL';


               //4 sid_period
               if arrStr[4] <> '' then
               begin
                    sid_period := SQLExecute ('SELECT id FROM period WHERE period LIKE "' + arrStr[4] +'"');
                    if sid_period = '' then
                    begin
                         SQLExecute ('INSERT INTO period (period) VALUES ("'+ arrStr[4] +'");');
                         sid_period := IntToStr(Last_Insert_id('period'));
                         if sid_period = '-1' then sid_period := 'NULL';
                    end;
               end else sid_period := 'NULL';


               //5 sPagesNAF
               if arrStr[5]<>'' then sPagesNAF := '"'+arrStr[5]+'"' else sPagesNAF := 'NULL';


               //6 sNoteNAF
               if arrStr[6]<>'' then sNoteNAF := '"'+arrStr[6]+'"' else sNoteNAF := 'NULL';



               SQLExecute ('INSERT INTO one (id_sked, [docNumNAF], [docNameNAF], id_year, id_period, [pagesNAF], [noteNAF]) VALUES ('+
               sid_sked +','+
               sDocNumNAF +','+
               sDocNameNAF +','+
               sid_year +','+
               sid_period +','+
               sPagesNAF +','+
               sNoteNAF +
               ');');


               frmChoice.Label8.Caption := IntToStr(i) + ' of ' + IntToStr(c);
               Application.ProcessMessages;
          end;



          sl.Free;
          UpdateDatabase('sked');
          UpdateDatabase('year');
          UpdateDatabase('period');
          frmChoice.TableGrid1.dbUpdate;
     end;
     OpenDialog.Free;
begin
     frmChoice.bSearch1.Click;  ////!!!!!Нажатие на кнопку ПОИСК (при этом видимые записи таблицы обновляются)
end;

end;

чтобы вместо диалога выбора файла открывалась конкретная предсозданная папка с шаблонами csv,

begin
OpenFile('d:\Archive 1.01\ImportCSV');
end;

в которой лежат несколько разных шаблонов csv по количеству кнопок импорта в проекте?
Т.е., если у меня есть три грида, и каждому из них соответствует своя кнопка "Импорт", то при клике на кнопке пользователь должен попасть в папку, в которой лежат три файла csv и выбрать нужный.

329

(7 replies, posted in Russian)

DriveSoft wrote:

kunar80
К сожалению не вспомню сходу ваш проект )
но думаю в любом случае можно )

Проект я Вам сегодня уже отправил. Если не затруднит, посмотрите. Есть там непонятки не работающие. Скрипты не ругаются, но и не работают.  Что касается этой темы, то делал я для одного грида, но он так и не заработал. После отладки первого хотел записать два другие, но, пожалуй, лучше всё же пробовать всё свести в один журнал.

330

(7 replies, posted in Russian)

DriveSoft wrote:

можно с помощью скриптов, пожалуйста, скачайте этот проект в качестве примера

Дмитрий! А если в моём проекте основных гридов три? Мне кажется, что журнал всё равно можно сделать один? Ведь значения пишуться в другую таблицу ( у Вас это logs), и в неё можно собрать все необходимые колонки из трёх гридов?

При клике на кнопке ОК компонента ShowMessage('Файла нет') открывается директория проекта.
Скрипт записан так:

procedure frmDocProcessingNAF_view_OnClick (Sender: string; var Cancel: boolean);
begin
     if frmDocProcessingNAF.DBFileNAF.dbFileName <> '' then OpenFile(frmDocProcessingNAF.DBFileNAF.dbFileName)
     else ShowMessage('Файла нет');
     OpenFile(frmDocProcessingNAF.DBFileNAF.dbFileName);  
end;

Работает Но при отсутствии прикрепленного файла открывает "Мои документы" !!!?????

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
     OpenFile(Form1.DBFile1.dbFileName);
end;

И ещё вопросик по DBFile. Сейчас проект все файлы складывает в папку 'files'. А так как файлы несут разную по содержанию информацию, хотелось бы иметь адрес 'files/files1' для одного DBFile, 'files/files2'  для другого и т.д.
Создал в папке 'files' папку 'files1' и так записал скрипт:

procedure Form1_DBFile1_OnChange (Sender: string);
begin
Form1.DBFile1.dbInitialDir := 'files/files1';     
end;

Но ничего из этого не вышло. По прежнему пишет в папку 'files' .
Попробовал так, создав папку 'files1', но и 'files' оставив:

procedure Form1_DBFile1_OnChange (Sender: string);
begin
Form1.DBFile1.dbInitialDir := 'files1';     
end;

Увы, результат тот же - пишет в 'files' .

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

ЗАПИСЬ С УКАЗАНИЕМ ПОЛЬЗОВАТЕЛЯ, КОТОРЫЙ ЕЁ СОХРАНИЛ

motorolla wrote:

а если немного усложнить проект - сохранить запись с указанием  пользователя, который сохранил? Так же возможно?

Как в компоненте DBFile для пользователя "НЕ АДМИН" программно отключить "Open folder with file"?

          // проверка прав администратора
          s := VarToStr( SQLExecute('SELECT administrator FROM users WHERE (login = ''' + sUser + ''');') );
          if s='0' then frmChoice.bSetting.Enabled := False; // если пользователь не обладает правами администратора, отключить кнопку

Что в этот скрипт дописать?

Спасибо, Дмитрий! Только что открыл эту тему на форуме. Теперь удалю её.

338

(6 replies, posted in Russian)

Измените фильтр.

ВХОД ЧЕРЕЗ ЛОГИН И ПАРОЛЬ. КОНТРОЛЬ ПОСЕЩЕНИЯ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯМИ ПО ЛОГИНУ, ИМЕНИ ПОЛЬЗОВАТЕЛЯ КОМПЬЮТЕРА, ДАТЕ И ВРЕМЕНИ ВХОДА И ВЫХОДА. ОПРЕДЕЛЕНИЕ ПРАВ ПОЛЬЗОВАТЕЛЕЙ ЧЕРЕЗ СКРИПТ. ДИАЛОГ ПРИ ВЫХОДЕ.

motorolla wrote:

а возможно ли вывести информацию о текущем пользователе, т.е. пользователе под чьим именем осуществлен вход?

Ответ в тестовом проекте.
Проект перезалит: добавлены определение прав пользователей и диалог (хотя, диалог здесь не идёт - он добавляет ещё одну фиксацию времени выхода, поэтому в скрипте он явно лишний).
БЫЛА ОШИБКА (смотрите далее в комментариях). Исправлено 15.12.2014

Вот то, что получилось. Но какая-то непонятка с правами пользователей. Устанавливаю для гостя возможность только просматривать и искать, а вхожу в проект как гость, и свободно удаляю записи.

Спасибо, работает. А чтоб обновлялось в компоненте - это мне и не нужно.

При входе в проект активные компоненты Дата/время timeEntry и timeExit зафиксировали время входа, причём timeEntry это время записал в грид. Но дальше отсчёт времени в компонентах не идёт. В компоненте timeExit так и застыло время входа в проект. Мне нужно, чтобы при выходе из проекта в грид было записано время выхода. Ни в свойствах компонента, ни в его скриптах не нашёл, как сделать, чтобы компонент продолжал отсчёт времени в течение работы в проекте. Сейчас в грид упорно пишется одно и то же время с компонентов timeEntry и timeExit

343

(237 replies, posted in Russian)

DriveSoft wrote:

у вас в скрипте строки закомментированы и исполнены не будут.

Закомментировал специально здесь, чтобы видно было как я пытался написать скрипт. В скрипте проекта этого //№1 конечно же нет!

344

(237 replies, posted in Russian)

Спасибо, Дмитрий! И в догонку ещё вопросик:

procedure frm1_OnShow (Sender: string; Action: string);
begin
// 1)          frmAdd.Button1.Default := True; // необходимо, чтобы кнопка Button1 автоматически нажималась при входе в главную форму frm1
// 2)          frmAdd.Button1.OnClick; //необходимо, чтобы кнопка Button1 автоматически нажималась при входе  в главную форму frm1
frmAdd.login.Text:=sUser;
end;

Не затруднит ли помочь со скриптом? Мои жалкие попітки №№ 1 и 2 не работают

345

(237 replies, posted in Russian)

Возможно ли проект связать с профилем пользователя компьютера? Чтобы в EditBox на проекте отображалось имя пользователя компьютера?

346

(237 replies, posted in Russian)

Всем спасибо. Решил сам.

347

(237 replies, posted in Russian)

Как организовать вход в прект для гостя?
Нужно чтобы
1) При выборе в комбобоксе логина "Гость" в текстбоксе пароля программно появлялся его пароль, записанный в словаре пользователей.
2) Если выбран "Гость", то: и далее запреты и разрешения. В примере это блокирование двух кнопок.

А ещё и такое выдаёт:

Чучкин Евгений wrote:

скорее всего сперва в поисковике ввели параметры а потом структуру поменяли базы а в формах не поправили. так не опредлить - нужен проект

Отправил в личку на mail.ru

Второй день бьюсь как рыба об лёд. Ну никак не могу найти ошибку! Посмотрите свежим взглядом.