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

» Access VBA

Автор: Nightcrawler
Дата сообщения: 07.07.2006 11:52

Цитата:
Ищу информацию, способы и программы(можно и платные) для декомпиляции mde файлов. База 97-я

Access MDE Unlocker ? hxxp://www.gonnasoft.com/Business/Databases-Tools/Access-MDE-Unlocker-29399.html
Автор: Agilyera
Дата сообщения: 10.07.2006 10:04
Привет,
У меня сложность с Access. Стандартыми средствами построил таблицы и форму для ввода пользователей.

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

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

Автор: dneprcomp
Дата сообщения: 10.07.2006 17:44
Agilyera
Смотри в хелпе функцию Dir. Там и примеры есть подходящие.
Автор: Yuk
Дата сообщения: 11.07.2006 17:50
Agilyera
Поставь функцию на обычную кнопку:
Код: Private Sub CommandButton1_Click()
Dim fName As String
fName = Application.GetOpenFilename()
If Not fName = "False" Then
TextBox1.Value = fName
End If
End Sub
Автор: poushkar
Дата сообщения: 11.07.2006 22:51
создаю таблицу с помощью конструктора,ставлю ключ на первую строку (Код страны), её тип ставлю - числовой, и незнаю как сделать так,чтоб была таблица, например:

Код Страны | Страна
1 Украина
2 Россия
3 Беларусь
1 Украина


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

Как быть ?
Автор: Yuk
Дата сообщения: 11.07.2006 23:26
poushkar
Ключ обязан быть уникальным. Либо вобще не создавай ключ, либо сделай дополнительное поле - идентификатор строк.
Автор: poushkar
Дата сообщения: 12.07.2006 00:39
тогда становится ненужным "Код страны", так как именно он и является идентификатором...а без этого "кода страны" нельзя. так поставлена задача
Автор: Yuk
Дата сообщения: 12.07.2006 02:57
poushkar
Тогда объясни разницу между 1-й и 4-й строками. Если ты привел все поля, 4-я запись тебе не нужна, так как она идентична 1-й (или нет?;)).
Если же в таблице есть что-то еще, то покажи всю таблицу. В этом случае, ключом будет не код страны, а что-то другое. Если же тебе нужен код страны как ключ, вынеси все страны в отдельную таблицу.
Автор: poushkar
Дата сообщения: 12.07.2006 04:11
Ты прав, она не нужна в данном примере...В общем задача состоит в создании БД с данными о нафтогазоносных месторождениях.
Есть данные о :
Названии региона, названии области, названии месторождения, местонахождении месторождения, типе месторождения, размере за залежами нефти, размере за залежами газа, годе открытия, годе введения в разработку.
Надо создать таблицы:
1.Регион - код региона, название региона;
2.Область - код региона, код области, название области;
3.Месторождение - код области , код месторождения, название месторождения, местоположение месторождения, код типа месторождения, код
размера за залежами нефти, код размера за залежами газа, год открытия, год введения в разработку;
4.Тип месторождения - код типа месторождения, тип
месторождения;
5.Размеры месторождения - код размера месторождения, размеры
месторождения.

Задача заключается в следующем:
Изготовить отчет о распределении количества месторождений в областях за типом месторождения. Напротив названий областей и
месторождений, разделенных пробелом, установить значение количества для каждого типа месторождения. Предусмотреть итоги по
вертикали и по горизонтали. К заглавию отчета прибавить слова “состоянием на ” и установить текущую дату.


В общем я не хотел всю задачу выкладывать.. Буду пытаться сделать это сам. Хотя сегодня первый раз работаю с Access ( так сложились обстоятельства, что мне доручили сделать эту БД ). Но вижу, что мои примеры "дешевые" Так что думаю легче будет разобраться на настоящей задаче...
Автор: Yuk
Дата сообщения: 12.07.2006 07:54
С таблицами у тебя вроде проблем нет. Повторюсь, что все записи в них должны быть уникальны. Порядок записей в таблице никак не определяется.
Ключи определяются беz проблем. В таблице Регион - это код региона,
Область - код области, Месторождение - код месторождения,
Тип месторождения - код типа месторождения, Размеры месторождения - код размера месторождения.
При составлении запроса соедини общие поля в таблицах. Например, код региона в таблицах Регион и Область. Это создаст INNER JOIN связь между таблицами. В запросе тебе похоже придется использовать агрегатные функции с группировкой для итогов по горизонтали. У меня аксесс английский - группировка включается, если нажмешь правой кнопкой мыши на таблице запроса (в режиме дизайна) - Totals (или в меню View - Totals).
Для итогов по вертикали нужно будет использовать объединять несколько запросов или лучше создавать отчет.
В общем, поиграйся, будут вопросы - спрашивай.
Автор: Kaylang
Дата сообщения: 12.07.2006 13:24
Разбираюсь с чужой прогой на Access, но в самом Access не шуруплю. Кто-нить может помочь оптимизировать сей запрос?

Код: SELECT Attivita.Nome, Scadenza.Nome, Interventi.IDIntervento
FROM Scadenza INNER JOIN (Attivita INNER JOIN QueryUnion ON Attivita.IDAttivita=QueryUnion.IDAttivita) ON Scadenza.IDScadenza=QueryUnion.IDScadenza
WHERE QueryUnion.IDServer=Forms!ListaServer!tidServer;
Автор: reddestfox
Дата сообщения: 19.07.2006 22:12
Сабж: MSAccess2003SP2.rus.
ОС: MSWinXPProSP2+.rus.
В существующей БД, где готова структура (3 НФ: несколько связанных таблиц) почему-то в формах (и старых и новых) при создании (или копировании) кнопки создаётся кнопка старого образца (NT,2k) -- такая плоская и неизменяющаяся, когда на неё наводишь курсор.
В других или новых БД кнопки в стиле ХР -- красивые, объёмные, подсвечивающиеся при наведении курсора.
В чём дело -- не пойму никак. Сравнивал и свойства кнопок и форм -- всё одинаково.
Вообще, не нашёл ничего похожего на old style button и new style button.
Похоже на глюк.
Как его избежать?
Уж больно не хочется создавать проект на таких убогих кнопках.
Автор: dneprcomp
Дата сообщения: 20.07.2006 00:48
reddestfox
http://forum.ru-board.com/topic.cgi?forum=33&topic=7120#2
Автор: reddestfox
Дата сообщения: 20.07.2006 19:37
Нашёл!

Проблема:
В существующей БД, где готова структура (3 НФ: несколько связанных таблиц) почему-то в формах (и старых и новых) при создании (или копировании) кнопки создаётся кнопка старого образца (NT,2k) -- такая плоская и неподсвечивающаяся, когда на неё наводишь курсор.

Решение:
Открываем проблемную БД, строка меню: Сервис -- Параметры -- Формы и отчёты -- ставим галку напротив "Элементы управления из тем Windows в формах".

Автор: unfreqient
Дата сообщения: 24.07.2006 13:16
Kaylang
Да здесь не запрос надо оптимизировать...
В общем, то это тоже способ, и если всё работает, то можно обойтись без реорганизации структуры БД. Нужно видеть все составляющие и цель.
Автор: Kaylang
Дата сообщения: 24.07.2006 14:29
unfreqient

Цитата:
Да здесь не запрос надо оптимизировать...

Я бы мог показать все составляющие, боюсь ты по-итальянски можешь не понять.
Проблема этого запроса в том, что после 50 записей в Interventi, программа начинает заметно тормозить. Ну и чем дальше, тем хуже. Доходит до того, что на отработку одного запроса уходит 5 мин и более...
Имхо, там проблема не только в этом запросе, но с чего-то надо начинать...
Автор: unfreqient
Дата сообщения: 24.07.2006 15:39
А Attivita, Scadenza на сколько строк и где они размещены (не в сети?), если 5 минут запрос выполняется, какой ПК? Если на 500,000 строк таблички, ещё размещённые на сетевом ресурсе, то для P-III может и 5 минут выполняться, теоретически. А начать можно стого, что, например, вместо Forms!ListaServer!tidServer поставить значение, потом исключить какую-нибудб табличку из запроса и т.д. Пока не станет понятно, что наиболее тяжело идёт. Далее можно переделать запрос: например, создание промежуточных таблиц и запроса с их участием.
Автор: Kaylang
Дата сообщения: 24.07.2006 15:57
unfreqient

Цитата:
А Attivita, Scadenza на сколько строк и где они размещены (не в сети?),

Эти вообще на 5-20 строк... Файл .mdb с таблицами и программой размещен в сети, но при переносе на локал ничего не меняется. Компы PIV с достаточной памятью. Правда меня всегда убивает то, как Access жрет до 100% процессорного времени.

Цитата:
вместо Forms!ListaServer!tidServer

Ну это не проблема. На самом деле Forms!ListaServer!tidServer это номер сервера.

Цитата:
потом исключить какую-нибудб табличку из запроса и т.д.

Я тут еще нашел несколько запросов, которые добавляются к вышеуказанному запросу в процессе выполнения. Они входят в QueryUnion...
Автор: unfreqient
Дата сообщения: 24.07.2006 16:10
В общем нужно сузить проблему - упрощать запросы, исключением таблиц.
Все базы сжать обязательно.
Автор: Almaz
Дата сообщения: 24.07.2006 16:17
Kaylang
запрос какой-то подозрительный
таблица Interventi не подцеплена через JOIN ON
в результате к выбранным Attivita.Nome, Scadenza.Nome цепляются все значения Interventi.IDIntervento
Автор: unfreqient
Дата сообщения: 24.07.2006 16:51

Цитата:
к выбранным Attivita.Nome, Scadenza.Nome цепляются все значения Interventi.IDIntervento

ну такое может быть, почему бы и нет, хотя можно и уточнить так ли
Автор: Almaz
Дата сообщения: 24.07.2006 17:04
unfreqient

Цитата:
такое может быть
в педагогических целях, типа так делать не надо
Автор: Kaylang
Дата сообщения: 24.07.2006 17:08
Almaz

Цитата:
запрос какой-то подозрительный
таблица Interventi не подцеплена через JOIN ON

Самое интересное, что именно она должна обрабатываться.
Попробую вкратце объяснить задачу, которую должна была решить данная программа.
Есть сервера, на них выполняются кое-какие работы. Периодичность работ может быть разная: ежедневно, раз в неделю, раз в месяц и т.д.
В таблице Interventi записи о проделанных работах.
Вышеуказанный запрос должен просто выводить те работы, которые еще не были выполнены согласно периодичности.
Автор: Almaz
Дата сообщения: 24.07.2006 18:10
Kaylang
есть шанс, что ситуацию может прояснить структура QueryUnion
поищи что-нить типа CREATE TABLE QueryUnion или CREATE VIEW QueryUnion
если там объявлено поле IDIntervento, то можно попытаться заменить в твоем кусочке кода Interventi.IDIntervento на QueryUnion.IDIntervento, тогда хоть какой-то смысл во всем этом появится
Автор: stoun
Дата сообщения: 25.07.2006 11:13
Доброе время суток. Я недавно начал изучать access, помогите написать такую базу данных:
Разработать информационную систему (ИС) для кафедры универа, выпускающей студентов в кол-ве одной группы в годы. ИС должна содержать сведения:
- Курс,
- Ф. И. О. старосты,
- Ф. И. О. всех студентов,
- предметы, изучаемы в данном учебном году (предмет может изучаться несколько семестров)
- ФИО, ученая степень, звание преподавателя, ведущего данный предмет.
- Отчисленные студенты и причины.
Система должна позволять получать
- Списки студентов какой-либо группы(контрактники отдельно)
- Список предметов изучаемых студентами в течении всего срока обучения в институте.
Организовать поиск:
- Номера группы, в которой учился данный студент или учился отчисленный студент,
- Преподавателя, ведущего дынный предмет.
Заранее огромное спасибо....
Автор: Kaylang
Дата сообщения: 25.07.2006 13:22
Almaz

Цитата:
есть шанс, что ситуацию может прояснить структура QueryUnion

Скорее она все еще больше запутает.

Код: SELECT *
FROM QueryGiorno
UNION
SELECT *
FROM QuerySettimanaArretrati
UNION
SELECT *
FROM QuerySettimana
UNION
SELECT *
FROM QueryMese
UNION SELECT *
FROM QueryNessunGiornale;
Автор: Almaz
Дата сообщения: 25.07.2006 15:46
Kaylang
там действительно объявлено поле IDIntervento, и можно попытаться заменить в твоем кусочке кода Interventi.IDIntervento на QueryUnion.IDIntervento, тогда хоть какой-то смысл во всем этом появится
почему бы не попробовать? вдруг получится
Автор: RobinStone
Дата сообщения: 26.07.2006 05:20
Доброго времени суток!
Не очень хорошо знаю сабж, но необходимость заставила изучать
Проблемма вот в чем:
1. Как вставить в некое произвольное поле на форме значение SQL запроса к таблице?
(не предлагайте поставить источник записей для формы - такое решение не подходит)
надо чтобы все это делалось в коде формы
2. Как выяснить (так же через VBA) существует ли запись в таблице и если нет - создать ее
3. Как потом данное поле обновлять (то есть при вводе в него данных обновлять их в таблице)

Подробнее зачем это нужно:
- Есть таблица планирования бюджета. Там поля СтатьяРасхода, Сумма, Месяц, Год
- Надо вывести на форме список статей и суммы по ним за определенный месяц/год (который устанавливается в заголовке формы в лист-боксе)
Автор: unfreqient
Дата сообщения: 26.07.2006 08:27
1. Set rs = CurrentDb.OpenRecordset("SELECT ...")
n=rs.Fields(0) - ноль это номер поля которое берём из "запроса"
DoCmd.RunSQL "... - встявляем куда надо значение n
2. создать селект на выборку с этим полем и подсчитать количество строк, если ноль, то нету его в таблице
Set rs = CurrentDb.OpenRecordset("SELECT ...")
If rs.RecordCount > 0 Then
3. Зарустить запрос на обновление: DoCmd.RunSQL "UPDATE ... SET..."
Автор: RobinStone
Дата сообщения: 26.07.2006 08:34
Спасибо
Пробывал так делать еще до того, как задать вопрос, но оказалось что у меня не загружена библиотека DAO, а с ADO он почему-то не хочет работать Может тоже чего не подключено

А можно еще один вопрос?
Как из скрипта создать на форме надпись и поле
задать им цвет, границу и разместить в определенном месте

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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