Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Access VBA

Автор: GSkva
Дата сообщения: 14.02.2012 21:13
Кто-то чего то не до понял...... Ладно сначала....
Есть несколько одинаковых по структуре (клиентских) баз данных (mdb). В каждой базе данных у каждого клиента данные свои и не пересекаются с другими базами, могут лежать в любой папке и называться как угодно. При необходимости доработать базу (добавление или редактирование таблиц, макросов, кнопок, отчетов и т.п.) приходиться брать базу данных первого клиента, перекидывать из нее данные в доработанную базу и отдавать ему. Брать базу 2-го клиента, перекидывать из нее данные в доработанную базу.......и т.д.

Задача: В базе данных у клиента сделать некую кнопку "Обновить" при нажатии которой база считывает, из присланного мной отдельного файла, код процедуры VBA или макроса и запускает его на исполнение. И эта процедура или макрос, в свою очередь, делает изменения с структуре клиентской БД (обновляет БД).

Как организовать технически? Или может кто-нибудь посоветует в этой ситуации что-либо другое?

Добавлено:
Напомню изменения будут только в структуре БД и на клиентские данные никак влиять не должны!!! Т.Е. импорт новых таблиц из новой базы не прокатит
Автор: aidomars
Дата сообщения: 14.02.2012 21:23
Я вот тоже чего то не до понял.....

Цитата:
При необходимости доработать базу (добавление или редактирование таблиц, макросов, кнопок, отчетов и т.п.)

Интерфейс тоже дорабатывается?
База данных разделена?
Может проще разослать итерфейсную часть клиентам?
Автор: GSkva
Дата сообщения: 14.02.2012 21:46
Интерфейс конечно тоже, если например добавился новый отчет, но нужно кнопочку клиентам на него вывести.

Сети нет, связи с клиентами тоже (никаких серверов), база не разделена, потому что каждый работает в своей собственной базе со своими данными.
Что они будут делать с интерфейсной частью?
Автор: novo_again
Дата сообщения: 14.02.2012 22:12
Все равно не понял...(((
Зачем клиент должен превращать себя в новую базу? Почему новая база не может всосать в себя данные? Просто сделайте в новой кнопку "Вставить данные из другой базы"...
Автор: GSkva
Дата сообщения: 14.02.2012 22:50
1) Потому что вялому и линивому клиенту не объяснишь какую базу он должен выбрать для импортирования
2) И самое важное. Часто бывают случаи, что при неправильном обращении с базой, через проверки все таки проскальзывают данные которые при ИМПОРТИРОВАНИИ могут ругнуться на несовместимость данных с форматом полей. Если при импортированиии возникнет такая проблема или ошибка, то для клиента это катастрофа! И работа остановится.
3) Люди (клиенты) уже на интуитивном уровне привыкли что программа именно обновляется, а не сосет данные из старых версий.

Добавлено:
Проблема только в том, как загнать в старую базу новую процедуру из внешнего источника и запустить ее программно?


Добавлено:
Представьте импортирование базы из 40 таблиц и нескольких сотен тысяч записей, ради того чтобы добавить маленький отчет и поменять название кнопки ...продуктивно!
Автор: aidomars
Дата сообщения: 15.02.2012 04:09

Цитата:
Представьте импортирование базы из 40 таблиц и нескольких сотен тысяч записей, ради того чтобы добавить маленький отчет и поменять название кнопки ...продуктивно!

А зачем делать импортирование базы из-за нового отчета или кнопки? Разделять базу не пробовал?
Автор: novo_again
Дата сообщения: 15.02.2012 04:20
По-моему, ничто не поможет Вашему горю.
С другой стороны, как Вы будете объяснять ленивому клиенту, куда сохранить новую базу?
Конфликта с данными не должно быть, потому что, не понятно, почему, если данные успешно введены один раз, они должны вызвать конфликт при импорте.
Люди на интуитивном уровне привыкли, что Вы им все делаете сами, направления потоков данных их не волнует.
А почему нет? Я рассуждаю как чайник, но по-моему все АБС так обновляют)) Сначала ставят и тестируют новую версию, потом что? Миграция данных! А не кода... Вообще, это возможно только на ассемблере - представьте, вставить в физическое тело файла базы в определенное место биты с кодом... Это похоже на искусственный интеллект)
Опять же, кто-нибудь из Бауманки Вам все на научной основе объяснил бы, но они пока с интересом наблюдают)))
Автор: GSkva
Дата сообщения: 15.02.2012 10:23

Цитата:
[/q]

Цитата: А зачем делать импортирование базы из-за нового отчета или кнопки? Разделять базу не пробовал?

Вот именно что незачем!

Цитата:
как Вы будете объяснять ленивому клиенту, куда сохранить новую базу?

никак он нажмет кнопку обновить, а остальное сделает программа


Половину вопроса решил



Добавлено:
[q]А зачем делать импортирование базы из-за нового отчета или кнопки? Разделять базу не пробовал?
Автор: aidomars
Дата сообщения: 15.02.2012 14:27
Я в третий раз спрашиваю, база разделена у тебя?
Автор: GSkva
Дата сообщения: 16.02.2012 16:53
Нет не разделена!!!! не зачем разделять. Если нужно будет поменять структуру таблиц то разделение не поможет!
Автор: S Mole TT
Дата сообщения: 25.03.2012 00:05
Доброго времени суток, уважаемые!
Прошу помощи. access 2007.
Хочу сделать в таблице Столбец подстановок, источником строк в котором будет SQL запрос.
Типа такого
SELECT Кабеля.[Коробка соед]
FROM Кабеля
WHERE Кабеля.[Расположение коробки] = значение

А значение должно браться из соседней ячейки в этой же строке.

Как получить содержимое ячейки и как передать его в запрос?
Спасибо.
Автор: novo_again
Дата сообщения: 25.03.2012 09:06
SQL запрос сам по себе выполняет функцию подстановки - выдает все коробки соед. с одним расположением коробки, заданным в условии.
Автор: S Mole TT
Дата сообщения: 25.03.2012 19:27
Все верно. Если это условие фиксированное и его прописать зарание. Но у меня задача другая. Условие должно быть динамичным, и менятся в зависимости от того в какой строке происходит ввод данных.
Автор: dneprcomp
Дата сообщения: 25.03.2012 19:56
S Mole TT
При переходе на строку перед запуском селекта получить значение поля-критерия в переменную. Затем использовать в селекте как параметер.
Автор: S Mole TT
Дата сообщения: 25.03.2012 20:06
dneprcomp
Именно это я и хочу сделать, только незнаю как
Автор: novo_again
Дата сообщения: 25.03.2012 20:07
Не совсем тогда понимаю, что такое "Столбец подстановок". Если это обычное поле, которое дает возможность ввести значение из выпадающего списка - зачем чего-то динамически менять, когда можно для каждого поля прописать все заранее...
Автор: S Mole TT
Дата сообщения: 25.03.2012 20:17
novo_again
Совершенно верно, столбец полстановок это выпадающий список значение в который берутся или из таблицы или запроса. Только в моем случае выпадающий список содержит очень много значений, палец устанет колесико крутить, пока нужное значение найдешь. Вот и хочу ограничить этот список только допустимыми значениями.
Автор: novo_again
Дата сообщения: 25.03.2012 20:49
ИМХО: Вы сосредоточились не на том. Столбец подстановок нужен для выбора всего лишь из нескольких значений. Использовать для этого как источник большую таблицу противоречит логике (ИМХО).
Автор: S Mole TT
Дата сообщения: 25.03.2012 20:59
Если источником строк в Столбце подстановки использовать таблицу то да, значений очень много и это не удобно. Поэтому я хочу как источник строк использовать запрос который вернет 5-7 значений. Только мне надо ему передать параметр. Для каждой строки в таблице он будет свой,и расположен он в соседней ячейке. Нужно только как-нибудь его вычленить и передать.
Автор: dneprcomp
Дата сообщения: 26.03.2012 04:03
S Mole TT
Сначала объясните, что является "этой строкой", а что такой строкой не является.
И как собственно получаете саму строку.
Покажите логику работы скрина. Что делает юзер и что должна сделать программа.

PS. Сколько уникальных значений в поле Кабеля.[Расположение коробки] ?
Похоже, что вам может подoйти один из способов.
1.Изначально сделать содержимое выпадающего списка не динамическим, а постоянным по запросу
Код: SELECT DISTINCT [Расположение коробки] FROM Кабеля
Автор: S Mole TT
Дата сообщения: 26.03.2012 18:28
dneprcomp
Строка - это запись в таблице, состоящая из десятка полей.
Значения в эту строку вносит пользователь заполняя таким образом БД.
Пишу это дело только для себя, дабы автоматизировать свой труд. Поскольку для себя то красивости мне никчему - никаких форм не использую, просто создал таблицы и пошел их заполнять.
Не совсем понимаю что значит "показать логику работы скрина".... Если это логика связей таблиц, то:



Добавлено:
[more] Есть справочник "Производственные зоны" в котором все производство разбито на производственная зоны и хранятся ссылки на чертежные листы этих зон. Все зоны уникальны.

Есть справочник "Кабеля" в котором перечисленны магистральные кабеля идущие от шкафов в щитовой до коробок расположенных в производственных зонах. В этой таблице есть поле "расположение коробки" - значение берется из справочника "Производственные зоны". В каждой зоне коробок 5-10.

И есть главная таблица БД - "Приборы". Тут поля "прибор", несколько полей с тех. хар. и прочей служебной инфой, потом поле "Расположение" (из справочника "производственные зоны"), и поле "коробка" к которой подключен прибор (из справочника "Кабеля").
И когда я заполнил все данные о приборе, указал его расположение и дошел до значения коробки я хочу чтобы выпадающий список предлагал мне выбрать не из всех возможных коробок (справочник "Кабеля") а только те значения, которые совпадают по расположению.

Немного сумбурно, но как могу....

П.С. Спасибо что пытаетесь помочь.
[/more]
Автор: novo_again
Дата сообщения: 26.03.2012 20:38
Имхо, здесь как раз подойдет минимальное украшательство - в формочке уже есть где разгуляться и как передать фильтр... В любом случае, попробуйте допполя в выпадающем списке, они позволят отсортировать и сгруппировать коробки
Автор: dneprcomp
Дата сообщения: 26.03.2012 21:49
S Mole TT
Исходя из приведеного описания структуры базы и связей между таблицами, попробуйте:

Код: SELECT [Кабеля].[Коробка соед]
FROM [Кабеля] INNER JOIN [Производственные зоны] ON [Производственные зоны].[расположение коробки] = [Кабеля].[расположение коробки] INNER JOIN [Приборы] ON [Приборы].[расположение коробки] = [Производственные зоны].[расположение коробки]
WHERE [Приборы].[расположение коробки] = значение
Автор: S Mole TT
Дата сообщения: 27.03.2012 11:43
Запрос то я пишу, только как мне туда значение передать? Если так сделать то при получения фокуса на ячейку ввода выскакивает окно ввода переменной "Значение", вводишь значение, выполняется запрос и пыпадает нужный мне список. Тогда весь смысл выпадающего списка теряется...
Как сделать чтобы окно ввода не появлялось?
Автор: novo_again
Дата сообщения: 27.03.2012 11:56
А что если сделать форму в виде таблицы? Там уже можно покрутить данными, обратившись к ним через Forms!Кабеля.Коробка.
Автор: S Mole TT
Дата сообщения: 27.03.2012 12:02
Думаю, мне по получению фокуса на ячейке необходимо автозапуск макроса, который определит значение в ячейке и изменит сохранненый запрос, заменив в нем значение переменной "Значение". После этого макрос запустит на выполнение "подправленный" запрос. Когда-то давно я делал нечто похожее на 2003 access-е. А в этом,блин, я даже немогу понять как записать макрос....
novo_again
А без формы доступ к ячейкам таблицы получить нельзя?
Автор: dneprcomp
Дата сообщения: 27.03.2012 17:40
S Mole TT

Цитата:
Как сделать чтобы окно ввода не появлялось?

А вот это уже зависит от той самой логики работы скрина.
В приближении, при выборе юзером расположения на потерю фокуса контрола выбранное зачение заносится в переменную. Эту переменную используем как авто параметер селекта. На ивент получения фокуса выпадающим списком пишется его обновление.
Автор: S Mole TT
Дата сообщения: 27.03.2012 22:18
dneprcomp
Ох как много новых слов.... попробую осмыслить...
Автор: dneprcomp
Дата сообщения: 28.03.2012 00:26
S Mole TT
Вот нечто подобное для Access 2007
Synchronizing Combo Boxes on Forms in Access 2007
Автор: LEMON7day
Дата сообщения: 28.03.2012 03:18
[more] Приветствую всех гениев цифрового мира!
Обращаюсь к вам за помощью. Срочно. Необходимо решить проект базы данных для компании.
И так.
Есть форма, состоящая из 2 строк списков и кнопка печати отчета.
как сделать так чтобы эти списки делали необходимую мне выборку из таблиц и в конце печатался отчет из 3 таблицы "Поставщики".
я вот подумал и у меня полился алгоритм вот как то так ->


Если в списке «Вид работы» происходит выбор, из таблицы «Вид работы», в поле «Виды работ», из строки «1», то на список «Материалы» накладывается ограничение, которому присваивается значение Х, при условии, что Х обращается к таблице «Материалы», полю «материалы» и строкам с 1 по 54.
Затем при нажатии на кнопку «Отчет» показывается страница предварительного просмотра печати документа, в котором указаны сведения из таблицы «Поставщики», при условии, что эти сведения (Название компании, адрес, город, тел./факс и @) заранее прикреплены для каждого материала.

С уважением, такой же простой искатель истинны. =)
[/more]

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: BDE - траблы, помогите пожалуйста срочно...


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.