Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос по запросам
 
 автор: джониби   (28.03.2012 в 11:04)   личное сообщение
 
 

Вообщем у меня есть 3 таблицы
1)Принтеры(поля принтер S/N,модель)
2)Сотрудники/Принтеры(пол Код,ответственный,принтер S/N)
3)АРМ(ответственный за АРМ,должность)
Связь в таблице-многие ко многим
Допустим такая ситуация,я завёл в базу принтеров 3 новых принтера,2 из них я привязал к сотрудникам,3тий остался пустым,т.е. не один сотрудник им не владеет,как сделать запрос,чтобы показывался именно принтер которым никто не владеет,помогите пожалуйста!!!

  Ответить  
 
 автор: silich   (28.03.2012 в 11:14)   личное сообщение
 
 

используйте left join и is null

  Ответить  
 
 автор: джониби   (28.03.2012 в 11:15)   личное сообщение
 
 

можно пободробнее,можно даже с примером,было бы супер!!!

  Ответить  
 
 автор: silich   (28.03.2012 в 11:31)   личное сообщение
 
 


select p.*,s.*
from printers as p
left join sotrudniks s on p.sotrudinkid=s.id
where s.id is null

  Ответить  
 
 автор: джониби   (28.03.2012 в 11:54)   личное сообщение
 
 

SELECT Принтер.*, Сотрудник/Принтер.*
FROM Принтер AS Принтер.Принтер(S/N)
LEFT JOIN Сотрудник/Принтер ON Принтер.Принтер(S/N)= Сотрудник/Принтер.Ответственный за эксплуатацию
WHERE Сотрудник/Принтер.Ответственный за эксплуатацию IS NULL

Выражение содержит ошибочный подчинённый запрос @.

Сильно не ругайтесь!!)

  Ответить  
 
 автор: silich   (28.03.2012 в 11:57)   личное сообщение
 
 

не буду :)


Принтер(S/N)
Сотрудник/Принтер


просто руки отрубал бы за такие названия таблиц, полей

  Ответить  
 
 автор: джониби   (28.03.2012 в 12:04)   личное сообщение
 
 

Вообщем таблицы =) :


| Сотрудники/Принтер |
---------------------------------------------- |
|Код |
|Ответственный за эксплуатацию |
|Принтер (S/N) |


Принтер |
---------------------------------- |
Принтер(S/N) ||
Модель ||
инвентарный номер ||

  Ответить  
 
 автор: джониби   (28.03.2012 в 12:28)   личное сообщение
 
 

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

  Ответить  
 
 автор: Дядя Федор   (28.03.2012 в 12:30)   личное сообщение
 
 

Заключите имя поля в квадратные скобки []

  Ответить  
 
 автор: джониби   (28.03.2012 в 12:41)   личное сообщение
 
 

переименовал таблицу
запрос выглядит так
SELECT Принтер.*, СотрудникиПринтер.*
FROM Принтер LEFT JOIN СотрудникиПринтер ON Принтер.[Принтер(S/N)]=СотрудникиПринтер.[Ответственный за эксплуатацию]
WHERE СотрудникиПринтер.[Ответственный за эксплуатацию] Is Null;

но ничего не работает все равно че то (я имею в виду все записи выдаёт так же

  Ответить  
 
 автор: kot_k_k   (28.03.2012 в 13:01)   личное сообщение
 
 

возьми собери запрос "записи без подчиненных" - макросом - и лукни как он его делает


Принтер.[Принтер(S/N)]=СотрудникиПринтер.[Ответственный за эксплуатацию] - полная хрень

наверно так правильно
Принтер.[Принтер(S/N)]=СотрудникиПринтер.[Принтер(S/N)]

  Ответить  
 
 автор: kot_k_k   (28.03.2012 в 13:04)   личное сообщение
 
 

совет - пока не поздно переименуй английскими буковками поля и таблы - и убери слешы
жить будет легче в дальнейшем значительно

  Ответить  
 
 автор: snipe   (28.03.2012 в 13:05)   личное сообщение
 
 

SELECT Принтер.*
FROM Принтер LEFT JOIN Сотрудники ON Принтер.S_n = Сотрудники.[Принтер S_N]
WHERE (((Сотрудники.[Принтер S_N]) Is Null));

  Ответить  
 
 автор: джониби   (28.03.2012 в 13:19)   личное сообщение
 
 

Спасибо огромное!!!!!!Всё получилось

  Ответить  
 
 автор: джониби   (29.03.2012 в 12:43)   личное сообщение
 
 

Тогда еще один вопрос
У меня есть список сотрудников,но допустим не у всех есть принтер,который прикреплён к нему,как сделать запросы,чтобы выводились на экран все сотрудники,с принтерами и без
В конструкторе создаётся запрос при помощи INNER JOIN...поэтому показываются сотрудники,у которых только есть принтеры

SELECT СотрудникиПринтер.[Ответственный за эксплуатацию], Принтер.*
FROM Принтер INNER JOIN СотрудникиПринтер ON Принтер.[Принтер(SN)]=СотрудникиПринтер.[Принтер(SN)];

  Ответить  
 
 автор: kot_k_k   (29.03.2012 в 13:14)   личное сообщение
 
 

LEFT JOIN

  Ответить  
 
 автор: snipe   (29.03.2012 в 13:33)   личное сообщение
 
 

Без принтеров
SELECT СотрудникиПринтер.[Ответственный за эксплуатацию]
FROM СотрудникиПринтер
Where СотрудникиПринтер.[Принтер(SN)] is null
с Принтерами
SELECT СотрудникиПринтер.[Ответственный за эксплуатацию]
FROM СотрудникиПринтер
Where СотрудникиПринтер.[Принтер(SN)] is not null

  Ответить  
 
 автор: Гоблин   (29.03.2012 в 21:39)   личное сообщение
 
 

Блин. Принтеры, сотрудники, inner joinы... Как понимаю, база по учету материальных средств. Если так, то должна быть таблица тип матсредств, под которой уже различные модели принтеров и прочего. Если есть таблица сотрудников, (что вовсе необязательно), то можно назначать сотруднику различные матсредства и видеть их тип. Потом простой запрос с участием 2 или 3 (в зависимости от структуры базы) таблиц, в которой будет колонка "Тип средств". Ставим условие "<> принтер" и получаем список сотрудников, у которых есть все, кроме принтеров. Ставим "=принтер" и получаем всех с принтерами (и даже конкретные модели, инвентарные, серийные). А если взять подчиненным запросом, то будет красиво. Сотрудник и под ним все его принтера (если их у него много)

  Ответить  
 
 автор: snipe   (30.03.2012 в 03:20)   личное сообщение
144 Кб.
 
 

рисунок на память =>
(скачал случайно из инета)

  Ответить  
 
 автор: джониби   (30.03.2012 в 09:21)   личное сообщение
 
 

Круто,спасибо =)!!!

  Ответить  
 
 автор: джониби   (30.03.2012 в 11:02)   личное сообщение
 
 

Еще вопрос,допустим у меня есть поле,источник данных в нём определён
=[подчиненная форма Свободные_Принтеры].Form![Принтер(SN)]
Возможность изменения данных,в этом поле уже я так понимаю не получится??они просто не меняются когда хочу ввести всё значение.Можно это как нибудь обойти?Блокировки нету доступ к данных есть в свойствах поля

  Ответить  
 
 автор: kot_k_k   (30.03.2012 в 11:06)   личное сообщение
 
 

можно сделать поле пусты а на Открытие формы повесить обработку
Me.Поле=[подчиненная форма Свободные_Принтеры].Form![Принтер(SN)]
поле примет нужное значение а при желании его можно поменять

  Ответить  
 
 автор: джониби   (30.03.2012 в 11:31)   личное сообщение
 
 

Супер,спасибо!!!

  Ответить  
 
 автор: джониби   (02.04.2012 в 12:23)   личное сообщение
 
 

Искал решение пробелмы,гуглил целыми сутками,так и не нашел
Вообщем ситуация такая.
Есть форма,в ней 2 подчинённые.Работаю с одной подчинённой формой,когда там удаляю запись,путём нажатия на запись правой клавишей,и в контекстном меню выбираю удалить,нужно чтобы другая подчинённая форма обновлялась.У меня не получается это всё ни как сделать(пробовал разные способы,то пишет ошибка в транзикциях.то просто не обновляется (
обновлять пытался с помощью recovery

  Ответить  
 
 автор: kot_k_k   (02.04.2012 в 13:20)   личное сообщение
 
 

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

forms!основная_форма!подчиненная_2.Form.Dirty=False

.... удаление

forms!основная_форма!подчиненная_2.Form.Requery

  Ответить  
 
 автор: snipe   (02.04.2012 в 13:28)   личное сообщение
 
 

или
forms!основная_форма!подчиненная_2.Form.RecordSource=forms!основная_форма!подчиненная_2.Form.RecordSource
или
forms!основная_форма!контрол_подчиненная_2.SourceObject=forms!основная_форма!контрол_подчиненная_2.SourceObject

  Ответить  
 
 автор: джониби   (02.04.2012 в 13:52)   личное сообщение
 
 

операция не поддерживается в транзакциях

  Ответить  
 
 автор: джониби   (02.04.2012 в 13:50)   личное сообщение
 
 

Не удаётся найти поле,подчинённая_форма

  Ответить  
 
 автор: джониби   (02.04.2012 в 13:59)   личное сообщение
 
 

Forms![Форма1].Controls![подчененная_форма].Form.Controls![поле1].Value

Вот через такую форму достучаться до данных получается,а обновить не получается ((

  Ответить  
 
 автор: kot_k_k   (02.04.2012 в 14:40)   личное сообщение
 
 

Forms![Форма1]![подчененная_форма].Form.Requery
а так?

  Ответить  
 
 автор: джониби   (02.04.2012 в 14:46)   личное сообщение
 
 

не поддерживаетя в транзакциях

  Ответить  
 
 автор: kot_k_k   (02.04.2012 в 14:57)   личное сообщение
 
 

базу на базу - (в студию пример выложи)

  Ответить  
 
 автор: джониби   (02.04.2012 в 16:53)   личное сообщение
 
 

http://zalil.ru/33000261

  Ответить  
 
 автор: kot_k_k   (02.04.2012 в 17:02)   личное сообщение
 
 

А что у тебя стоит за мегамакрос на событие "Удаление" - в нем (макросе - команда "Обновление" и нет параметров - удали этот макрос и будет тебе счестье.

  Ответить  
 
 автор: джониби   (03.04.2012 в 09:07)   личное сообщение
 
 

Не обращай внимания,ковырялся,забыл стереть просто
а вот щас у меня стоит
Forms![Форма1]![подчиненная форма Сотрудники_Принтер].Form.Requery
ошибка в транзацкциях

  Ответить  
 
 автор: kot_k_k   (03.04.2012 в 09:27)   личное сообщение
 
 

это не от безысходности .
говорили люды тоби - не пиши названия форм с пробелами.

повесь на твою подчиненную форму на событие "После подтверждения 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) возникает после подтверждения пользователем и фактического удаления записей или при отмене удаления. 


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

  Ответить  
 
 автор: джониби   (03.04.2012 в 09:37)   личное сообщение
 
 

Спасибо бро!!!очень помог.

  Ответить  
 
 автор: snipe   (03.04.2012 в 09:45)   личное сообщение
 
 

Private Sub Form_Delete(Cancel As Integer)

Forms("Форма1").подчиненная_форма_Свободные_Принтеры.SourceObject = Forms("Форма1").подчиненная_форма_Свободные_Принтеры.SourceObject

End Sub

вместо макроса

  Ответить  
 
 автор: джониби   (05.04.2012 в 16:53)   личное сообщение
 
 

Всем доброго дня,буду постить свои проблемы в этом топике,по ходу работы с моей базой
Вообщем вопрос такой,в плане реализации.
У меня есть таблица СотрудникиМонитор с полями ФИО,Серийник монитора
дело в том что в таблице у одного сотрудника есть 2 монитора,и больше.Я заполняю форму из таблицы при помощи DLookup,ну вот допустим так
Me.Поле3.Value = DLookup("[Монитор модель]", "Монитор", "[МониторSN] ='" & FeildKey & "'")
Сначало я в таблице СотрудникиМонитор нашел соответствующую запись,и вытащил поле МониторSN,по нему уже ищу нужные мне значения в другой таблице(т.е. связь у меня многие к многим стоит)
Собственно вопрос,у меня же в таблице СотрудникиМонитор может быть несколько записей с одной и той же фамилией,т.е. я сначало ищу по фамилии сотрудника в таблице СотрудникиМонитор, вытаскиваю оттуда значение поля МониторSN,и по этому значению ищу уже все соответствующие конфигурации монитора в таблице Монитор.
Так вот,у меня не все записи получится обработать с помощью DLookup т.к. у одного сотрудника может быть больше чем 1 монитор,как мне обойти все записи??7Подскажите пожалуйста!!!

  Ответить  
 
 автор: kot_k_k   (05.04.2012 в 18:06)   личное сообщение
 
 

функция которая собирает строку с перечнем моников и серийников

  Ответить  
 
 автор: snipe   (05.04.2012 в 18:13)   личное сообщение
 
 

http://www.hiprog.com/forum/read.php?id_forum=1&id_theme=10059&page=3

  Ответить  
 
 автор: джониби   (06.04.2012 в 12:38)   личное сообщение
 
 

Спасибо за инфу,разбираюсь,получается!!!

  Ответить  
 
 автор: джониби   (10.04.2012 в 09:20)   личное сообщение
 
 

ээээй))Всем привет)Снова я со своими пирогами,которые не работают =)
Вопрос такой:
FieldKey = DLookup("[Счетчик]", "СотрудникиМышь", "[Ответственный] ='" & Me.ПолеСоСписком129.Value & "'")
Me.Поле89.Value = DLookup("[Мышьмодель]", "Мышь", "[Счетчик] ='" & FieldKey & "'")

Получается несоответствие типов данных FieldKey и [Счетчик], я уже и делал преобразование CInt(FieldKey) и что только не пробовал....проверял что лежит в переменной...все равно ничего не помогает
Поле счетчек-обычный счетчик

  Ответить  
 
 автор: час   (10.04.2012 в 09:31)   личное сообщение
 
 

dim FieldKey as Integer
вместо ='" & FieldKey & "'"
пишите = " & FieldKey & "

  Ответить  
 
 автор: джониби   (10.04.2012 в 09:47)   личное сообщение
 
 

неа (такая же фигня

  Ответить  
 
 автор: джониби   (10.04.2012 в 10:00)   личное сообщение
 
 

Поле счетчик,я посмотрел он типа лонгинт и всё равно не получается =)

  Ответить  
 
 автор: джониби   (10.04.2012 в 10:06)   личное сообщение
 
 

Можно же сделать по другому,вытащить значение поля запросом,только как я пример не могу найти(

  Ответить  
 
 автор: джониби   (10.04.2012 в 10:13)   личное сообщение
 
 

Попробовал только что вот так:

        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 )

  Ответить  
 
 автор: kot_k_k   (10.04.2012 в 10:24)   личное сообщение
 
 

откеля могут быть кавычки
Tab1.FindFirst "[Счетчик]='" & FieldKey & "'"

счетчик - число, FieldKey - может быть строкой - попробуй так

Tab1.FindFirst "[Счетчик]=" & VAL(FieldKey)

п.с. без базы тяжело отлавливать такие вещи

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList