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

» VBA for Access

Автор: Slatsik
Дата сообщения: 21.05.2009 22:29
Уважаемые форумчане,
подскажите, плз, что в VBA отвечает за назначение свойств в окне [Сервис]->[Параметры запуска]? Буду очень признателен!
Автор: filemoto
Дата сообщения: 03.06.2009 16:59
Люди добрые, подскажите такую вещь, очень нужно.
Есть прайс, много позиций, я допустим, изменил цену у одной позиции, как можно пометить както, что произошло изменение у этой записи?
Чтобы потом макросом оставить только тех, в которых произошли изменения. Было 100 записей, у двух изменилась цена, я запускаю макрос, все записи удаляются, кроме тех, где произошли изменения.

Плиз хелп.
Автор: dneprcomp
Дата сообщения: 03.06.2009 19:51
filemoto
Где просходит изменение? Если записи в базу(только на скрине), то можешь менять цвет поля. Или заносить в массив идентификаторы какие-нибудь.
Если после записи в базу, то
или добавь еще одно поле в table и меняй его значение
или опять же заноси в массив ID измененых рекордов
Автор: TohaDub
Дата сообщения: 10.06.2009 09:04
Друзья, сразу оговорюсь что в сабже не силен.
Подскажите плиз есть форма


Как сделать что бы при нажатии на галочку, в поле проставлялась текущая дата?
Автор: vofkanov
Дата сообщения: 12.06.2009 22:36
TohaDub

по идее где-то так

Private Sub MBIspolz_AfterUpdate()
If MBIspolz Then
Me.MBIspolzDate = Date
End If
End Sub

Добавлено:
Slatsik
в ВБА не нашел, м.б. в Access?
Автор: TohaDub
Дата сообщения: 13.06.2009 07:45
vofkanov

Цитата:
в ВБА не нашел, м.б. в Access?


Наверное да, в конструкторе формы вызывается в обработчике (Microsoft Visual Basic).
Автор: vofkanov
Дата сообщения: 14.06.2009 12:54
TohaDub

Цитата:
Наверное да, в конструкторе формы вызывается в обработчике (Microsoft Visual Basic).

Параметры запуска?
Автор: jek1976
Дата сообщения: 20.06.2009 20:05
Извините за ламерский вопрос. Только начинаю разбираться с Access.
Подскажите, как организовать вывод записей из таблицы БД на экранную форму?
Автор: filemoto
Дата сообщения: 21.06.2009 02:05
а народ, будьте добры, скажите, вот я получил из другой базы рекордсет.
могу ли я его вставить в свою таблицу в текущей базе данных?

потому что. если делать перебором:

Код: while rs.eof = false
docmd.runsql ("INSERT INTO myTable(id, name) VALUES(" & rs.Fields(0) & ",'" & rs.Fields(1) & "')")
rs.movenext
wend
Автор: jek1976
Дата сообщения: 21.06.2009 13:42

Цитата:
Извините за ламерский вопрос. Только начинаю разбираться с Access.
Подскажите, как организовать вывод записей из таблицы БД на экранную форму?

Уточню вопрос.
Мне требуется организовать вывод записей из таблицы БД на экранную форму -- в таблицу с полосой прокрутки?

Штатная таблица БД, которую можно разместить на форме - не устраивает, т.к. там присутствуют (внизу) штатные кнопки перемещения по базе данных, а они мне не нужны! Для перемещения по базе вместо этих кнопок мне надо использовать полосу прокрутки.
Автор: dneprcomp
Дата сообщения: 21.06.2009 18:52
jek1976
Ну зачем задавать один и тот же вопрос повсюду? Уже отвечено в http://forum.ru-board.com/topic.cgi?forum=33&bm=1&topic=0357&start=860#lt

Добавлено:
filemoto

Цитата:
получается о-о-о-чень медленно
Как получен rs? Надо бы полный код приводить.
В общем виде нужна всего одна строка:
Код:
docmd.runsql ("INSERT INTO myTable (id, name) SELECT Fields(0), Fields(1) From [имя table, использованный для формирования rs]
Автор: jek1976
Дата сообщения: 21.06.2009 19:32
dneprcomp
Извиняюсь, не увидел ответа, т.к. не получал уведомление.
Автор: jek1976
Дата сообщения: 04.07.2009 00:01
Есть форма с размещенными элементами управления ComboBox.
Еще есть процедура, в которой считываются значения из этих элементов.
Вот ее фрагмент:


Код: 'опрос элементов управления
Автор = Me!Pole1.Text
Соавторы = Me!Pole2.Text
Название = Me!Pole3.Text
Издательство = Me!Pole4.Text
Год = Pole5.Text
Автор: dneprcomp
Дата сообщения: 04.07.2009 02:40
jek1976
Установить фокуc, естественно
[элемент].SetFocus
Автор: jek1976
Дата сообщения: 04.07.2009 21:03
dneprcomp
Спасибо, работает.

Но появилась другая проблема.
Опрос элементов у меня идет при событии Change в элементе TextBox с именем Pole3 (находится под Label'ом "Название" на картинке внизу сообщения). Поскольку при опросе значений остальных элементов формы фокус уходит с Pole3, то я автоматически "теряю" курсор, которым редактирую в нем текст.

Как мне "удержать" курсор в TextBox и в это же время еще умудриться, как и раньше, считывать значения из других элементов формы при событии Change? Или может быть опрос элементов делать каким-нибудь другим способом, без привлечения метода .SetFocus ?


Вот часть программы:



Это описано на уровне модуля:
----------------------------------
Option Compare Database
Option Explicit

'Глобальные переменные модуля
Dim БиблиоЗапись As String
----------------------------------



Это описано на уровне формы:
----------------------------------------------------------------
Private Sub Pole1_Change()
Call ПостроительБиблиографическойЗаписи("статья")
End Sub


Private Sub Pole2_Change()
Call ПостроительБиблиографическойЗаписи("труды")
End Sub


Private Sub Pole3_Change()
Call ПостроительБиблиографическойЗаписи("книга")
End Sub


Public Sub ПостроительБиблиографическойЗаписи(Тип As String)
Dim Автор As String
Dim Соавторы As String
Dim Название As String
Dim Издательство As String
Dim Год As String
Dim Том As String
Dim Номер As String
Dim Страницы As String
Dim Конференция As String
Dim МестоДатаПроведения As String
Dim МестоДатаОпубликования As String
Dim Серия As String

'опрос элементов управления
Pole1.SetFocus
Автор = Pole1.Text
Pole2.SetFocus
Соавторы = Pole2.Text
Pole3.SetFocus
Название = Pole3.Text
Pole4.SetFocus
Издательство = Pole4.Text
Pole5.SetFocus
Год = Pole5.Text
Pole6.SetFocus
Том = Pole6.Text
Pole7.SetFocus
Номер = Pole7.Text
Pole8.SetFocus
Страницы = Pole8.Text
Pole9.SetFocus
Конференция = Pole9.Text
Pole10.SetFocus
МестоДатаПроведения = Pole10.Text
Pole11.SetFocus
МестоДатаОпубликования = Pole11.Text
Pole12.SetFocus
Серия = Pole12.Text

'построение библиографической записи
Select Case Тип
Case "статья"
БиблиоЗапись = Автор + " " + Соавторы + " " + Название
Case "труды"
БиблиоЗапись = Автор + " " + Соавторы
Case "книга"
БиблиоЗапись = Автор + " " + Название
End Select

БиблиографическаяСтрока.SetFocus
БиблиографическаяСтрока.Text = БиблиоЗапись
End Sub
----------------------------------------------------------------


Это форма:
Все элементы связаны с одноименными полями таблицы БД. Исключение составляет лишь TextBox с именем БиблиографическаяСтрока (находится под Label "Библиографическая запись").


Автор: dneprcomp
Дата сообщения: 05.07.2009 09:04
jek1976

Цитата:
Поскольку при опросе значений остальных элементов формы фокус уходит с Pole3, то я автоматически "теряю" курсор, которым редактирую в нем текст.

Логику работы формы не понял. Что значит "теряю" и чем это мешает?
Какой смысел переформировывать строку после добавления/удаления каждого знака?
Лучше на LostFocus подвесить.
Автор: jek1976
Дата сообщения: 05.07.2009 12:27

Цитата:
Логику работы формы не понял.

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

Код: 'Действие после выбора ТипаПубликации на форме
Private Sub Pole0_AfterUpdate()
If Pole4.Text = "статья" Then
Pole4.Enabled = False
End If
. . .
End Sub
Автор: dneprcomp
Дата сообщения: 05.07.2009 20:59
jek1976
Логика работы скрина слишком "идеальна". Ну зачем
Цитата:
содержимое поля "Библиографическая запись" тоже должно изменяться ОДНОВРЕМЕННО
Кому может понадобиться строка, в которой один из параметров незакончен?

Заведи стринговые переменные по числу полей. На Lost Focus поля заноси его значение в соответственную переменную. Обновление "Библиографическая запись" тоже проводить на Lost Focus. Значение для записи бери только из переменных.


Добавлено:
Если уж так хочется оставить все как есть, то просто передавай Sub ПостроительБиблиографическойЗаписи второй параметер - из какого контрола пришел вызов. В соответствии с этим и возвращать фокус. Но я бы делал через Lost Focus
Автор: jek1976
Дата сообщения: 05.07.2009 22:56

Цитата:
Заведи стринговые переменные по числу полей.

Есть такие (см. предыдущий код).


Цитата:
то просто передавай Sub ПостроительБиблиографическойЗаписи второй параметер - из какого контрола пришел вызов. В соответствии с этим и возвращать фокус.

Я так уже делал, но при возврате фокуса контролу, курсор теряет свою позицию, а содержимое текстового поля оказывается полностью выделенным.


dneprcomp
У меня один общий вопрос: чем оправдана необходимость (в Access) установки фокуса на элемент управления перед чтением/записью его свойств, ведь в обычном VBA, да и в других языках, установка фокуса для операций чтения/записи свойств элементов управления НЕ ТРЕБУЕТСЯ. Объясните, если можно, в двух словах или дайте ссылку на источник, где это более-менее толково описано.
Автор: dneprcomp
Дата сообщения: 05.07.2009 23:11
jek1976

Цитата:
Есть такие

Переменные надо объявить на уровне модуля.
И присваивать значение только одной переменной в каждом контроле, а не в sub. На Lost Focus.

Цитата:
У меня один общий вопрос: чем оправдана необходимость (в Access) установки фокуса на элемент управления перед чтением/записью его свойств
Желанием/возможностью/потребностью MS
Цитата:
Объясните, если можно, в двух словах или дайте ссылку на источник
А почему, к примеру, в VBA при чтении из textbox надо писать textbox.text, a из label - label.caption объяснений не требуется?
А почему в VBA Access практически любая команда начинается с DoCmd, a в VB этого нет?
А в чем смысел жизни?
Уж такова реализация синтаксиса и внутреннего устройства языка. Все это надо просто принимать и применять.

Автор: jek1976
Дата сообщения: 05.07.2009 23:19

Цитата:
А почему, к примеру, в VBA при чтении из textbox надо писать textbox.text, a из label - label.caption объяснений не требуется?

Нет, это немного не то. Имена свойств - это несущественное отличие. А вот то, что в Access контролу требуется еще перевод фокуса на него, существенно усложняет достижение работоспособности программы.



Добавлено:
Ладно, не будем об этом...
Продолжим разбираться с мелочевкой?
Автор: dneprcomp
Дата сообщения: 05.07.2009 23:21
jek1976
"В чем смысел жизни, брат?"
Цитата:
Нет, это немного не то.
Уровень вопроса тот же

Цитата:
Уж такова реализация синтаксиса и внутреннего устройства языка. Все это надо просто принимать и применять

Автор: jek1976
Дата сообщения: 05.07.2009 23:26

Цитата:
Переменные надо объявить на уровне модуля.

Сделаю.


Цитата:
И присваивать значение только одной переменной в каждом контроле, а не в sub. На Lost Focus.

Почему именно LostFocus? Ведь если я, допустим, удаляю/добавляю символ в TextBox или выбираю значение в списке ComboBox, то после этого возникает событие Change!
Автор: dneprcomp
Дата сообщения: 05.07.2009 23:26
И это все ни в коей мере не "усложняет достижение работоспособности программы. "

Добавлено:
jek1976

Цитата:
Логика работы скрина слишком "идеальна". Ну зачем
Цитата:содержимое поля "Библиографическая запись" тоже должно изменяться ОДНОВРЕМЕННО
Кому может понадобиться строка, в которой один из параметров незакончен?


Для чего вообще нужна строка в состоянии динамической модификации. Когда же и как эта строка будет использована?
Автор: jek1976
Дата сообщения: 05.07.2009 23:32
"Незаконченность" параметра справедлива лишь для окон TextBox, а для ComboBox'ов мгновенное отображение информации очень удобно и весьма к месту. Ведь я могу не уйти с ComboBox'а на другой элемент, а повторно выбрать значение (уже другое) из его списка, и при этом никакого события LostFocus не произойдет, ведь я же с элемента не ушел!
Автор: dneprcomp
Дата сообщения: 05.07.2009 23:33
В ComboBox использовать событие Click
При Change нет гарантии, что выбр значения завершен пользователем
Автор: jek1976
Дата сообщения: 05.07.2009 23:37

Цитата:
В ComboBox использовать событие Click

ОК.


Цитата:
Для чего вообще нужна строка в состоянии динамической модификации. Когда же и как эта строка будет использована?

Она нужна! Дело в том, что при просмотре записей в БД я могу вносить коррективы в различные элементы библиографической записи, например, заменю одну последнюю цифру в году выпуска или заменю номер журнала. Тогда изменения должны быть видны сразу!!! А использовать доп. кнопку для обновления библиографической строки - это очень неудобно, т.к. с прогой будут работать разные люди, могут и не догадаться о ее назначении. Да и мне это будет неудобно.
Автор: dneprcomp
Дата сообщения: 05.07.2009 23:38
В добавок ко всему, надо или запрещать ввод в ComboBox, или проверять введенное на наличие в листе

Добавлено:
jek1976

Цитата:
Дело в том, что при просмотре записей в БД я могу вносить коррективы в различные элементы библиографической записи, например, заменю одну последнюю цифру в году выпуска или заменю номер журнала. Тогда изменения должны быть видны сразу

1.Где видны?
2.Когда и как происходит поиск?
3.Где и как происходит отображение результатов поиска?


Добавлено:
Заметь, я нигде в моих постах не говорил о кнопке?!
Автор: jek1976
Дата сообщения: 05.07.2009 23:46

Цитата:
1.Где видны?

В строке Библиографическая запись, внизу.

Автор: dneprcomp
Дата сообщения: 05.07.2009 23:48
jek1976
2 and 3?

Страницы: 1234567891011121314151617

Предыдущая тема: Delphi+ADO


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