Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
Здравствуйте. На форме (в табличном виде) имеется комбобокс. В источнике строк ссылка на запрос. Присоединенный столбец 1. Число столбцов 2 (в первом столбце ID, во втором текстовые данные). Ширина столбцов 0см;3см.
Когда открываю форму в большей части строк (практически во всех) не отображается значение (хотя в некоторых строках таки в наличии), просто пусто. Хотя я точно знаю что значение есть, да и при нажатии комбобокса выходит куча этих значений.
Меняю ширину столбцов ставлю 0,01см;3см. Теперь во всех строках отображается только первый столбец - ID, текстовой части нет. А при нажатии на комбобокс наоборот видно текстовую часть но нет ID.
Что за глюки? Может я что не так делаю?
Проект ADP Access 2003 + MS SQL 2008 R2
23 мар 13, 20:57    [14086925]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
Иллюстрация к первому случаю:

К сообщению приложен файл. Размер - 40Kb
23 мар 13, 21:10    [14086960]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
Иллюстрация ко второму:

К сообщению приложен файл. Размер - 40Kb
23 мар 13, 21:11    [14086965]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
qwerty112
Guest
Изерлонер,

я спрошу ещё раз, на всякий
вы вот это - 13682062 - точно сделали ?
может - непомните или "приснилось" ... - сделайте ещё раз ...
23 мар 13, 23:55    [14087568]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27517
Предположу, что в показанной таблице tblRequestContent_Buh содержатся коды, отсутствующие в таблице-источнике комбо. И записи с этими кодами в поле iKOD будут видеться пустыми в комбо, так как не имеют аналогов в таблице. Можно проверить запросом есть ли такие коды
select t.iKOD 
from tblRequestContent_Buh t left join Таблица_Источник_Комбо q on t.iKOD=q.iKOD
where q.iKOD is null
23 мар 13, 23:58    [14087580]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
qwerty112,

я этого (установка фикса на сп3) точно не делал. После того как намучался с этими сервиспаками, фиксами, не получая удовлетворительного результата – скачал сборку со «всё включено» достаточно стабильную, в которой всех тех проблем не было.
24 мар 13, 04:32    [14088112]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
mds_world,

как и ожидал в результатах запроса пусто.
24 мар 13, 04:34    [14088113]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
qwerty112
Изерлонер,

я спрошу ещё раз, на всякий
вы вот это - 13682062 - точно сделали ?
может - непомните или "приснилось" ... - сделайте ещё раз ...

на всякий случай установил фикс еще раз. Без изменений.
24 мар 13, 07:39    [14088131]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
В дополнение. Определил что не показываются данные с определенного ID. :( т.е. все данные из текстового столбца с номером ID до 16746 в наличии. А вот дальше все пусто. Хотя в исходной таблице все в порядке.
24 мар 13, 07:54    [14088134]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269


К сообщению приложен файл. Размер - 74Kb
24 мар 13, 08:07    [14088138]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
Ну в общем ... причину нашел. Причина в ограничении выводимых записей - 10000. Начиная с записи 10000 данные таблицы подстановки не отображаются. Решил установкой ограничения в настройках акса на 100000. ... Но как-то это... Вдруг количество записей там достигнет свыше 100000? Что теперь каждый раз ограничение менять?
И второе, если хочу что бы в таблице в комбобоксе отображались текстовые значения, а при выборе комбо можно было увидеть так же и коды, то как тогда быть? Установка ширины первого столбца (с ID) на 0,001 приводит к тому что отображается таки только первый столбец с ID, вместо текста.
24 мар 13, 08:30    [14088141]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
ЫLL HEAD
Member [заблокирован]

Откуда: Сибирь
Сообщений: 695
Изерлонер,

зачем в форме держать 10000+ записей? они все нужны в один момент (при каждом открытии)?
когда записей много форму опирают на запрос с критериями или используют фильтр
24 мар 13, 08:57    [14088161]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16825
При таком количестве записей вместо комбобокса надо дать пользователю более удобный диалог выбора. С фильтрами, опциями выбора. Кроме того такого размера плоский однородный справочник - тоже не дело. Надо делать его иерархическим, переходить от плоского справочника а классификатору. А там если даже 1 000 000 разбить на три уровня - по 1000 на одном уровне останется.

Вопщем, похоже на ошибку проектирования.
24 мар 13, 10:16    [14088249]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
ЫLL HEAD,

это подчиненная форма. В форме контейнере видно только часть данных этой формы (весьма не большую не более 50 записей) отобранную по определённым критериям (вторая форма со связанной таблицей). Однако после отбора по этим критериям всё равно части текстовых данных не хватало. Пока не увеличил ограничение акса.
24 мар 13, 10:43    [14088276]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
Программист-Любитель,

это просто справочник материалов. Там иерархии то особо и не нужно.
Вообще не однократно убеждался в вашей правоте по тем или иным вопросам, но как правило только после того как сам массу шишек набью, потом вдруг вспоминаю ... а вот П–Л что то такое писал. :)
иначе как то не получается.
Ирония ещё в том что как раз сейчас пытаюсь несколько переделать свой первоначальный интерфейс на основе вашего замечания, набив несколько шишек :)
видимо не достаточно набил раз опять всё не так.
24 мар 13, 10:53    [14088290]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16825
Более чем уверен, что материалы можно классифицировать по куче признаков.

Сразу честно предупредю, что решения, когда в рамках табличной субформы можно разрулить мега комбобокс на туеву хучу позиций, я не знаю. Могу предложить некий паттерн для удовлетворительного на мой взгляд решения проблемы, как бы сделал я.

В вашей самой детальной таблице в дополнение КодуМатериала (это который щас комбобокс на 100000+ записей можно сделать временные поля Код1 и Код2.

Источником табличной формы делаем запрос, соединяющий таблицу данных со справочником материалов, с 2 уровнем, затем с 2 уровнем.
Отображать в форме поля (обычные, не комбо):
НазваниеКода1 из таблицы Классификация Уровень1,
НазваниеКода2 из таблицы Классификация Уровень2,
НазваниеМатериала из Справочника материалов

В нижней части формы сделать еще одноу субформу типа карточку, в которой выводить данные текущей записи детальной таблицы. Поскольку это форма-карточка, там можно динамически формировать источники строк комбо, забирая в источник только ограниченной число позиций. Последовательно выбирается Код1 - Фильтруется Код2, Код2 - Фильтруется КодМатериала.
Для работы этой формы-карточки использовать дополнительные временные поля Код1 и Код2 (денормализованные поля), которые специально сделать в таблице материалов.
24 мар 13, 11:25    [14088367]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
Давайте так. Конкретно вот эта задача, в этом топике не касается выбора каких то элементов списка из поля со списком. Только отображение. Возможность использования комбобокс блокирована. Может быть можно делать постановку с другими контролами, но мне проще показалось так, так как комбобокс уже использовал.
Там где комбо используется для выбора, там тоже выбора как такового (крутить через многие сотни позиций) не происходит, там просто начинаем водить первые символы, остальное уже автоматом поставляется.
Однако обратил внимание на одно весьма существенное, как мне показалось, замечание. У меня на самом деле часто встречается такой подход когда в форму загружается вся таблица, и уже затем отфильтровываются нужные данные. А как можно сделать иначе?
Ну вот конкретно по задаче в этом топике:
имеется две связанные таблицы, в форме представлены в виде подчиненных форм связанных через поле в форме– контейнере. Одна таблица документы («требования») вторая содержимое документа. При выборе документа в первой субформе по ключу, через поле в форме контейнере, выводится его содержимое (перечень материалов, запчастей) во второй. Однако изначально во вторую субформу загружена вся таблица (около ста тыс. записей). Такой же подход и в других подобных задачах. А как можно по другому?
24 мар 13, 12:49    [14088566]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
Учитывая что проект АДП
24 мар 13, 12:54    [14088583]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16825
Я об этом уже писал на этом форуме много-много раз.

Мне таки пришлось полностью взять на себя все механизмы загрузки данных в формы и субформы. Как следует из вашего ТЗ, у вас главная форма-окно контейнер без данных и две вложенных табличных формы - мастер и детельная. Как это сделано у меня.

1. Загружается главная форма. Она сразу же проявляется на экране.

2. На месте мастер грида выводится (строго такого же размера) бледно-желтая панель - данные загружаются, подождите, пожалуйста... Когда данные загрузились в мастер грид, желтая панель убирается, видны сами данные.

3. На месте детального грида выводится (строго такого же размера) бледно-желтая панель - данные загружаются, подождите, пожалуйста... В детальный грид загружаются только те данные, которые соответствуют текущей записи мастер-грида. Когда данные загрузились в детальный грид, желтая панель убирается, видны сами данные.

Как это устроено внутри.

В главной форме источники субформ очищены. Поэтому открывается пустая форма, мгновенно.

Присваивается саурс обжект мастер-гриду. В мастер-субформе источник строк тоже очищен. Он формируется, присваивается. Начинается загрузка данных. Пока она не закончится, видна желтая заставка. Когда данные загрузились (событие каррент) желтая панель убирается.

Присваивается саурс обджект детальному гриду. От тоже хранится с очищенным рекордсаурс. Источник строк формируется с отбором WHERE ID = <Значение из мастер грида>. Присваивается в роусаурс детального грида. Начинается загрузка отобранных детальных данных. Пока она не закончится, видна желтая заставка. Когда данные загрузились (событие каррент) желтая панель убирается.

Занимеются этим универсальные классы, обслуживающие все прикладные формы. На одном окне контейнере можно иметь много субформ, связванных иерархическими отношениями. Мастер-чаилд пришлось полностью переписать.

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

К сообщению приложен файл. Размер - 18Kb
24 мар 13, 18:35    [14089430]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16825
В конструкторе.

К сообщению приложен файл. Размер - 15Kb
24 мар 13, 18:36    [14089431]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16825
А вот ее код.

Option Compare Database
Option Explicit

Public WithEvents FormCard As FormCard

Private Sub Form_Open(Cancel As Integer)

Set FormCard = LIBRARY.modClassFactory.CreateFormCard()
    FormCard.BindLoad "", Me
    '   Ффсе... после этого аксес умывает руки. Дальше будут работать мои классы.
End Sub

Private Sub FormCard_AfterResizeFormTop(iTop As Integer, iLeft As Integer)

    '   Вопщем весь код - красивый ресайзинг. У меня в проекте нет нерезиновых форм (кроме модальных диалогов).
    Me.Painting = False
    
    With Me.lblPeriodYear
        .Top = iTop + 100
        .Left = 15
        .Width = Me.InsideWidth - .Left + 10
    End With
    
    With Me.grmPeriodYear
        .Top = 0: .Left = 0: .Height = 0: .Width = 0
    End With
    
    With Me!grmPeriodYear
        .Height = 0
        .Top = Me!lblPeriodYear.Top + Me!lblPeriodYear.Height
        .Left = Me!lblPeriodYear.Left
        Dim h: h = (Me.InsideHeight - .Top - Me.lblPeriodQuarter.Height) / 2
        If h < 1000 Then
            h = 1000
        End If
        .Height = h
        .Width = Me.InsideWidth - .Left + 10
    End With
    
    With Me.lblPeriodQuarter
        .Top = Me.grmPeriodYear.Top + Me.grmPeriodYear.Height
        .Left = Me.grmPeriodYear.Left
        .Width = Me.grmPeriodYear.Width
    End With
    
    With Me.grcPeriodQuarter
        .Height = 0
        .Top = Me.lblPeriodQuarter.Top + Me.lblPeriodQuarter.Height
        .Left = Me.lblPeriodQuarter.Left
        .Width = Me.lblPeriodQuarter.Width
        h = Me.InsideHeight - .Top + 10
        If h < 1000 Then h = 1000
        .Height = h
    End With
        
    Me.Painting = True
End Sub

Private Sub FormCard_AfterSetGrid(sTabPageName As String)
On Error Resume Next
    Call modForm.FindObjectByArgs(Me.grmPeriodYear.Form, "iPeriodYearNomer", Me.OpenArgs)
    Call modForm.FindObjectByArgs(Me.grcPeriodQuarter.Form, "iPeriodQuarterNomer", Me.OpenArgs)
End Sub


Кстати, я случайно взял у себя пример, где такая связка двух гридов сделана в форме-карточке, а не через форму-таблицу. Там внутри примерно то же самое. У меня даже форма-карточка оказалась достаточно смышленной - справилась.
24 мар 13, 18:42    [14089442]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
А возможно ли установить рекордсорс одной подчиненной формы находясь в другой подчиненной форме?
Уже несколько раз перечитал FAQ по обращению к полям (и т.д.) подчиненных форм, все равно ничего не получается :(
По переходу на какую-либо запись в подчиненной форме являющейся ведущей выполняется следующий код:
Private Sub Form_Current()
   Forms![frmRequest]![ID_TAB] = Me![iRequest]
   Forms![frmRequest]![podchRequestContent_Buh].Form.Recordsource = "SELECT * FROM tblRequestContent_Buh Where iRequest = " & Forms![frmRequest]![ID_TAB]
End Sub


который неизменно завершается ошибкой: "Введенное выражение содержит недопустимую ссылку на свойство "Form/Report"
Первой строкой задается значение поля в форме контейнере.
Второй строкой по идее должен задаваться рекордсорс для второй подчиненной формы из таблицы отфильтрованной по значению поля в контейнере.

frmRequest - форма контейнер
podchRequestContent_Buh - контрол c подчиненной формой
cldRequestContent_Buh - подчиненная форма с детализацией.
ID_TAB - поле на форме контейнере.
25 мар 13, 10:18    [14090835]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
П-Л
Guest
Вы плохо читали ФАК .

Если правильно указывать имена контролов, то успех неизбежен. Совет: используйте Me. находясь в контексте формы. Не тащите цепочку имен от Forms!

Я бы написал примерно так:

Me.Parent!ID_TAB = Me!iRequest
Me.Parent!podchRequestContent_Buh.Form.Recordsource = 
   "SELECT * " _
   "FROM tblRequestContent_Buh " & _
   "Where iRequest = " & Me.Parent!ID_TAB


Если имена правильные, должно работаь. Если не работает - ищите ошибки.
25 мар 13, 10:34    [14090915]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
П-Л
Guest
автор
который неизменно завершается ошибкой: "Введенное выражение содержит недопустимую ссылку на свойство "Form/Report"

А форма-то к этому времени в SourceObject уже загружена ? Под отладчиком все проверяется за пять секунд.
25 мар 13, 10:36    [14090926]     Ответить | Цитировать Сообщить модератору
 Re: Не отображаются данные в поле со списком.  [new]
Изерлонер
Member

Откуда: СФО
Сообщений: 1269
П-Л

Если имена правильные, должно работаь. Если не работает - ищите ошибки.


При первом использовании выдает ту же самую ошибку. Однако если в выданном сообщении нажать End вместо Debug, дальше все работает как надо.
... Похоже действительно в начале форма не успевает загрузиться.

Спасибо за Me.Parent! . Самого ломает полностью путь прописывать, не знал что можно к родительской форме так обратится.
25 мар 13, 11:00    [14091035]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить