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

» Access VBA

Автор: yuish
Дата сообщения: 14.09.2006 16:30
есть кнопка (база акцесовская проект на Delphi, коннект не через BDE) по кнопке делаеется запрос на апдейт.
если жмешь один раз - все нормально, но если нажать быстро, типа даблклик - вываливается ошибка - Транзакция не может быть запущена, слишком много транзакций.
потом не работает ничего на update, select берет нормально, надо прогу закрывать.
Автор: kolob204
Дата сообщения: 14.09.2006 16:31
Можно ли в Процедуре обработки события - вызвать другое приложение?

Private Sub Список_AfterUpdate()
If Список.Value = "Текст" Then "Вот тут нужно чтобы открылся файл с расширением *.mht"
End Sub

Смысл в том, что у меня много таблиц в html коде, а пергонять их в аксесовские очень долго и получится нечитабельно...

Есть ли способы?
Спасибо.
Автор: Yuk
Дата сообщения: 14.09.2006 18:07
kolob204
См. функцию Shell.
Файл можно открыть через ассоциации командой start.
Автор: kolob204
Дата сообщения: 14.09.2006 19:28
Знать бы с какой стороны смотреть
Я посмотрел в хелп, толкого объяснения как пользоваться не нашёл... поэтому попросил помощи, если кто то вызывал таким образом "чужие" приложения - напишите пожалуйста пример кода: может тогда разберусь... жаль нет не одной толковой книжки по аксесу
Автор: Troitsky
Дата сообщения: 15.09.2006 08:26
kolob204
Например

Код: Shell "C:\Program Files\Internet Explorer\iexplore.exe C:\file.mht", 3
Автор: ValeryZ
Дата сообщения: 25.09.2006 11:18
Подскажите как в Access 2007 преобразовать число в пропись. Процедуры от 2003 не проходят почему-то.
Автор: MoKC0DeR
Дата сообщения: 25.09.2006 14:20
Написал небольшой код в Word который созраняет все документы(*.doc) в текстовом формате после переноса в Access код стал работать криво - сохраняет с расширением txt. но в формате Word'а. Что не верно написано ?

Код:
Sub WordToTxt()
Dim WordApp As Object, FPath$, FName

FPath = "c:\1\"
FName = Dir(FPath & "*.doc", vbNormal)

Set WordApp = CreateObject("Word.application")
WordApp.Application.Visible = True
While FName <> ""
WordApp.Documents.Open FileName:=FPath & FName, ConfirmConversions:=False, ReadOnly:= _
False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:= _
"", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:=""
WordApp.ActiveDocument.SaveAs FileName:=FPath & Left$(FName, Len(FName) - 4) & ".txt", FileFormat:=wdFormatText, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False, Encoding:=1251, InsertLineBreaks:=False, AllowSubstitutions:=False _
, LineEnding:=wdCRLF
ActiveWindow.Close
FName = Dir
Wend
End Sub

Автор: Spalex
Дата сообщения: 03.10.2006 12:04
Сразу оговорюсь: это по сути мой первый опыт в Access и может быть вопрос наивный, простой и т.п., но в справка и поиск не помогли — мне сложно даже понять ЧТО я ищу.

Объясню суть проблемы на простом примере, в жизни всё чуть-чуть сложнее.
База данных на MS Access'е.
Есть таблицы A и B.

поля A: akey (K), aname, a1, a2 (вплоть до aN — это неважно)
поля B: bkey (K), bname

Между A и B есть связь многие ко многим, реализуемая посредством таблица AB

поля AB: akey, bkey, ab_desc
где akey и bkey совместно являются ключом.

Создал форму для добавления записей в A. Вид примерно такой:

-------------------------------
Key (read-only): |_______|
Input A name: |__________|
Input A a1: |__________|
Input A a2: |__________|
-------------------------------

Очень хочется сюда же добавить список из AB, соответствующей просматриваемой записи из A, т.е. все записи из AB с значением akey как у показываемой записи.
Например так (в списке показываются соответствующие имена из B):

-------------------------------
Key (read-only): |__123__|
Input A name: |_my name__|
Input A a1: |_some a1__|
Input A a2: |_some a2__|

All AB for this:
--------------------
| bname1|
| bname2|
--------------------
<Add new AB>
-------------------------------

Собственно вопросов получается два:
1. Как создать такой список?
2. Как сделать кнопочку добавления новой записи в этот список?

Вот до чего я пока сам дошёл:
RE: 1. Список можно создать, например, с помощью запроса с параметром (значение akey). На форму кидается контрол-список, который связывается с запросом. Запрос я составил — это не вопрос. Проблема: как синхронизировать содержимое списка с выводимой записью A? Как заставить обновляться список при смене показываемой записи и вообще как передать параметр в запрос, не заставляя пользователя вводить его вручную?
RE: 2. Ну кнопку-то положить на форму я могу . Но вот как быть дальше? Что к ней привязывать, как поступить проще, правильней? Придётся писать новую форму добавления в AB или можно как-то обойтись одной уже сделанной, добавив что-то на неё?

Вот собственно. Если всё просто, то буду премного благодарен за любой пинок в правильном направлении: ключевые слова, по которым надо искать или что-то подобное.
Автор: jONES1979
Дата сообщения: 09.10.2006 12:29
MoKC0DeR

Вероятно ты забыл поставить

Option Explicit

в начале модуля


Аксесс не знает вордовских констант, таких как

wdFormatText, wdCRLF и прочих. Их надо заменить на целочисленные константы просто


Добавлено:
то есть на целочисленные ЗНАЧЕНИЯ этих констант
Автор: MoKC0DeR
Дата сообщения: 09.10.2006 16:58
jONES1979
Спасибо!

Автор: zzzzz
Дата сообщения: 27.11.2006 11:45
Как при открытие моей базы запретить нажатие shift, чтоб скрыть надёжно все потроха от любопытных?
Автор: Dixi257
Дата сообщения: 27.11.2006 12:15
zzzzz

http://msa.polarcom.ru/st/d_1000173.htm
Автор: zzzzz
Дата сообщения: 27.11.2006 16:10
сейчас проверю.
Спасибо.
Автор: lexrem
Дата сообщения: 08.12.2006 15:17
Такой вопрос. В отчете выводятся поля таблицы. Можно ли сделать так, чтобы они выводились в сетке? (Как таблицы в ворде?) Трудность в том, что одно из полей сможет растягиватся по вертикали на две-три строки, и вылазит за нарисованные в области данных линии.
Автор: MrZeRo
Дата сообщения: 08.12.2006 15:26
lexrem
Поля подогнать по размеру друг к другу и сделать рамку на поле (свойства "оформление", "тип границы")
Автор: jONES1979
Дата сообщения: 08.12.2006 16:01
zzzzz
Сформировать ьву-файл

Добавлено:
mde-файл
Автор: MrZeRo
Дата сообщения: 08.12.2006 16:10
jONES1979
zzzzz
Но есть еще кнопка F11, от нее mde-файл не защитит. Правда, кода видно не будет, но формы, отчеты, таблицы будут.
Автор: lexrem
Дата сообщения: 08.12.2006 19:15
MrZeRo

Цитата:
Поля подогнать по размеру друг к другу и сделать рамку на поле (свойства "оформление", "тип границы")

Оно бы работало, если б не изменяемое по вертикали поле. А так получается что однострочные поля так и обводятся, а которое на две или три строки вылезает из общего ряда.
Автор: MrZeRo
Дата сообщения: 11.12.2006 16:24
lexrem
Вот мои изыскания, может, помогут.
В отчете повесил обработчик на область данных, событие "форматирование", там написал

Цитата:

Dim ctl As Control
For Each ctl In Me.Controls
With ctl
If ctl.name = "Title" Then
.Height = 400
End If
End With
Next ctl

У меня Title - контрол, высота которого недостаточна. Можно пройтись по всем необходимым контролам. Но как узнать нужную высоту - вот вопрос. Может, как-то, исходя из длины растягивающегося по вертикали поля ...
Автор: engine
Дата сообщения: 06.01.2007 14:40
lexrem
Если еще не решил проблему, то я делал это так:

Проверял на событии печать (Print) высоту всех элементов, затем рисовал рамку вокруг полей с найденой высотой MaxElementHeight.
' поиск самого высокого расширяемого элемента типа acTextBox
For Each c In Report.Section(acDetail).Controls

If c.ControlType = acTextBox Then
If c.CanGrow And c.Visible Then

If c.Height > MaxElementHeight Then
MaxElementHeight = c.Height
End If
End If
End If
Next c

' рамка
For Each c In Report.Section(acDetail).Controls
Report.Line (c.Left, c.Top)-(c.Left + w, c.Top + MaxElementHeight), , B
Next c

В конце возвращал значение MaxElementHeight в стандартное DefaultElementHeight которое сохранял при старте отчета.
Да ... естественно все элементы должны быть с прозрачной рамкой )

Добавлено:
Есть проблема:
Из VB Access открывается файл Excel для импорта данных. Все вполне работает, но только если в исходном Excel нет картинок. В связи с чем вопрос:

Как удалить картинки из файла Excel, используя средства VBA?

Вот что пробовал:
Dim ddd As Excel.Shape
Dim my_shapes As Excel.Shapes

Set my_shapes = ExcelSheet.Shapes

For Each ddd In my_shapes
ddd.Delete
Next ddd

Выругивается (
Автор: filemoto
Дата сообщения: 15.01.2007 18:19
срочно нужна ваша дапамога.
У меня небольшой трабл. может вам известно как решить его. Это связано
с акцесом. Вот суть:
есть база mdb, в ней есть таблица [main] в которой есть 2 поля: Группа
и Подгруппа. Эти поля заполняются из таблиц Группа и Подгруппа
соответственно. Вопрос:
как сделать, чтобы при выборе Группы в таблице [main] поле Подгруппа
автоматически изменялась согласно определённым связям в таблице
Подгруппа.
Например, я в таблице [main], в колонке Группа ввожу "Audi", значит в
в колонке Подгруппа, при подстановке, должны отобразиться только те модели,
которые связаны в таблице Подгруппа, а это: A4, Avant, C80, C100...

Как такое можно сделать? Помогите пожалуйста

сам тестоввый фал тут: http://milovar2000.at.tut.by/test.mdb
Автор: dneprcomp
Дата сообщения: 16.01.2007 03:26
filemoto
В самой таблице почти ничего автоматически сделать нельзя. Если я правильно понял вопрос, то такие вещи надо делать на форме. Скажем, изменили DropDown List Группа. По результатам его изменения строится Select запрос и этот запрос указывается как Data Source для DropDown List Подгруппа.
Автор: filemoto
Дата сообщения: 16.01.2007 09:29
dneprcomp
да, я понимаю, что в таблице ничего не получиться. я и имел ввиду реализацию на форме...
у меня что-то не получается сделать запрос никак, или получается, но както странно... может кто-то смог бы попробовать? столько марок и моделей, запутаешься вбивать вручную...
Автор: Dixi257
Дата сообщения: 16.01.2007 10:48

Цитата:
у меня что-то не получается сделать запрос никак, или получается, но както странно

Ну на мой взгляд есть два путЯ. Вариант 1 - динамически изменять источник данных (запрос) поля подгруппа. Вариант 2 - программно формировать запрос и программно заполнять список поля подгруппа.

Запрос должен быть типа Select * From [Подгруппа] Where [Код_группы]=[Значение_поля_группа];

Обратите внимание, таблица [Подгруппа] должна содержать ссылку на уникальный индекс (например поля счетчика) таблицы [Группа]. Обратите внимание, надо очень аккуратно расписать бизнес-правила, т.е. то, как форма взаимодействует с пользователем, какие поля свободные какие связанные, когда происходит обновление данных в таблицах, нужна ли поддержка транзакций и т.д. Многое станит ясным.
Автор: filemoto
Дата сообщения: 16.01.2007 12:27
Dixi257
я там привел тестовый вариант базы. неужели в ней ничего такого нельзя сделать? мне не нужны какие-либо транзакции. мне просто надо забить базу. она постоянно пополняется, а тут столкнулся с какой-то выборкой и понял, что это тупик. неужели нет выхода из положения? Dixi257 сделайте же что-нибудь...
Автор: jONES1979
Дата сообщения: 16.01.2007 14:39
MrZeRo

ну! не надо о пустом! что тебе даст картинка формы без логики? А про структуру баз - тут даже сам аксесс не нужен, достаточно подцепиться к базе с помощью ADO

я считаю, mde-файл - лучший и достаточный вариант... А других - просто нет
Автор: Dixi257
Дата сообщения: 16.01.2007 16:11

Цитата:
Dixi257 сделайте же что-нибудь...


Да не могу я так... Я ж написал, что в таблице группы должен быть уникальный индекс. К нему надо привязывать данные из таблицы подгруппы, а не к текстовому полю.
Но пример для Вас я сваял http://slil.ru/23756331
Автор: filemoto
Дата сообщения: 16.01.2007 17:32
Dixi257
спасибо большое!!!
вроде бы то, что нужно. пытаюсь осмыслить.
у тебя может есть аська?
Автор: armen13
Дата сообщения: 23.01.2007 11:22
Доброе время суток.
Мне нужно сделать учет договоров компании.
1) Просмотр и добавление информации хотелось бы через интернет браузер - htm страничка.
2) При вводе данных запрашивается информация о договоре такие как: с кем договор, номер договора, дата подписания, сумма, оплачено (да/нет).
3) Очень хочется видеть поиск по различным параметрам, ну как минимум по номеру договора и по колонке оплачено/не оплачено.

Наверняка есть уже такие базы, но я видать плохо пользуюсь гуглом - одни платные предложения.
Меня не ломает сделать самому, но не хотелось бы Вас напрягать с глупыми вопросами.
Поэтому прошу дать мне ссылки на электронные книги по Access'у для начинающих. На форуме искал - нашел только уже не рабочие ссылки.
Автор: lmnik
Дата сообщения: 16.02.2007 23:13
В MS Accesse создал форму для заполнения данных. Данные разбиты по регионам. Есть выпадающее поле со списком регионов. Как можно сделать чтобы при выборе региона форма "переходила" на соответствующую запись т.е. остальные поля обновлялись вместе с полем "регионы"?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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