powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Источник записей
13 сообщений из 13, страница 1 из 1
Источник записей
    #32170345
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здравствуйте все!!!!

Большое спасибо за моральную поддержку!!
А вот и вопрос

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

Я представляю как сделать сам отбор, но вот с трудом понимаю, как эти записи вернуть в форму

Посоветуйте Плиззз что-нибудь
...
Рейтинг: 0 / 0
Источник записей
    #32170367
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например так
Где нибудь в модуле формы (на событии загрузки например) пишешь
Код: plaintext
1.
2.
3.
Dim strSql As String
strSql =  "Select ....... From .... Where ...." 
Me.RecordSource = strSql
Me.Requery

Разумеется, это не единственный способ.
...
Рейтинг: 0 / 0
Источник записей
    #32170395
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, не единственный, как очень многое в программировании вообще. $)

Например, можно сделать очень просто и наглядно
(проверено в А2000):
1.основать форму на запросе,
2.в запросе (конструктор или SQL, как кто любит) в полях условий поставить ссылки на поля формы-фильтры
(сразу скажу, я делаю это через свои функции VB
наподобие GetDate1(), которая просто лезет в форму и читает значение контрола
{пример:
Function GetStore()
GetStore = [Forms]![Выбор отчета]![txtStore]
End Function
}
потому что А2000
ругается _непониманием выражения_,
если на таком запросе с фильтрами типа [Forms!]![ИмяФормы]![Date1]
основывается перекрестный или диаграмма (с таким же перекрестным).
ЕСЛИ КТО ЗНАЕТ, ПОЧЕМУ вылезает ошибка, ОТЗОВИТЕСЬ!!!

3. когда нужно обновить форму, делать
me.requery

4. на том же запросе с уже установленными фильтрами потом удобно делать отчет
...
Рейтинг: 0 / 0
Источник записей
    #32170478
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>(сразу скажу, я делаю это через свои функции VB
наподобие GetDate1(), которая просто лезет в форму и читает значение контрола

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

В условие поставила функцию,
прописала для нее два ванианта
Is Null
Is Not Null
Но проблема в том, что функция возвращает значения в кавычках

"Is Null"
"Is Not Null", а, насколько я понимаю, в условиях запроса это неприемлемо
...
Рейтинг: 0 / 0
Источник записей
    #32170516
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
Public Function Criteria1(FieldValue As Variant) As Boolean
    If (....) Then ' Здесь твое условие (значение контрола например)'
        Criteria1 = IsNull(FieldValue) 
    Else
        Criteria1 = Not IsNull(FieldValue)
    End If
End Fucntion

Тогда запрос может выглядеть так:
Код: plaintext
Select * From Table1 Where Criteria1(Table1.Field1) = True
...
Рейтинг: 0 / 0
Источник записей
    #32170556
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Alexus12

>потому что А2000 ругается _непониманием выражения_,
если на таком запросе с фильтрами типа [Forms!]![ИмяФормы]![Date1]
основывается перекрестный или диаграмма (с таким же перекрестным).
ЕСЛИ КТО ЗНАЕТ, ПОЧЕМУ вылезает ошибка, ОТЗОВИТЕСЬ!!!

Знаю.Отзываюсь. Просто надо сделать как параметр запроса.
А вот Почему - это к Биллу.
Хотя могу предположить, что перекрестный запрос смотрит только строку Parametrs бля-юля As Тип - кототрой у тебя и нет.
...
Рейтинг: 0 / 0
Источник записей
    #32170563
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Criteria1 = IsNull(FieldValue)

Если я правильно поняла, то (FieldValue) это поле, в котором я буду делать отбор?
...
Рейтинг: 0 / 0
Источник записей
    #32170691
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...Where Criteria1(Table1.Field1)
Вот значение Table1.Field1 и приходит в функцию Criteria1 под именем FieldValue.

Но, по моему, все таки лучше сделать так как я в первом посте написал, т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim strSql As String
If (...) Then ' Здесь твое условие (значение контрола например)'
' Случай 1 - значение есть'
    strSql =  "Select ....... From .... Where Field1 Is Null" 
Else
' Случай 2 - значения нет'
    strSql =  "Select ....... From .... Where Field1 Is Not Null" 
End If
Me.RecordSource = strSql
Me.Requery

Надо только определиться, в какой момент менять источник записей, и вставить этот кусок в нужное место.
...
Рейтинг: 0 / 0
Источник записей
    #32170827
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что у меня получилось, но боюсь что не совсем правильно
или совсем неправильно
Private Sub Form_Load()
Dim strSql As String

strSql = "SELECT Подрядчики.КодП, Подрядчики.[Наименование подрядчика], Sum(Накопительная.Выполнение) AS [Sum-Выполнение], Sum(Накопительная.Сумма) AS [Sum-Сумма], Месторождения.Месторождение, Накопительная.Объект" _
& "FROM Подрядчики INNER JOIN ((Месторождения INNER JOIN Договора ON Месторождения.[Шифр месторождения] = Договора.[Шифр месторождения]) INNER JOIN Накопительная ON Договора.КодД = Накопительная.КодД) ON Подрядчики.КодП = Договора.КодП" _
& "WHERE (((Накопительная.ДатаВ) Between [txt1] And [txt2]))" _
& "GROUP BY Подрядчики.КодП, Подрядчики.[Наименование подрядчика], Месторождения.Месторождение, Накопительная.Объект" _
& "HAVING (((Подрядчики.[Наименование подрядчика]) Like " * " & psk() & " * ") And ((Накопительная.Объект) = True))" _
& "ORDER BY Подрядчики.КодП;"

Me![Анализ].Form.RecordSource = strSql

Me![Анализ].Form.Requery

End Sub
Public Function Criteria1(FieldValue As Variant) As Boolean

If (Forms!АнализГл!Otb = "Is Null") Then ' Здесь твое условие (значение контрола например)'

Criteria1 = IsNull(FieldValue)

Else

Criteria1 = Not IsNull(FieldValue)

End If

End Function
...
Рейтинг: 0 / 0
Источник записей
    #32170849
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ухожу домой

завтра потыкаюсь со вторым вариантом
Надеюсь, что получиться
...
Рейтинг: 0 / 0
Источник записей
    #32170876
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не разбираясь, рекомендую вместо Like " * " & psk() & " * "
писать Like psk() & " * " , и обучить полъзователей ставить "*" в начале по необходимости (писать об этом в справке, в форме, в строке состояния и т.п.), ибо при поиске в индексированных полях, в больших таблицах... да и вообще. Опять же поиск с начала строки некоторым люб.
...
Рейтинг: 0 / 0
Источник записей
    #32170904
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Люди, перестаньте сопровождать звездочки пробелами. Оно так работать не будет!
...
Рейтинг: 0 / 0
Источник записей
    #32171066
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При таких длиных запросах лучше хранимые процедуры. И Requvery ненадо - произойдет двойное обновление.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Источник записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]