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

» Access VBA

Автор: evruka
Дата сообщения: 05.07.2007 10:52
Здравствуйте.
Подскажите структуру и связи для базы данных.
Нужно создать базу данных учета актов выполненных работ:
например:
месяц исполнения, кто выполнил, сумма зарплаты, сума материалов, общая сума.
Но еще нужно(и я не знаю как это сделать), чтобы сумма материалов сумировалась с данных по материалах: названия материала, единица измерения, количестао, цена, стоимость вида материала.
Буду признателен за любую помощь, советы, примеры
Автор: Sk1f
Дата сообщения: 05.07.2007 14:04
evruka, какие таблицы будут использоваться в БД? Какие поля?

Таблица материалов? Кто выполнил(компания или человек)? ....и тд

Автор: evruka
Дата сообщения: 05.07.2007 14:40
Таблица учета актов:
месяц исполнения, организация исполнитель, сумма ЗП, сумма материалов, общая сумма
Таблица материалов:
Наименование, единица измерения, количество, цена, стоимость
Автор: MrZeRo
Дата сообщения: 06.07.2007 08:25
evruka
Вообще-то, от задачи зависит, какие выборки потом надо будет получать
Навскидку, тут нужны по крайней мере:
Таблица исполнителей
Таблица зарплат по исполнителям (дата-завивимая, зарплата же может меняться)
Таблица материалов
Таблица стоимостей материалов (дата-зависимая, материал может переоцениваться)
Таблица актов: дата, ссылка на исполнителя, ....
Таблица использованных материалов, привязанная к актам: ссылка на акт, ссылка на материал, количество материала, ....

В принципе, таблицу исполнителей, таблицу зарплат, таблицу материалов и таблицу стоимостей материалов можно объединить, сделав деревянную структуру ... Но это так, на перспективу.
Автор: zorin2009
Дата сообщения: 07.07.2007 22:06
Здраствуйте! Кто нибудь может подсказать. Где можно найдти готовую БД Отдела кадров в Access. Очень нужно курсовая горить скоро сесия.
Автор: Anton T
Дата сообщения: 16.07.2007 07:58
Сделал простенкий код экспорт из Excel в Access:

Код:Sub expaccess()
Selection.Copy
Dim dbs As Database
Dim aaa As TableDef
Dim rst As Recordset
Set dbs = OpenDatabase("C:\access-excel\db1.mdb")
Set aaa = dbs.CreateTableDef("А")
With aaa
.Fields.Append .CreateField("F", dbText)
.Fields.Append .CreateField("N", dbText)
.Fields.Append .CreateField("O", dbText)
.Fields.Append .CreateField("G", dbText)
.Fields.Append .CreateField("A", dbText)
.Fields.Append .CreateField("D", dbText)
.Fields.Append .CreateField("K", dbText)
.Fields.Append .CreateField("K1", dbText)
.Fields.Append .CreateField("K2", dbText)
.Fields.Append .CreateField("S", dbText)
.Fields.Append .CreateField("R", dbText)
.Fields.Append .CreateField("C", dbText)
.Fields.Append .CreateField("D1", dbText)
End With
dbs.TableDefs.Append aaa
----- какой код для вставки данные
dbs.Close
End Sub

Он создает таблицу "А", но я не знаю как всавить данные в таблицу "А"?
Автор: AndVGri
Дата сообщения: 16.07.2007 08:52
Anton T

Public Sub AddRecords
Dim rec As DAO.RecordSet

Set rec = dbl.TableDefs("A").OpenRecordSet(dbOpenDynaset)
For i = beginRow To LastRow
rec.AddNew
rec.Fields("F").Value = CStr(Cells(i, fCol).Value)
rec.Fields("N").Value = CStr(Cells(i, nCol).Value)
'....
rec.Update
Next i
rec.Close
End Sub

или изучай объект Access DoCmd для открытия созданной таблицы и вставки значений в неё
Автор: ANTIBIOTIK2008
Дата сообщения: 26.07.2007 11:45
Разыскиваеся программа на access для учета долгов клиентов.

Заранее спасибо.
Автор: yuish
Дата сообщения: 26.07.2007 11:59
ANTIBIOTIK2008
имеется ввиду только база на акцесе или вся программа?
Автор: ANTIBIOTIK2008
Дата сообщения: 26.07.2007 12:17

Цитата:
yuish


Любой из вариантов устроит. Важна сетевая работа.
Автор: Gluzer
Дата сообщения: 02.08.2007 23:35
вопрос: может ли форма иметь два источника данных(таблицы)?
первая таблица - это связь с внешней БД
вторая таблица - внутренняя, содержит вспомогательные данные
эти таблицы связанны между собой через ключ ID
при выполнение запроса: SELECT INOS_MAIN.ID, INOS_MAIN.FAM, INOS_MAIN.IM, INOS_MAIN.OT, INOS_MAIN.POL, INOS_MAIN.BD_DATE, INOS_MAIN.PCOD_V, INOS_MAIN.REG_PL, INOS_MAIN.L_COUNT, INOS_MAIN.SV_DATE, INOS_MAIN.SV_SER, INOS_MAIN.SV_NUM, INOS_MAIN.OKATO, INOS_MAIN.OGRN, MAIN.PR_DATE, MAIN.FACT_PL, MAIN.DOCUM, MAIN.XRAY, MAIN.RW, MAIN.AIDS FROM INOS_MAIN INNER JOIN MAIN ON INOS_MAIN.ID = MAIN.ID; выходит пустышка...
Автор: Gluzer
Дата сообщения: 03.08.2007 21:05
вопрос снят, решается следующим образом:
FROM INOS_MAIN LEFT JOIN MAIN ON INOS_MAIN.ID = MAIN.ID
Автор: xpr123
Дата сообщения: 07.08.2007 08:13
Добрый день. Прошу совета. Есть задача импорта текстовых данных из интернета такого формата
http://www.betexplorer.com/basketball/spain/spanish-basketball-league-men-2006-2007/results/
в базу данных и дальнейшая их обработка, в идеале реализовать пару таблиц как здесь
http://www.betexplorer.com/basketball/spain/spanish-basketball-league-men-2006-2007/
и подбить небольшую статистику:
http://www.betexplorer.com/basketball/spain/spanish-basketball-league-men-2006-2007/stats/
Ну и если интерфейс вменяемый к этому делу прикрутить, то вообще сказка.
Можно элементарно копировать всё с сайта в Excel, но такой вариант не устраивает, т.к. в дальнейшем придется проделывать тоже самое с другими разделами.
С Access'ом никогда не работал, может ли он решить такую задачу? С чего начать? Какой Access выбрать 2003 или 2007? Я так понимаю придется программить на макросах VB? Посоветуйте литературу на данную тематику (импорт данных из интернета в базы данных Access).
В студентческие времена программил отчетные формы на VisualFoxPro и прослушал курс теории БД,
так что базовые понятия есть.
Автор: KIP4
Дата сообщения: 07.08.2007 21:53
У меня в базе есть запрос, из которого берутся данные для формирования отчета.
Условием формирования является форма, в котором пользователь вводит 2 даты, и по этому диапазону выводится отчет.
Мне необходимо, чтобы в отчете эти две даты тоже оттображались(в верхнем колонтитуле). Для этого я создал поле в этом колонтитуле,
в нем написал такую формулу:
=[Forms]![SubForm]![Field1]&"-"&[Forms]![SubForm]![Field2]
Но при предварительном просмотре значения дат она выводит только на первой странице, дальше она пишет #Ошибка.
Я пробовал и создавать пполе в области данных с этой формулой, а потом брать данные из этого поля, и переносить поле из колонтитула в другое месо = нулевой результат.
Причем в области данных эти даты появляются тоже только на первой странице. дальше поле просто исчезает. При этом стандартные функции
=Date() орректно работают в колонтитулах.
Подскажите пожалуйста, в чем может быть ошибка.
Заранее спасибо!
Автор: jONES1979
Дата сообщения: 08.08.2007 08:01
KIP4
1. сделай две глобальные переменные типа дата, опиши две (тоже глобальные) функции которые будут возвращать их значение. ( "Глобальные" - значит в общедоступном модуле, с директивами Public или Global)

2. по кнопке формирования отчета, ДО вызова OpenReport, присвой переменным значения [Forms]![SubForm]![Field1] и [Forms]![SubForm]![Field2] соответсвенно.

3. в отчете используй Эти Функции ВМЕСТО "=[Forms]![SubForm]![Field1]&"-
"&[Forms]![SubForm]![Field2]"

PS
4. наверняка и в запросе отчета ты используешь для условий такие же конструкции "=[Forms]![SubForm]![Field1]" Их тоже замени на вызов функций.

использование конструкций типа "=[Forms]![SubForm]![Field1]" очень сказывается на быстродействии, в запросах особенно.
а второй плюс - ты сможешь отлаживать и запрос, и отчет, не имея загруженной в память формы.
Автор: KIP4
Дата сообщения: 08.08.2007 14:15
jONES1979
Спасибо за ответ, но я в Access(а тут как я понимаю все в VBA) чайник поэтому не все понял.
1.Значит в модуле должно быть 4 строки
Public dt1[любое название переменной] as [тут по видимому надо писать тип]
Public dt2[любое название переменной] as [тут по видимому надо писать тип]
Public Function date1() as ??
Public Function date2() as ??

2.stDocName = "Report"
DoCmd.OpenReport stDocName, acPreview
между этими строками надо писать dt1=[Forms]![SubForm]![Field1] и
dt2=[Forms]![SubForm]![Field1]

3. в поле где надо выводить дату в отчете надо писать =dt1&"-"&dt2

4. в запросе в SQL вместо
WHERE (((alltable.date_publish) Between [Forms]![SubForm]![Field1] And [Forms]![SubForm]![Field2]));
заменить на
WHERE (((alltable.date_publish) Between dt1 And dt2));


Автор: Anton T
Дата сообщения: 09.08.2007 21:18
AndVGri
А поподробнее можно?
Автор: jONES1979
Дата сообщения: 10.08.2007 05:38
1.Значит в модуле должно быть:
Public dt1[любое название переменной] As Date
Public dt2[любое название переменной] As Date

Public Function date1() As Date
date1 = dt1
end function

Public Function date2() As Date
date2 = dt2
end function

2.
stDocName = "Report"
dt1=[Forms]![SubForm]![Field1]
dt2=[Forms]![SubForm]![Field2]
DoCmd.OpenReport stDocName, acPreview

3. в поле где надо выводить дату в отчете надо писать
=date1() & "-" & date2()
или
=FormatDateTime(date1(),vbShortDate) & "-" & FormatDateTime(date2(),vbShortDate)


4. в запросе в SQL вместо
WHERE (((alltable.date_publish) Between [Forms]![SubForm]![Field1] And [Forms]![SubForm]![Field2]));

заменить на

WHERE ( (alltable.date_publish) Between date1() And date2() );


Автор: KIP4
Дата сообщения: 10.08.2007 13:20
jONES1979
Все сделал, как написано, выводит 0:00:00 -0:00:00 на всех страницах.
Может быть проблема в том, что модуль не включен в проект? Потому что в примерной базе Борей модули видны в дереве объектов Access, а у меня нет
Автор: jONES1979
Дата сообщения: 14.08.2007 11:28
KIP4 И переменные, и функции надо сделать в одном глобальном модуле, видимом из любой формы или запроса. Если сделать именно так, то эти функции будут доступны из постоителя выражений.
...а ты наверное сделал в модуле формы?
Автор: skinash
Дата сообщения: 20.08.2007 08:35
Уважаемые! Нужна ваша помощь!
В Access имеется таблица:
ID, M1, Shot1, M2, Shot2, M3, Shot2, Remain

Можно ли чтобы поле Remain автоматом вычислялось при любом изменении в полях M1, M2, M3, Shot1, Shot2, Shot3 или при добавлении новой записи:
Если ID=1, то Remain = 501 - (M1 * Shot1 + M2 * Shot2 + M3 * Shot3)
иначе Remain = (Remain where ID=ID-1) - (M1 * Shot1 + M2 * Shot2 + M3 * Shot3)
То есть, нужно что-то вроде триггера и хранимой процедуры в MS Access.
Автор: jONES1979
Дата сообщения: 10.09.2007 16:22
skinash так как в "чистом" акцессе нет хранимок и триггеров, необходимую обработку нужно делать в событиях формы ввода. Например в событии BeforeUpdate
Автор: Diamarina
Дата сообщения: 10.09.2007 21:02
Здравствуйте.
С СУБД вообще и с Access в частности столкнулась недавно, а потому в процессе судорожных попыток создания базы возник ряд довольно общих вопросов.

Каким образом в Аксесс распределяются сферы влияния таких способов управления-создания-визуализации-упорядочивания-т.п.-т.д. данны(ми)х как запросы SQL, выражения (кажется, так это называется... выглядит наподобие этого [...]![...]), функции ну и всякое еще разное добро, что предоставляет Аксесс для работы с данными? Где для вышепомянутых задач можно использовать только что-то одно, а где способы взаимозаменяемы? Плюсы, минусы, трудности... Понимаю, что вопрос объемистый, но если невозможно дать ответ в форуме, то дайте, пожалуйста, ссылку на источники, где я могла бы почерпнуть подобную информацию.
Поясню, зачем мне это надо знать. Так получилось, что знакомство с СУБД я начала со стороны изучения SQL. Мне он понравился, и пределом моих мечтаний была бы стряпня базы именно с использованием его. Однако, не тут то было... Когда окунулась в Аксесс, оказалось, что SQLю там как раз не сильно-то и много места дают, а в основном используются интерфейсные методы, всякие там жуткие мастера и проч., либо вышеупомянутые выражения, а еще VB (об этом звере я вообще узнала только вот как нос к носу столкнулась, и как и с чем его едят - я просто не знаю. на вид страшноват. куда как страшнее SQL...). А точнее, вроде как на первый взгляд, его мало используют, однако, если покопаться, то выясняется, что им можно заменить очень многое... Ну, думаю, приблизительно моя дилемма понятна.
Буду очень благодарна за наведение хотя бы частичного порядка в моей голове. =)
Автор: dneprcomp
Дата сообщения: 10.09.2007 21:40
Diamarina
Лучший источник информации - help. Книги нужно спросить в
Компьютерные (IT) книги на АНГЛИЙСКОМ
Компьютерные (IT) книги на РУССКОМ языке
Отвечать на такое "сочинение" действительно трудновато. Видимо, необходимо немного почитать. А затем, с более конкретными вопросами назад, на форум.

PS. [...]![...] похоже на шаблон обращения к полю. [Имя таблицы]![Имя поля]
Автор: Vitus_Bering
Дата сообщения: 11.09.2007 11:48
Где взять процедуру, чтобы ФИО в именительном падеже заменить на дательный падеж?

Добавлено:
Нашел, может кому-нибудь пригодится
httр://kozin1.narod.ru/sql/fio.html
Автор: skinash
Дата сообщения: 11.09.2007 15:05
Diamarina

Цитата:
Мне он понравился, и пределом моих мечтаний была бы стряпня базы именно с использованием его.

Вообще Access это скорее десктопная БД, т.е. для "нужд офиса", когда сервер и клиент скорее всего на одном компьютере. Хотя и на нём (на Access'е) можно намутить серьёзные вещи.
Если под "стяпнёй базы" ты понимаешь создание таблиц:

Код: CREATE TABLE ThisTable
(FirstName CHAR, LastName CHAR);
Автор: Diamarina
Дата сообщения: 11.09.2007 15:54
skinash


Цитата:
Если под "стяпнёй базы" ты понимаешь создание таблиц:


нет, по "стряпней базы" я понимаю нечто большее, чем просто create table.
это база целиком - от базовых таблиц и связей между ними до запросов и отчетов. И с самим SQL проблем как таковых вроде нет. Просто при попытках создания хотя бы части нужных таблиц и форм для просмотра, внесения новых строк и поиска я столкнулась с тем, что одним SQLем в Аксесс сыт не будешь. По крайней мере именно так это выглядит в учебных базах.
Но, собственно, немного поразмыслив, я попытаюсь сама ответить на свой вопрос. Я так поняла, что если мне нужно создать таблицы, связи между ними и дальнейшая работа с данными будет протекать именно в режиме таблиц, без всяческих красивеньких форм и отчетов, то я вполне могу обойтись одним SQL. А вот если мне понадобятся формы и т.п., то придется добавлять другие средства. Так ли это?
А по поводу "базы для нужд офиса" - то это мне как раз и нужно. Тока не в офисе, а на кафедре. =)
Автор: dneprcomp
Дата сообщения: 11.09.2007 20:16
Diamarina

Цитата:
я столкнулась с тем, что одним SQLем в Аксесс сыт не будешь
А в какой базе можно обойтись только SQL ? SQL - язык базы, а не внешнего интерфейса. Кому нужна база без возможности работы с ней юзера?
Понятно, что интерфейс может быть как внутренним, так и внешним. Но в любом случае одного SQL никак не хватит.

Цитата:
Я так поняла, что если мне нужно создать таблицы, связи между ними и дальнейшая работа с данными будет протекать именно в режиме таблиц, без всяческих красивеньких форм и отчетов, то я вполне могу обойтись одним SQL
До некоторого уровня можно вообще без SQL обойтись, используя графический интерфейс создания и модификации.

Попробую дать аналогию. Использовать только SQL для всего это все-равно, что гудеть в трубку вместо модема
Автор: Diamarina
Дата сообщения: 12.09.2007 15:58

Цитата:
Использовать только SQL для всего это все-равно, что гудеть в трубку вместо модема

=) вот это уже понятнее.
Ладно, спасибо всем откликнувшимся! бум разбираться.
Автор: Nedion
Дата сообщения: 17.09.2007 00:55
Как узнать что были нажаты кнопки перехода ?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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