Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Доступ к полям текущей строки таблицы из запроса в "источнике строк"

Возможно ли получить доступ к полям текущей строки таблицы из запроса в "источнике строк"?

Есть три таблицы.
1. Персонал (номер, ФИО)
2. Преподает (персонал_номер, Предмет)
3. Расписание (Предмет, день_недели, Преподаватель)

Используется Access.
Как сделать так, чтобы при редактировании 3й таблицы при выборе предмета отсеивалась часть преподавателей, т.е. оставались только те, кто преподает этот предмет.

При использовании подстановки нужно в источник строк написать такой запрос:
SQL
1
2
3
SELECT Персонал.ФИО
 FROM Персонал, Преподает
 WHERE Персонал.номер=Преподает.номер AND ПРЕДМЕТ=Преподает.предмет;
Так вот вопрос: что нужно написать вместо ПРЕДМЕТ, чтобы получить значения предмета текущей строки.

Другими словами, как получить значения предмета текущей (которая вводится сейчас) строки, чтобы ее в запрос записать?
Ответ: ltv_1953, вот мы и ответили на первоначальный вопрос: "Возможно ли получить доступ к полям текущей строки таблицы из запроса в "источнике строк?" Ответ: "Можно, но только один раз для каждого поля (столбца). Поэтому рабочего диалога из таблицы не получится.
Сообщение от ltv_1953
Читайте самое начало - таблицы объект не программируемый ... . Типа обратиться в полю можно (это же решено), а вот изменение при переходе ... . И, еще раз, таблицы только для хранения данных (во всех базах, не только в Аксессе), не нужно пытаться сделать из них интерфейс ввода данных - для это есть формы.
".
ltv_1953 и PuhKMV, огромное спасибо за помощь!
Вопрос: Разработать триггер, запускаемый при удалении строки таблицы

Разработать триггер, запускаемый при удалении строки таблицы. Удаленная строка должна быть переписана во вспомогательную таблицу. Мне бы хотя бы примеры нужны. Плиз.
Ответ:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE TRIGGER [dbo].[PUB_Persons_AfterDelete_Log] ON [dbo].[PUB_Persons]
AFTER DELETE
AS
BEGIN
  INSERT INTO [dbo].[PUB_Persons_Log](
    [_QueryType], [ID], [LastName], [FirstName], [MiddleName], [Sex], [Birthday]
  )
    SELECT
      3, [ID], [LastName], [FirstName], [MiddleName], [Sex], [Birthday]
    FROM deleted
END
где PUB_Persons_Log таблица, аналогичная PUB_Persons, но у которой чуть больше полей, в которых отражается когда, кем и что (3 - удаление, так же логгируются вставка и корректировка) было сделано в таблице

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE [dbo].[PUB_Persons_Log](
    [_ID] [int] IDENTITY(1,1) NOT NULL,
    [_LogMoment] [datetime] NULL DEFAULT (getdate()),
    [_QueryType] [int] NOT NULL,
    [_Host] [varchar](50) NULL DEFAULT (host_name()),
    [_User] [varchar](50) NULL DEFAULT (suser_sname()),
    [ID] [int] NOT NULL,
    [LastName] [varchar](255) NULL,
    [FirstName] [varchar](255) NULL,
    [MiddleName] [varchar](255) NULL,
    [Sex] [int] NULL,
    [Birthday] [datetime] NULL,
 CONSTRAINT [PK_PUB_Persons_Log] PRIMARY KEY CLUSTERED 
(
    [_ID] ASC
)
) ON [PRIMARY]
Вопрос: Разный результат при запросе одной и той же строки таблицы

Кто может объяснить, почему получаю разный результат по одной и той же строке таблицы (от ANSI_PADDING OFF отказаться нельзя) :
-- создание таблицы с ansi_padding off
set ansi_padding off
GO
create table #t (a char(3) null)
GO
set ansi_padding on
GO
insert #t values ('1')
GO
-- 1 запрос
select a+'!' 
from(
select a from #t
union all
select '2'
) b
-- 2 запрос
select a+'!' from #t

Результат :

----
1 !
2!

(2 row(s) affected)


----
1!

(1 row(s) affected)

Ответ:
Даутов
А что будет с полями в существующих таблицах, у которых в момент создания было SET ANSI_PADDING OFF ?
Наверно, в этом случае не удастся вот так просто перейти на новую версию сервера.
Вопрос: Выгрузка всех данных строки таблицы Access в файл Excel

Приветствую!
Подскажите пожалуйста как сделать:
Есть форма для заведения информации.
Нужна кнопка, нажав которую все данные строки таблицы соответствующие текущему ключевому полю экспортировались в файл Excell с пути сохранения и именем файла = "поле1+поле2", н-р "Фамилия Имя".
Спасибо!!!
Ответ: СПАСИБО!
В вс попробую.
Вы правы: источник данных - таблица, форма простая, подформы нет. Excell 2010.
По вашему способу должно все работать ) отпишусь.
Вопрос: Необходимо узнать какие таблицы в БД пустые

Доброго времени суток.
Возникла следующая ситуация - необходимо узнать какие таблицы в БД не имеют данных, т.е. пустые.. все таблицы перебирать накладно - помогите автоматизировать труд.
Ответ: akasha9,

pg_class поле reltuples
Вопрос: Используем безопасность на уровне строк таблиц (Row-level Security)

В версии Caché 2007.1 появилась возможность управлять в SQL безопасностью на уровне строк таблиц (Row-level Security).

Это реализуется следующим образом: появляется системный столбец, который содержит список ролей и/или пользователей, которые имеют доступ к каждой строке таблицы. Когда выполняется запрос пользователь должен иметь хотя бы одну роль, для того чтобы увидеть строку. Как правило, список ролей вычисляется на основании данных таблицы и при изменениях строки автоматически вычисляется новый список ролей. За счет индексирования системного столбца безопасность на уровне строк таблиц лишь незначительно уменьшает производительность SQL.

Вот небольшой пример:

1. Создайте класс Test.RowLevelSecurity
Class Test.RowLevelSecurity Extends (%Persistent%Populate)
{
Property Name As %String(POPSPEC "Name()");
Property DOB As %Date;

Parameter ROWLEVELSECURITY = 1;

ClassMethod %SecurityPolicy(NameAs %String SqlProc ]
{
 
if $e(Name,1)="S" {quit "Vadim,_SYSTEM"else {quit "Vadim"}
}
}
2. Создайте пользователя Vadim с правами работать через SQL.
3. Сгенерируйте тестовые данные: Do ##class(Test.RowLevelSecurity).Populate(1000)
4. Зайдите в портал управления под пользователем Vadim и выполните SQL-запросы:

select * from Test.RowLevelSecurity
select count(*from Test.RowLevelSecurity

Вы должны увидеть все 1000 строк, которые Вы сгенерировали.
5. Зайдите в портал управления под пользователем _System и выполните SQL-запросы:

select * from Test.RowLevelSecurity
select count(*from Test.RowLevelSecurity

Вы должны увидеть только строки, которые начинаются на “S” и получить количество таких строк.

Есть возможность использовать безопасность на уровне строк таблиц и для существующих таблиц.


Обратите внимание, что безопасность на уровне строк таблиц работает только на уровне SQL и не работает при прямом или объектном доступе.


Вадим
Ответ:
Вопрос: ГПР по строке таблицы

Доброго времени суток
Прошу помощи, совета. Есть таблица в базе данных (как пример):
ID 'код (ключевое поле)
Name 'Имя, ник, название чего либо (например изделия, детали и т.д.)
Data1 'Дата №1
Data2 'Дата №2
Data3 'Дата №3
Data4 'Дата №4
Data5 'Дата №5
где Data - меняющиеся даты производства ремонта нашего изделия, данные поля могут быть в т.ч. пустыми (срок не наступил) т.к. ремонты производятся в различные сроки (периоды) - полугодовые, годовые, через три года, через пять лет и т.д.
Вопрос в следующем: подскажите способ нахождения у полей кортежа (строки) таблицы формата Data - максимального значения из числа дат. Нужно что то подобие функции ГПР (как в ms excel) по строке.
По итогу в отдельном вычисляемом поле максимума (в идеале) хотелось бы получить результат, запись (как пример): "Название ремонта: "&[Max-Data]. Неужели для получения результата нужно писать в построителе длиннющий вложенный IIf (сопоставляя даты между собою)? Существуют ли другие способы(м.б. какой функцией в VBA)?
Ответ: Нет ремонтов более нет, поля ежегодных ремонтов будут обновляться - всего конечно полей 5, менять ничего не требуется

Добавлено через 8 минут
Тогда максимальная дата ремонта ищется ищется в запросе с группировкой по ID и агрегатной MAX.

нет это не совсем то
поясняю
ремонты делятся на технические обслуживания и плановые - в заводе, в депо. у всех свои сроки наступления + сроки могут зависеть от даты постройки нашей детали. Суть в том, что мы находим не просто дату, а конкретно вид планового ремонта и дату его проведения. К примеру: Деповской ремонт (ДР): 09.08.2016.

Добавлено через 23 минуты
Прикинул тут - Ваш вариант то же, что и обычный перекрестный запрос, но мне в поле нужно получить 1. вид ремонта 2. дату этого вида ремонта. От варианта его вида и даты уже будет исчисляться очередной плановый уже ремонт.
Вопрос: Как реализуется запрос на удаление строки таблицы

Доброго времени суток форумчане. Подскажите как реализуется запрос на удаление строки таблицы (удовлетворяющий определённым критериям) в VBA. Нужно что бы при нажатии кнопки на форме запускалась программа удаляющая строку (если такая стока есть в таблице). Хотелось бы получить подробный ответ (так как в SQl е силён), понять какие переменные нужно при этом вводить.
Ответ: Конретно то, что вы попробовали и увас не получилсоь в студию, будем искать ошибку.
Вопрос: выгрузить в xml описание и все строки таблицы: dbms_metadata?

Цель: слить в XMLник табличку со всеми данными.

Уважаемые форумчане,
подскажите, пожалуйста, возможно ли выгрузить описание структуры таблицы и все ее данные в XML-файл при помощи dbms_metadata?

Мне известно, что структуру - можно. Пакет рекомендуется использовать вместо imp/exp.
Но imp грузит еще и данные таблицы.

Подскажите, можно ли выгрузить в XML строки таблицы. И какими инструментами надо воспользоваться.

Спасибо.
Ответ: А возможно ли выгрузить XML схему по которой
dbms_xmlquery.getxml
dbms_xmlgen.getxml дают данные?
Вопрос: Запрос к строкам таблицы последовательно

Как сформировать sql запрос к строкам таблицы, дабы перебрать их последовательно. В таблице form 10000 записей и уникальное поле только с инкрементом, выбрать все вот так:
SQL
1
SELECT * FROM form
но это не то.
Ответ:
Сообщение от Satansoft
будет выбор следующего поля
SQL
1
LIMIT v_Beg, v_End
и при каждом обращении наращивать переменные v_Beg, v_End