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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Изменение элементов списка значений через форму
 
 автор: Аленка   (03.10.2008 в 01:02)   личное сообщение
 
 

Интересно, если я элементы списка ввожу через СПИСОК ЗНАЧЕНИЙ в конструкторе таблицы, а не через присоединенный столбец, то как можно этот список изменять, не входя в режим конструктора таблицы?
Есть у Списка значений в конструкторе таблицы свойство "форма для изменения списка". Но я так и не поняла, как этим свойством пользоваться. То есть для того, чтобы выбрать нужную форму, нужно ее создать, логично? А как создать форму, в которой я смогу изменять СПИСОК ЗНАЧЕНИЙ одного из полей таблицы?
ЧТО БУДЕТ ИСТОЧНИКОМ ДАННОЙ ФОРМЫ?

  Ответить  
 
 автор: Pasat   (03.10.2008 в 01:23)   личное сообщение
 
 

Для таблиц выпадающий список как и список лучше не использывать. Лучше использывать их в форме для заполнения полей таблиц
Элемент управления выпадающий список как и список имеет св-во источник строк. Источником строк могут быть строки таблицы или запроса; список полей; список значений.
Судя по вопросу опыта работы со списками у тебя мало.
Позтому для начала советую потренироваться создавать выпадающий список как и список мастером в конструкторе формы. Так можно научиться создавать разные виды списков в том числе и для заполнения полей таблиц. А пока из вопроса мало что понятно

  Ответить  
 
 автор: Аленка   (03.10.2008 в 07:44)   личное сообщение
26 Кб.
 
 

Я поясню.
Всего списков два вида: Список значений и Список полей.
Список полей - это не что иное, как присоединнный столбец из другой таблицы, то есть значения берутся из другой таблицы.
Список значений - это список, который ТЫ САМ устанавливаешь в конструкторе таблиц для данного поля. Вот меня интересует список значений.

Аксесс 2007:
Таблица - Конструктор - Поле1 - в свойствах вкладка Подстановка - во вкладке выбираю Тип источника строк: Список значений - в источнике строк устанавливаю свои значения.
Вот об этом я списке значений
Изменить я его могу в конструкторе таблицы в свойствах поля во вкладке Подстановка.
Но в той же вкладке есть свойство "Форма изменения элементов списка". В справке написано, что в этом свойстве можно выбрать форму, альтернативную стандартной, появляющейся для ввода списка значений. Но как эту форму сделать?

Если у тебя в одном из полей выпадающий список, источником строк которого является НЕ присоединенный столбец, а твои значения, то при выпадении списка в самом низу списка появляется и кнопочка, которая вызвает стандартную форму для изменения этого списка. Эта кнопка появляется как в таблице, так и в форме. Но как эту кнопку нажать программно, не знаю. И как стандартную формочку заменить своей, тоже не знаю.

вот картинка

  Ответить  
 
 автор: Pasat   (03.10.2008 в 12:11)   личное сообщение
 
 

Похоже это что-то из Аксесс 2007, а я с ним не работал .
Сорри

  Ответить  
 
 автор: Denis V.   (03.10.2008 в 12:37)   личное сообщение
 
 

Похоже, что в Access2007 можно работать без форм, всё уже встроено в таблицы ;-) Т.е. разработка настольных приложений баз данных упростилась дальше некуда :-)

  Ответить  
 
 автор: Аленка   (03.10.2008 в 17:19)   личное сообщение
 
 

ну если кто-то работающий в 2007 аксесе знает, напишите, хорошо?

  Ответить  
 
 автор: Аленка   (03.10.2008 в 17:23)   личное сообщение
 
 

вообще я думаю, что свойство "форма для изменения элементов списка" все таки предназначения для присоединенного столбца, если значения берутся из другой таблицы. Там все понятно. Источником формы является таблица, поэтому все просто.
Судя по всему список значений, не основанный на таблице, не может быть изменен через иную форму, кроме как через стандартную.

  Ответить  
 
 автор: FORMAT   (03.10.2008 в 18:57)   личное сообщение
 
 

здеся у нас Скорп, вроде, с 2007 работает. Енто к нему надо обращаться за хэлпом

  Ответить  
 
 автор: Lukas   (03.10.2008 в 19:24)   личное сообщение
 
 

Да тут вопрос не в версии, а в целесообразности.
Список значений для поля со списком делается тогда, когда вероятность его изменения (тем более динамически) близка к 0.

  Ответить  
 
 автор: Аленка   (03.10.2008 в 21:25)   личное сообщение
 
 

Согласна. Если я делаю именно Список значений, то вероятность его изменения практически нулевая. НО ПРАКТИЧЕСКИ, а не однозначно. А мне бы не хотелось в случае чего, если этот 1% сбудется лезть снова в исходник, менять и .... в общем фигня получается.

Хотя, в общем-то, я уже думаю о том, что это я уже лишнее придумываю. Скорее мне это и не понадобится. А если и понадобится изменять эти списки, то скорее всего все равно придется лезть в исходники, так как это будет означать изменение и структуры данных.

В конце концов, как вариант, сделать эти списки через отдельные таблицы. Тогда можно будет их менять динамически сколько угодно. Другое дело, что нужно ли это? И уж однозначно не нужно разрастание количества таблиц. Я наоборот стремлюсь к минимуму таблиц с соблюдением первых четырех нормальных форм.

В общем, я поняла, что реально мне это не нужно. Часто заводит не туда желание контролировать ВСЕ! Думаю, что на начально-среднем этапе изучения Баз данных это было у многих. Поэтому не судите строго

Поэтому закрою свой вопрос. Спасибо за обсуждение!!!

  Ответить  
 
 автор: Скорп   (03.10.2008 в 21:36)   личное сообщение
10 Кб.
 
 

у А2007 есть ряд возможностей, недоступных для более ранних версий
в частности, если поле со списком получено ч-з список значений, то, установив в свойствах элемента - "Разрешить изменение списка значений" - ДА, получим следующую возможность:
при выборе на этом элементе внизу раскрывшегося списка получим полупрозрачную иконку, нажав на которую, можно ввести новые значения
там же, кстати, устанавливается и значение по умолчанию...
см. пример.

причем не важно, в таблице ли это или на форме.

поле я не заполнял, Аленка, заполнишь сама..

п.с.
а....так задача другая оказывается...

  Ответить  
 
 автор: Аленка   (03.10.2008 в 21:48)   личное сообщение
 
 

Скорп, спасибо, конечно, за подсказку. Но я в курсе про этой свойство поля.
Вопрос в том, что у меня все списки значений в этом свойстве имеют запрет на изменение, поэтому эта полупрозрачная кнопка не появится ни в таблице, ни в форме.
И сделала я это в силу совершенно понятных причин. Однажды, какой-нибудь любопытный все же нажмет и может испортить весь список. А потом ищи свищи ошибку.
Вот так. Так что по сути дела это бесполезное свойство.
Я то думала, что быть может список значений я смогу изменять только я сама, а для других я бы запретила эту форму. Но уже поняла, что список значений меняется только через стандартную форму, запускаемую как раз с помощью этой полупрозрачной иконки. Но она у меня запрещена, как я уже сказала.

Но благодаря обсуждению с вами, я поняла кое-что. Уже полезно и приятно.

  Ответить  
 
 автор: Lukas   (03.10.2008 в 21:59)   личное сообщение
 
 


Но уже поняла, что список значений меняется только через стандартную форму...


Ничего подобного.
Список значений можно изменять как в элементе управления ComboBox в форме, так и в поле таблицы из любой формы. (для mdb во всяком случае)

  Ответить  
 
 автор: Аленка   (03.10.2008 в 22:04)   личное сообщение
 
 

Lukas, так мы говорим об одном и том же. Разве нет?
Если свойство "разрешить изменение элементов списка" поставить на НЕТ, то не сможете вы изменить значения списка НИ ЧЕРЕЗ ФОРМУ, НИ ЧЕРЕЗ ТАБЛИЦУ, НИКАК. Правильно?

А если поставить на ДА, то изменение возможно с помощью полупрозрачной иконки, появляющейся внизу раскрывающегося списка (как в форме, так и в таблице) и запускающей СТАНДАРТНУЮ ФОРМУ изменения списка значений. Ведь так?

Вы же не хотите сказать, что список значений (простой, не основанный на таблице, то есть не присоединенный столбец) можно изменить с помощью нестандартной, а созданной пользователем формы? Ведь это нельзя? А если можно, то что будет в качестве источника данной формы?

  Ответить  
 
 автор: Lukas   (03.10.2008 в 22:10)   личное сообщение
 
 

Да, список значений можно изменить с помощью своей формы, а при желании и вообще без формы.
А зачем подобной форме источник данных?

  Ответить  
 
 автор: Аленка   (03.10.2008 в 22:17)   личное сообщение
 
 

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

Я вообще сделала так. В самой таблице я запретила изменение списка значений. Соответственно, и во всех формах его изменение тоже запрещено. А в свой форме, где у меня все списки значений, я разрешила из измненеие и в итоге я могу изменять список значений через форму, а пользователи - не могут.

Но все же очень интересно, как можно изменить списко значений с помощью не стандартной, а созданной мною формы? И если там нет источника строк, то как?
Не так ли, как сказала? То есть запретить изменение списка в таблице, а в нужной форме разрешить его изменение и открывая этот список в данной форме можно будет запустить уже и стандартную форму для его изменения.
Или вы имели ввиду, что стандартную форму можно заменить на свою?
если да, то КАК?

  Ответить  
 
 автор: Lukas   (03.10.2008 в 22:37)   личное сообщение
 
 

1. Что есть "список значений" для поля с подстановкой - свойство поля таблицы.
2. Что есть значение этого поля - строка значений, разделенных точкой с запятой.
3. Для того, чтобы изменить значение свойства поля таблицы необходим инструмент доступа к свойствам поля таблицы и новое значение свойства.
4. Формировать новое значение свойства (в данном случае-строку) можно в функции/процедуре любого модуля, в том числе в модуле своей формы.
5. В качестве инструмента доступа к свойствам полей таблицы можно использовать, например, библиотеку DAO. Возможно, профессионалы подскажут другие инструменты.

  Ответить  
 
 автор: Аленка   (03.10.2008 в 22:43)   личное сообщение
 
 

Lukas, но это слишком сложно. Но важнее другое. Эта вся сложность ни к чему.
Я уже пришла к выводу о том, что это совершенно не нужно.
Достаточно и простых вариантов:
1. либо делать список через таблицу, но не буду.
2. либо запрещать его изменение везде, кроме своей формы, откуда я смогу запустить стандартную форму изменения элементов списка.
Думаю, Вы со мной согласитесь, что лишние сложности здесь совершенно ни к чему. Ведь эта возможность вообще маловероятно, что понадобится.

  Ответить  
 
 автор: Lukas   (03.10.2008 в 22:51)   личное сообщение
 
 

Осталось добавить, что хранить текстовые значения в полях с подстановкой - расточительство.
Лучше использовать числовые поля.
Строка - список значений будет иметь вид:

1;"первое";2;"второе";3;"третье"

В свойствах поля:
"Подстановка, Число столбцов" задаем - 2 (столбца)
"Присоединенный столбец" - 1
Да и в коде, и в фильтрах работать будет удобнее с числом, чем с текстовым значением.

  Ответить  
 
 автор: Скорп   (03.10.2008 в 23:31)   личное сообщение
 
 

ну...спорить с Lukas-ом наверное нельзя
но если очень хочется, то наверное можно
первоначально моя база так и была построена - на числовых значениях
но когда на форме у меня, дай Бог не соврать, порядка 50 полей со списками, то я просто запарился все время сопоставлять - а что же означает цифра 7 для поля со списком 31??
в итоге я в списках указал не таблицы источники, а список значений
ну да, код у меня в итоге
вместо

If [формат изделия в развернутом виде]= 8...

приобрел вид

If [формат изделия в развернутом виде]= "Нестандарт"...

зато я сразу, глядя на код вижу, что у меня тут вычисляется...

ну а чем собственно плохо так делать?
медленнее работает?
ну не знаю, я этих тормозов не вижу...

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

в итоге решил скидывать в таблицу текстовые значения - "Нестандарт", значит "Нестандарт", а не цифру 8
тормоза?
я их не ощущаяю...
размер базы?
так до 2-х Гиг мне надо столько туда понасбрасывать, что мамадарагая...

  Ответить  
 
 автор: Lukas   (03.10.2008 в 23:45)   личное сообщение
 
 

А как насчет такой конструкции:

Public Enum DayWeek
    Понедельник = 1
    Вторник= 2
    Среда= 3
    Четверг= 4
    Пятница= 5
    Суббота= 6
    Воскресенье= 7
End Enum

Public Function funTest()
    If Weekday(Date, vbMonday) = DayWeek.Пятница Then
        MsgBox "Сегодня пятница"
    Else
        MsgBox "Сегодня нифига не пятница"
    End If
End Function

  Ответить  
 
 автор: Скорп   (03.10.2008 в 22:25)   личное сообщение
 
 

z djn nen xnj gjlevfk\
упс.
я вот тут что подумал
ведь что такое поле со списком?
в большинстве случаев это набор значений, на которые в программе происходит то или иное событие
например
список значений - Нет и Да
на Нет - нужно укусить за палец
а на Да - поцеловать в щечку
в программе все эти события происходят, потому что мы их описАли...
но если мы все же научимся програмно добавлять новое значение, например - Фиг знает, на которое в ответ мы должны почесать за левым ухом, то кто будет прописывать код в программе - почесать за левым ухом?
только разработчик программы ведь
а раз так, то кроме него и нечего юзерам лезть и менять значения списка, ведь код все равно они прописать не смогут...

  Ответить  
 
 автор: Аленка   (03.10.2008 в 22:35)   личное сообщение
 
 

Ну да, я примерно эту мысль уже и озвучивала. Что если я создаю список значений, то вероятность его изменения скорее всего повлечет изменение и структуры данных. То есть это будет означать, что появилось еще одно условие, которое в некоторых случаях будет означать и значительное изменение структуры данных (пусть не всех, но в одной из веток). У меня такое было. Один из моих списков, пока я до него дошла, точнее до его оптимальной формы, я три раза меняла и структуру данных. Сейчас она у меня оптимальная судя по всему, так как отвечает на все основные вопросы именно так как нужно.

Почему я вообще подняла этот вопрос?
Потому, что это мой ПЕРВЫЙ опыт проектирования нормального (ну, насколько это можно назвать нормальным при моем уровне) клиент-серверного приложения. Как я говорила в других темах, раньше моя база работала через SQL как клиент-сервер, но она была построена на простых запросах и с обычными формами, практически без кода. Соответственно, была слишком простой. Сейчас же она уже принимает вид более или менее того приложения, которое я и хотела видеть.
Но я не уверена, что я все смогу предусмотреть. Именно поэтому я и подумала о возможности изменения списка в случае чего. ХОтя я сейчас уже понимаю, что изменяя список, скорее всего, придется менять и код, а может и структуру данных

  Ответить  
 
 автор: Pasat   (03.10.2008 в 23:21)   личное сообщение
 
 

ИМХО не мучайтесь и забудьте про списки на основе списка значений. Все списки сделайте на основе таблиц. Я так и сделал лет 5 назад и не жалею

  Ответить  
 
 автор: Скорп   (03.10.2008 в 23:37)   личное сообщение
 
 

ну а смысл???
ну будет у меня отдельная таблица: (это цветность печати в полиграфии)
0+0
1+0
1+1
2+0
2+1
2+2
3+0
3+1
3+2
3+3
4+0
4+1
4+2
4+3
4+4
и что?
и подобных таблиц будет еще 50 штук, в которых ну ничего нет, кроме того, что я написал
почему не использовать возможность, которую предоставляет access, а именно поле значений в кач-ве источника строк...???

ну что плохого в том, что код у меня имеет вид:

'****************** НЕСТАНДАРТ **************************
    If [Формат листовки] = "Нестандарт" Then
        If [Размер] = "Меньше А4" Then
                    If [Цветность листовки] = "1+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+0 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А4]))
                    ElseIf [Цветность листовки] = "1+1" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+1 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А4]))
                    ElseIf [Цветность листовки] = "2+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[2+0 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А4]))
                    ElseIf [Цветность листовки] = "2+1" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+0 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А4])) + IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+1 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А4]))
                    ElseIf [Цветность листовки] = "2+2" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+1 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А4])) * 2
                    ElseIf [Цветность листовки] = "3+0" Or [Цветность листовки] = "4+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[4+0 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А4]))
                    ElseIf [Цветность листовки] = "3+1" Or [Цветность листовки] = "3+2" Or [Цветность листовки] = "3+3" Or [Цветность листовки] = "4+1" Or [Цветность листовки] = "4+2" Or [Цветность листовки] = "4+3" Or [Цветность листовки] = "4+4" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[4+4 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А4]))
                    End If
[Стоимость печати листовок1] = ([Виртуальный тираж по А4] * [Цена за единицу листовки]) * [Тиражность листовок]
        ElseIf [Размер] = "Меньше А3" Then
                    If [Цветность листовки] = "1+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+0 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А3])) * 2
                    ElseIf [Цветность листовки] = "1+1" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+1 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А3])) * 2
                    ElseIf [Цветность листовки] = "2+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[2+0 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А3])) * 2
                    ElseIf [Цветность листовки] = "2+1" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+0 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А3])) * 2 + IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+1 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А3])) * 2
                    ElseIf [Цветность листовки] = "2+2" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+1 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А3])) * 4
                    ElseIf [Цветность листовки] = "3+0" Or [Цветность листовки] = "4+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[4+0 А3]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А3]))
                    ElseIf [Цветность листовки] = "3+1" Or [Цветность листовки] = "3+2" Or [Цветность листовки] = "3+3" Or [Цветность листовки] = "4+1" Or [Цветность листовки] = "4+2" Or [Цветность листовки] = "4+3" Or [Цветность листовки] = "4+4" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[4+4 А3]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А3]))
                    End If
[Стоимость печати листовок1] = ([Виртуальный тираж по А3] * [Цена за единицу листовки]) * [Тиражность листовок]
        ElseIf [Размер] = "Больше А3" Then
                    If [Цветность листовки] = "1+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+0 А2]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А2]))
                    ElseIf [Цветность листовки] = "1+1" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+0 А2]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А2])) * 2
                    ElseIf [Цветность листовки] = "2+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[2+0 А2]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А2]))
                    ElseIf [Цветность листовки] = "2+1" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[2+0 А2]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А2])) + IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[1+0 А2]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А2]))
                    ElseIf [Цветность листовки] = "2+2" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[2+0 А2]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А2])) * 2
                    ElseIf [Цветность листовки] = "3+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[4+0 А2]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А2]))
                    ElseIf [Цветность листовки] = "3+1" Or [Цветность листовки] = "3+2" Or [Цветность листовки] = "3+3" Or [Цветность листовки] = "4+1" Or [Цветность листовки] = "4+2" Or [Цветность листовки] = "4+3" Or [Цветность листовки] = "4+4" Then
                    MsgBox "Нельзя печатать на А2ф 3+1, 3+2, 3+3, 4+1, 4+2, 4+3 и 4+4!!!", vbInformation, "СИСТЕМА КОНТРОЛЯ ВВОДА ИНФОРМАЦИИ"
                    Exit Function
                    ElseIf [Цветность листовки] = "4+0" Then
                    [Цена за единицу листовки] = IIf(Val(Nz([Тираж], 0)) = 0, 0, DMin("[4+0 А2]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А2]))
                    End If
[Стоимость печати листовок1] = [Виртуальный тираж по А2] * [Цена за единицу листовки] * [Тиражность листовок]
        End If
End If ' Конец блока [Формат листовки] = "Нестандарт"

  Ответить  
 
 автор: Скорп   (03.10.2008 в 23:42)   личное сообщение
 
 

нет..вы мне объясните
на что это влияет???
ну, так как я делаю...

  Ответить  
 
 автор: Pasat   (04.10.2008 в 00:11)   личное сообщение
 
 

ИМХО Список значений в первую очередь не удобен тем, что в нем неудобно вносить изменения. Если мы даже уверены что в нем изменять ничего не придется, не факт что этого не нужно будет делать например через год. Например сегодня есть три формы юридических лиц: ОАО, ЗАО, ГАО. Через год появиться ещё ДАО, а Вы свое приложение поставите 100 юзерам и как вы будете обнавлять свой список значений у 100 юзеров? ИМХО проще это поручить юзерам, создав форму для редактирования этих данных ну и т.д.
И еще есть два основных правила
1. Простота - упрощайте все что можно упростить
2. Нормализация - нормализуйие все что можно нормализовать.

Попробуйте еще раз почитать про нормализацю это ни так уж и много. Возможно многие вопросы пропадут.

  Ответить  
 
 автор: Скорп   (04.10.2008 в 00:18)   личное сообщение
78 Кб.
 
 

ладно бы только внес ДАО и все
а если к этому новому ДАО нужно будет и код писать в программе..тогда как?
вот пример моего калькулятора (не знаю, прикрепится или нет)
любое изменение списка должно сопровождаться алгоритмом расчета!
кто его будет писать?
клиенты?

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

  Ответить  
 
 автор: Pasat   (04.10.2008 в 00:37)   личное сообщение
 
 

к этому новому ДАО нужно будет и код писать в программе..тогда как?

Возможно это нужно для каких-то задач. Но я с таким не встречался
ИМХО в 99% случаев код должен работать не завися от данных таблиц.
Естественно я могу ошибаться

  Ответить  
 
 автор: Скорп   (04.10.2008 в 00:50)   личное сообщение
 
 

ИМХО в 99% случаев код должен работать не завися от данных таблиц
конечно же!!!
если так, то правильнее занести в таблицу и пусть эти 100 клиентов в этой таблице копаются при необходимости
но лично у меня вот, все что не далалось в базе со связкой к полю со списком, все подчинено значениям в этом поле
причем не только в калькуляторе, но и в сопровождении заказов
да, есть общие поля для всех заказов, как то оплата например..
но в зависимосто от того, какой вид работ выполняется, делается ли сувенирка, печатается ли книга, делается ли плакат - везде свои поля по сопровождению
нет смысла при производстве листовок указывать тип ткани для флага..
поэтому появится вид работ какой-то новый, ну например, производство подстаканников, простым добавлением вида работ мы ничего не решим...нужно и формы делать новые и т.п.

  Ответить  
 
 автор: Pasat   (04.10.2008 в 01:04)   личное сообщение
 
 

появится вид работ какой-то новый, ну например, производство подстаканников, простым добавлением вида работ мы ничего не решим...нужно и формы делать новые и т.п.
ещё раз вам говорю в 99% случаев так быть не должно (если мы говорим о более-менее професиональном проиложении). Может Ваш случай попадает в этот 1%, но я сомневаюсь .

  Ответить  
 
 автор: Lukas   (04.10.2008 в 01:36)   личное сообщение
 
 

Очень даже легко может такое случится. Это я по поводу нового вида работ.
Что касается калькуляции, то для каждого изделия (или вида изделия) может применяться свой алгоритм расчетов. И кроме как писать его дополнительно в коде, Я пока ничего не придумал.
Приложение базы данных как и любой другой софт, всего-лишь инструмент, заточенный под определенные задачи. Если задачи изменяются, инструмент надо "точить" заново.

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

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

Что касается калькуляции, то для каждого изделия (или вида изделия) может применяться свой алгоритм расчетов
Это наверное и есть тот 1% о котором я писал выше
Написанным здесь ни в коем случае не ставлю под сомнение ваши (Lukas, Скорп) знания Аксес-а

  Ответить  
 
 автор: Lukas   (04.10.2008 в 00:29)   личное сообщение
 
 

Для начала:

Public Function funTest()
    Dim i As Long
    Dim strTest As String
    Dim bytTest As Byte
    
    
    bytTest = 7
    Debug.Print "Select Case_Byte Start", Time()
    For i = 0 To 5000000
        Select Case bytTest
            Case Is = 1
            Case Is = 2
            Case Is = 3
            Case Is = 4
            Case Is = 5
            Case Is = 6
            Case Is = 7
        End Select
    Next i
    Debug.Print "Select Case_Byte End", Time()
    Debug.Print
    
    strTest = "&#209;&#243;&#225;&#225;&#238;&#242;&#224;"
    Debug.Print "If_Text Start", Time()
    For i = 0 To 5000000
        If strTest = "G" Then
            ElseIf strTest = "&#207;&#238;&#237;&#229;&#228;&#229;&#235;&#252;&#237;&#232;&#234;" Then
            ElseIf strTest = "&#194;&#242;&#238;&#240;&#237;&#232;&#234;" Then
            ElseIf strTest = "&#209;&#240;&#229;&#228;&#224;" Then
            ElseIf strTest = "&#215;&#229;&#242;&#226;&#229;&#240;&#227;" Then
            ElseIf strTest = "&#207;&#255;&#242;&#237;&#232;&#246;&#224;" Then
            ElseIf strTest = "&#209;&#243;&#225;&#225;&#238;&#242;&#224;" Then
            ElseIf strTest = "&#194;&#238;&#241;&#234;&#240;&#229;&#241;&#229;&#237;&#252;&#229;" Then
        End If
    Next i
    Debug.Print "If_Text End", Time()
    Debug.Print
    
End Function

'If_Text Start 0:25:35
'If_Text End   0:25:44
'
'Select Case_Byte Start      0:25:44
'Select Case_Byte End        0:25:44


Там где непонятки, это "Понедельник", "Вторник" и т.д. Сайт перекинул без моего участия.

  Ответить  
 
 автор: Скорп   (04.10.2008 в 00:39)   личное сообщение
 
 

не Lukas
это пока для меня сложновато
но я обязательно доберусь до таких примудростей рано или поздно

  Ответить  
 
 автор: Аленка   (04.10.2008 в 09:25)   личное сообщение
 
 

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

Ребят, вы лучше мне с моей системой слежения помогите, а? Здесь такая темка создана. Там не все так премудро. Наверное, для вас это не так сложно. А я одного не понимаю. Почему я, переписав, по сути дела код, получаю ошибки? Неужели в 2007 поменялся настолько синтаксис? Или учебник врет? Или я туплю? Конечно, скорее всего, последнее, но все равно не понимаю.

  Ответить  
 
 автор: Lukas   (04.10.2008 в 15:04)   личное сообщение
 
 

До кучи. Скорп, а зачем в каждой строчке проверять тираж на пустое значение?.
Проверь один раз в начале функции, если пусто - обнули все расчетные поля и вываливайся из функции.
В остальных строчках удали проверки. Код будет значительно короче и читабельней.

  Ответить  
 
 автор: Скорп   (04.10.2008 в 21:38)   личное сообщение
 
 

хм...точно
спасибо!

  Ответить  
 
 автор: час   (04.10.2008 в 22:20)   личное сообщение
 
 

Мнда - список значений был вопросик
Вопросик то был

  Ответить  
 
 автор: Скорп   (04.10.2008 в 22:37)   личное сообщение
 
 

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

  Ответить  
 
 автор: Скорп   (04.10.2008 в 22:33)   личное сообщение
 
 

и вообще можно без IIf обойтись оказывается


[Цена за единицу листовки] =  DMin("[1+0 А4]", "Таблица цен листовки", "[Тираж]<=" & [Виртуальный тираж по А4])


ибо в начале кода описал я

If IsNull([Тираж]) Or [Тираж] = 0  Then
...

Lukas? я правильно мыслю?
подожду ответа, потом начну исправлять если получу добро

  Ответить  
 
 автор: Lukas   (04.10.2008 в 22:42)   личное сообщение
 
 

Конечно, IIF станет не нужна.
Дополнительно:
Если в последних строчках ElseIF обрабатываются все оставшиеся значения, проще использовать оператор Else.
Заход в него осуществится, если предыдущие сравнения не дали True.

  Ответить  
 
 автор: Скорп   (04.10.2008 в 22:47)   личное сообщение
 
 

супер!
спасибо Lukas!

п.с. когда начал заказчику показывать, что я наваял, я показал код программы..тогда он у меня на 10 страницах был
потом стал его компоновать, однотипные операции выводить в функции
в итоге заказчику и показывать нечего, на 1-2-х листах помещается
еще скажет, что зря хлеб ем

  Ответить  
 
 автор: Lukas   (05.10.2008 в 00:49)   личное сообщение
 
 

Вот так человека без зарплаты оставим.

  Ответить  
 
 автор: Аленка   (05.10.2008 в 09:03)   личное сообщение
 
 

Ну и развили вы тут темку мою. Уже и человека без зарплаты, значит, оставить хотим
У меня когда-то тоже была такая ситуация. Еще когда я в икселе работала, я там тоже иногда баловалась ВБА. Но баловалась так, не более чем...
Так у меня там код вообще однажды был БОЛЕЕ 64К, то есть даже не влезал в один модуль. В итоге мой код влезал аж в 5 модулей. Представляете вы себе этот код?

А хотите посмеяться? Насколько уменьшился этот код после того, как мне сказали, что такой большой код дикость и посоветовали, как его изменить!
КОД УМЕНЬШИЛСЯ ДО ДВУХ СТРОЧЕК!
Это было моим первым уроком, что для всех однотипных операций нужно писать общий код.
Я в общем-то это и тогда знала, просто не знала как. Мучилась целый год, точнее не мучилась, а не парилась по этому поводу: ну не знаю и не знаю и ладно.
А когда заинтересовалась серьезно, то поняла, что надо был это сделать еще раньше

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