|
|
|
| Вообщем у меня есть 3 таблицы
1)Принтеры(поля принтер S/N,модель)
2)Сотрудники/Принтеры(пол Код,ответственный,принтер S/N)
3)АРМ(ответственный за АРМ,должность)
Связь в таблице-многие ко многим
Допустим такая ситуация,я завёл в базу принтеров 3 новых принтера,2 из них я привязал к сотрудникам,3тий остался пустым,т.е. не один сотрудник им не владеет,как сделать запрос,чтобы показывался именно принтер которым никто не владеет,помогите пожалуйста!!! | |
|
| |
|
|
|
| используйте left join и is null | |
|
| |
|
|
|
| можно пободробнее,можно даже с примером,было бы супер!!! | |
|
| |
|
|
|
|
select p.*,s.*
from printers as p
left join sotrudniks s on p.sotrudinkid=s.id
where s.id is null
|
| |
|
| |
|
|
|
| SELECT Принтер.*, Сотрудник/Принтер.*
FROM Принтер AS Принтер.Принтер(S/N)
LEFT JOIN Сотрудник/Принтер ON Принтер.Принтер(S/N)= Сотрудник/Принтер.Ответственный за эксплуатацию
WHERE Сотрудник/Принтер.Ответственный за эксплуатацию IS NULL
Выражение содержит ошибочный подчинённый запрос @.
Сильно не ругайтесь!!) | |
|
| |
|
|
|
| не буду :)
Принтер(S/N)
Сотрудник/Принтер
|
просто руки отрубал бы за такие названия таблиц, полей | |
|
| |
|
|
|
| Вообщем таблицы =) :
| Сотрудники/Принтер |
---------------------------------------------- |
|Код |
|Ответственный за эксплуатацию |
|Принтер (S/N) |
Принтер |
---------------------------------- |
Принтер(S/N) ||
Модель ||
инвентарный номер || | |
|
| |
|
|
|
| Сотрудник/Принтер
как избежать в запросе символа /,он на него ругается,кроме переименовывания | |
|
| |
|
|
|
| Заключите имя поля в квадратные скобки [] | |
|
| |
|
|
|
| переименовал таблицу
запрос выглядит так
SELECT Принтер.*, СотрудникиПринтер.*
FROM Принтер LEFT JOIN СотрудникиПринтер ON Принтер.[Принтер(S/N)]=СотрудникиПринтер.[Ответственный за эксплуатацию]
WHERE СотрудникиПринтер.[Ответственный за эксплуатацию] Is Null;
но ничего не работает все равно че то (я имею в виду все записи выдаёт так же | |
|
| |
|
|
|
| возьми собери запрос "записи без подчиненных" - макросом - и лукни как он его делает
Принтер.[Принтер(S/N)]=СотрудникиПринтер.[Ответственный за эксплуатацию] - полная хрень
наверно так правильно
Принтер.[Принтер(S/N)]=СотрудникиПринтер.[Принтер(S/N)] | |
|
| |
|
|
|
| совет - пока не поздно переименуй английскими буковками поля и таблы - и убери слешы
жить будет легче в дальнейшем значительно | |
|
| |
|
|
|
| SELECT Принтер.*
FROM Принтер LEFT JOIN Сотрудники ON Принтер.S_n = Сотрудники.[Принтер S_N]
WHERE (((Сотрудники.[Принтер S_N]) Is Null)); | |
|
| |
|
|
|
| Спасибо огромное!!!!!!Всё получилось | |
|
| |
|
|
|
| Тогда еще один вопрос
У меня есть список сотрудников,но допустим не у всех есть принтер,который прикреплён к нему,как сделать запросы,чтобы выводились на экран все сотрудники,с принтерами и без
В конструкторе создаётся запрос при помощи INNER JOIN...поэтому показываются сотрудники,у которых только есть принтеры
SELECT СотрудникиПринтер.[Ответственный за эксплуатацию], Принтер.*
FROM Принтер INNER JOIN СотрудникиПринтер ON Принтер.[Принтер(SN)]=СотрудникиПринтер.[Принтер(SN)]; | |
|
| |
|
|
|
|
| Без принтеров
SELECT СотрудникиПринтер.[Ответственный за эксплуатацию]
FROM СотрудникиПринтер
Where СотрудникиПринтер.[Принтер(SN)] is null
с Принтерами
SELECT СотрудникиПринтер.[Ответственный за эксплуатацию]
FROM СотрудникиПринтер
Where СотрудникиПринтер.[Принтер(SN)] is not null | |
|
| |
|
|
|
| Блин. Принтеры, сотрудники, inner joinы... Как понимаю, база по учету материальных средств. Если так, то должна быть таблица тип матсредств, под которой уже различные модели принтеров и прочего. Если есть таблица сотрудников, (что вовсе необязательно), то можно назначать сотруднику различные матсредства и видеть их тип. Потом простой запрос с участием 2 или 3 (в зависимости от структуры базы) таблиц, в которой будет колонка "Тип средств". Ставим условие "<> принтер" и получаем список сотрудников, у которых есть все, кроме принтеров. Ставим "=принтер" и получаем всех с принтерами (и даже конкретные модели, инвентарные, серийные). А если взять подчиненным запросом, то будет красиво. Сотрудник и под ним все его принтера (если их у него много) | |
|
| |
|
144 Кб. |
|
| рисунок на память =>
(скачал случайно из инета) | |
|
| |
|
|
|
|
| Еще вопрос,допустим у меня есть поле,источник данных в нём определён
=[подчиненная форма Свободные_Принтеры].Form![Принтер(SN)]
Возможность изменения данных,в этом поле уже я так понимаю не получится??они просто не меняются когда хочу ввести всё значение.Можно это как нибудь обойти?Блокировки нету доступ к данных есть в свойствах поля | |
|
| |
|
|
|
| можно сделать поле пусты а на Открытие формы повесить обработку
Me.Поле=[подчиненная форма Свободные_Принтеры].Form![Принтер(SN)]
поле примет нужное значение а при желании его можно поменять | |
|
| |
|
|
|
|
| Искал решение пробелмы,гуглил целыми сутками,так и не нашел
Вообщем ситуация такая.
Есть форма,в ней 2 подчинённые.Работаю с одной подчинённой формой,когда там удаляю запись,путём нажатия на запись правой клавишей,и в контекстном меню выбираю удалить,нужно чтобы другая подчинённая форма обновлялась.У меня не получается это всё ни как сделать(пробовал разные способы,то пишет ошибка в транзикциях.то просто не обновляется (
обновлять пытался с помощью recovery | |
|
| |
|
|
|
| как вариант - удаляемая запись используется во второй подчиненной форме и может быть блокирована.
сделай перед удалением:
forms!основная_форма!подчиненная_2.Form.Dirty=False
.... удаление
forms!основная_форма!подчиненная_2.Form.Requery | |
|
| |
|
|
|
| или
forms!основная_форма!подчиненная_2.Form.RecordSource=forms!основная_форма!подчиненная_2.Form.RecordSource
или
forms!основная_форма!контрол_подчиненная_2.SourceObject=forms!основная_форма!контрол_подчиненная_2.SourceObject | |
|
| |
|
|
|
| операция не поддерживается в транзакциях | |
|
| |
|
|
|
| Не удаётся найти поле,подчинённая_форма | |
|
| |
|
|
|
| Forms![Форма1].Controls![подчененная_форма].Form.Controls![поле1].Value
Вот через такую форму достучаться до данных получается,а обновить не получается (( | |
|
| |
|
|
|
| Forms![Форма1]![подчененная_форма].Form.Requery
а так? | |
|
| |
|
|
|
| не поддерживаетя в транзакциях | |
|
| |
|
|
|
| базу на базу - (в студию пример выложи) | |
|
| |
|
|
|
|
| А что у тебя стоит за мегамакрос на событие "Удаление" - в нем (макросе - команда "Обновление" и нет параметров - удали этот макрос и будет тебе счестье. | |
|
| |
|
|
|
| Не обращай внимания,ковырялся,забыл стереть просто
а вот щас у меня стоит
Forms![Форма1]![подчиненная форма Сотрудники_Принтер].Form.Requery
ошибка в транзацкциях | |
|
| |
|
|
|
| это не от безысходности .
говорили люды тоби - не пиши названия форм с пробелами.
повесь на твою подчиненную форму на событие "После подтверждения Del" - вот такое
Private Sub Form_AfterDelConfirm(Status As Integer)
Forms!Форма1![подчиненная форма Свободные_Принтеры].Form.Requery
End Sub
работает
а твой вариант
Forms!Форма1!подчиненная_форма_Свободные_Принтеры.Form.Requery
не работает, т.к. вот этот изврат
подчиненная_форма_Свободные_Принтеры
работает только в теле формы Форма1, а в других случаях нужно писать НАЗВАНИЕ ФОРМЫ.
по той же причине на работало вот это:
Private Sub Form_Delete(Cancel As Integer)
Forms("Форма1").подчиненная_форма_Свободные_Принтеры.Form.Requery
End Sub
и не только
· Событие Удаление (Delete) возникает при выполнении пользователем определенного действия, например нажатия клавиши DEL для удаления записи, но до фактического удаления записи.
· Событие До подтверждения Del (BeforeDelConfirm) возникает после удаления пользователем одной или нескольких записей в буфер, но до вывода диалогового окна Microsoft Access с приглашением подтвердить удаление.
· Событие После подтверждения Del (AfterDelConfirm) возникает после подтверждения пользователем и фактического удаления записей или при отмене удаления.
|
т.е. ты хотел обновить подчиненную форму до физического удаления записи. | |
|
| |
|
|
|
| Спасибо бро!!!очень помог. | |
|
| |
|
|
|
| Private Sub Form_Delete(Cancel As Integer)
Forms("Форма1").подчиненная_форма_Свободные_Принтеры.SourceObject = Forms("Форма1").подчиненная_форма_Свободные_Принтеры.SourceObject
End Sub
вместо макроса | |
|
| |
|
|
|
| Всем доброго дня,буду постить свои проблемы в этом топике,по ходу работы с моей базой
Вообщем вопрос такой,в плане реализации.
У меня есть таблица СотрудникиМонитор с полями ФИО,Серийник монитора
дело в том что в таблице у одного сотрудника есть 2 монитора,и больше.Я заполняю форму из таблицы при помощи DLookup,ну вот допустим так
Me.Поле3.Value = DLookup("[Монитор модель]", "Монитор", "[МониторSN] ='" & FeildKey & "'")
Сначало я в таблице СотрудникиМонитор нашел соответствующую запись,и вытащил поле МониторSN,по нему уже ищу нужные мне значения в другой таблице(т.е. связь у меня многие к многим стоит)
Собственно вопрос,у меня же в таблице СотрудникиМонитор может быть несколько записей с одной и той же фамилией,т.е. я сначало ищу по фамилии сотрудника в таблице СотрудникиМонитор, вытаскиваю оттуда значение поля МониторSN,и по этому значению ищу уже все соответствующие конфигурации монитора в таблице Монитор.
Так вот,у меня не все записи получится обработать с помощью DLookup т.к. у одного сотрудника может быть больше чем 1 монитор,как мне обойти все записи??7Подскажите пожалуйста!!! | |
|
| |
|
|
|
| функция которая собирает строку с перечнем моников и серийников | |
|
| |
|
|
|
| http://www.hiprog.com/forum/read.php?id_forum=1&id_theme=10059&page=3 | |
|
| |
|
|
|
| Спасибо за инфу,разбираюсь,получается!!! | |
|
| |
|
|
|
| ээээй))Всем привет)Снова я со своими пирогами,которые не работают =)
Вопрос такой:
FieldKey = DLookup("[Счетчик]", "СотрудникиМышь", "[Ответственный] ='" & Me.ПолеСоСписком129.Value & "'")
Me.Поле89.Value = DLookup("[Мышьмодель]", "Мышь", "[Счетчик] ='" & FieldKey & "'")
Получается несоответствие типов данных FieldKey и [Счетчик], я уже и делал преобразование CInt(FieldKey) и что только не пробовал....проверял что лежит в переменной...все равно ничего не помогает
Поле счетчек-обычный счетчик | |
|
| |
|
|
|
| dim FieldKey as Integer
вместо ='" & FieldKey & "'"
пишите = " & FieldKey & " | |
|
| |
|
|
|
|
| Поле счетчик,я посмотрел он типа лонгинт и всё равно не получается =) | |
|
| |
|
|
|
| Можно же сделать по другому,вытащить значение поля запросом,только как я пример не могу найти( | |
|
| |
|
|
|
| Попробовал только что вот так:
Dim FieldKey As Long
Dim Basa As DAO.Database
Dim Tab1 As DAO.Recordset
Set Basa = CurrentDb
Set Tab1 = Basa.OpenRecordset("Клавиатура", dbOpenDynaset)
FeildKey = DLookup("[Счетчик]", "СотрудникиКлавиатура", "[Ответственный] ='" & Me.ПолеСоСписком129.Value & "'")
Tab1.FindFirst "[Счетчик]='" & FieldKey & "'"
|
Такая же ошибка,несоответствие типов данных
При прямом обращении
Me.Поле89.Value = DLookup("[Мышьмодель]", "Мышь", "[Счетчик] ='" & FieldKey & "'")
|
Все работает ....
Всё заработало,убрал лишние знаки,работает теперь так :
Me.Поле89.Value = DLookup("[Мышьмодель]", "Мышь", "[Счетчик] =" & FieldKey ) | |
|
| |
|
|
|
| откеля могут быть кавычки
Tab1.FindFirst "[Счетчик]='" & FieldKey & "'"
счетчик - число, FieldKey - может быть строкой - попробуй так
Tab1.FindFirst "[Счетчик]=" & VAL(FieldKey)
п.с. без базы тяжело отлавливать такие вещи | |
|
| |