Фиксация имени пользователя вошедшего в базу в таблице

Inkeria

Здравствуйте! В БД работают несколько пользователей (используется файл сведений о рабочей группе). Как в отдельном поле таблицы сделать фиксацию имени пользователя, который внес данные? В запрос добавляю функцию CurrentUser(), но она проставляет имя пользователя, который открыл запрос.
14 ответов

Inkeria

а как же по другому? пользователь открыл запрос, внес данные - они сохранились. Какое имя сохранится? Понятно? А вот мне не очень. Поэтому, запрос в студию, плиз.


Inkeria

Поле1 Поле2 Пользователь:CurrentUser()Пользователь1 внес данные в Поле1, Поле2. В поле Пользователь отобразилось Пользователь1. Сохранил. Закрыл. Пользователь2 открыл запрос и в поле Пользователь в ранее внесенных строках Пользователем 1 отобразилось - Пользователь2. В чем может быть проблема?


Inkeria

действие надо разбить на 2 1. создание новых данных (может даже отдельная форма, может таже, но с проверками в ВБ. в Вашем случае пока лучше отдельная форма, чтобы долго с басиком не морочиться) 2. Редактирование данных (вместо CurrentUser() данные из таблицы) =================== В таблице в поле Пользователь убрать CurrentUser(), только в форме при создании (форма 1)


Inkeria

Надо создать новую форму не опираясь на существующие запросы и таблицы? В таблице не было этого поля. Оно было создано как выражение в запросе.


Inkeria

У меня в таблице не было этого поля. Оно было создано как выражение в запросе.
так вас текст запроса и просили опубликовать. в SQL.


Inkeria

SELECT [Справочник клиентов].Клиент, [Справочник клиентов].[Код клиента], [Справочник клиентов].[Номер налогового свидетельства], CurrentUser() AS Пользователь
FROM [Справочник клиентов];


Inkeria

Это
CurrentUser() AS Пользователь
где хранится? в смысле хранится ли это вообще где-то или только используется функция CurrentUser()? Если нет, то нужно хранить в поле в таблице [Справочник клиентов] иначе ничего не получится, а далее как я сказал выше


Inkeria

угу. а должно быть что-то вроде Запрос на сохранение:
INSERT INTO [Справочник клиентов]
SELECT [Справочник клиентов].Клиент, [Справочник клиентов].[Код клиента], [Справочник клиентов].[Номер налогового свидетельства], CurrentUser() AS Пользователь
FROM [Справочник клиентов];
Активируетса из формы, по отдельной кнопочке.


Inkeria

Запрос на сохранение:
INSERT INTO [Справочник клиентов]
SELECT [Справочник клиентов].Клиент, [Справочник клиентов].[Код клиента], [Справочник клиентов].[Номер налогового свидетельства], CurrentUser() AS Пользователь
FROM [Справочник клиентов];
Активируетса из формы, по отдельной кнопочке.
это когда форма 1, или кнопка отдельная для сохранения записи


Inkeria

Буду пробовать. Спасибо!Запрос на добавление сделала, только он у меня не работает Создала форму на основе таблицы Справочник клиентов. Добавила кнопку. При нажатии кнопки запускается макрос на открытие этого запроса. Наверно, не так надо делать?


Inkeria

если Вы сделали так, как сказал товарисч Patch, а я не думая подтвердил, )тем более что я не подтверждал), конечно ничего не получится. самое лучшее, если в этой ситуации вообще ничего не получится. Потому как может получится добавление всех данных из таблицы [Справочник клиентов]


Inkeria

может получится добавление всех данных из таблицы [Справочник клиентов]
Так все и произошло


Inkeria

Еще бы. я и написал "что-то вроде". Это пример вставки в таблицу, а не руководство.


Inkeria

1. создайте ТМР-таблицу (временно-постоянную))) со структурой как [Справочник клиентов]. 2. в поле Пользователь этой таблицы значение по умолчанию - функция CurrentUser(). 3. на ее основе постройте форму для записи данных. 4. на кнопку код вызова запроса
INSERT INTO [Справочник клиентов]([Клиент],[Номер налогового свидетельства],[Пользователь])
SELECT [TMPTable].Клиент, [TMPTable].[Номер налогового свидетельства], [TMPTable].[Пользователь]
FROM [TMPTable]
WHERE [TMPTable].[Пользователь]=CurrentUser();
Inkeria, у Вас [Справочник клиентов].[Код клиента] это счетчик?5. по закрытию формы код вызова запроса
DELETE * FROM [TMPTable]
WHERE [TMPTable].[Пользователь]=CurrentUser();