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

» Access VBA

Автор: MaximuS G
Дата сообщения: 03.11.2008 10:57
dneprcomp
MrZeRo
Спасибо, ничего не понятно, ну да ладно ... все также как и в VBA, начинать с начала Хорошо что форум активный...
Автор: MrZeRo
Дата сообщения: 04.11.2008 16:03
MaximuS G

Цитата:
Спасибо, ничего не понятно

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

Могу еще порекомендовать посмотреть какие-нибудь простые примеры готовых баз, может, прояснится. С Access поставляется какая-то, не помню как называется.

Автор: Chichako
Дата сообщения: 06.11.2008 10:00
MaximuS G

2 столбца
1-номер - ключевое поле
2-имя

Пример:
1 Иван
2 Иван
3 Иван

И пусть в реальности это 3 разных Ивана, но базе это АБСОЛЮТНО по барабану - различить их она сможет только по самому ключевому полю. И не так для нее важно, что у этих Иванов могут быть разные фамилии, номера пасспортов и т.п. - чтобы понять - о каком точно Иване идет речь ей будет достаточно указать этот самый номер из ключевого поля.

А счетчик - чтобы не заморачиваться с присвоением уникальных номеров - он ведь может быть и не подряд и случайными числами и т.п. главное, это обеспечить, чтобы не оказалось двух одинаковых номеров в ключевом поле...
Автор: dneprcomp
Дата сообщения: 07.11.2008 00:15
Chichako MaximuS G

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

Разовьем?
Можно ведь и по фамилии, и по паспарту... И вообще без уникального номера
Но уникальный ключ должен быть создан все равно. Просто мы сделаем его составным из нескольких полей. Т.о. сочетание Имени, Фамилии почти уникально определит Ивана в базе. Почти - потому как возможны полные тезки. А почти уникально для баз данных не проходит. Значит надо добавлять третье поле в ключ.
Автор: MrZeRo
Дата сообщения: 07.11.2008 16:32
Нечего тут развивать.
В каждой таблице должно быть поле типа "счетчик" - оно же первичный ключ. И точка.
Том Кайт, например, пишет (и это совпадает с моим мнением и многолетним опытом проектирования баз данных)

Цитата:
Если составной первичный ключ не используется в качестве внешнего во многих таблицах - используйте его. В противном случае серьезно задумайтесь над использованием суррогатного ключа на базе последовательности (а про "пропуски" значений не думайте вовсе - важно, что получается уникальный идентфикатор).

Под суррогатным ключем понимается поле типа "счетчик". Полное обсуждение можно почитать:
hччp://www.ln.com.ua/~openxs/projects/oracle/ora046.html
Тот факт, что таблица, первичный ключ которой не используется в качестве внешнего ключа, - редкость, является обоснованием выдвинутого тезиса.
Автор: dneprcomp
Дата сообщения: 07.11.2008 18:47
MrZeRo
Что-то я не разобрался.
Цитата:
Если составной первичный ключ не используется в качестве внешнего во многих таблицах - используйте его.


Цитата:
В каждой таблице должно быть поле типа "счетчик" - оно же первичный ключ. И точка
Каким образом соотносятся эти два мнения? Насколько я понял приведеную цитату, человек рекомендует использовать - при наличии - составной ключ. А если его нет, то чтож, добавить суррогатный. Т.е. искуственный, не натуральный , но все же исполняющий свою функцию.


Добавлено:
Из того же источника:

Цитата:
Можно добавить еще одно поле в таблицу в качестве "первичного ключа", но это не снимает необходимости добавления ограничения уникальности по данным трем полям. Если на первичный ключ придется ссылаться во внешних ключах многих таблиц, имеет смысл использовать суррогатный ключ. Если внешних ключей немного, я бы просто использовал составной первичный ключ.


Цитата:
Я считаю, что составные ключи прекрасно работают и могут использоваться при наличии внешних ключей
Т.ч. "И точка" несколько не звучит. Как всегда, все зависит от всяческих прчих условий.
Автор: recvezitor
Дата сообщения: 13.11.2008 05:40
Собственно мне нужно экспортировать отчет в Ворд. Проблем никаких нет. Но в полученном отчете разделение на колонки генерится с помощью табов, а мне бы желательно, чтобы он помещал все в таблицы. Возможно ответ простой (и нужно чтобы он был простой), но я никак не могу найти нужную настройку.
MS Office 2003 SP2
Автор: Vitus_Bering
Дата сообщения: 13.11.2008 08:54
recvezitor

Цитата:
чтобы он помещал все в таблицы.

Нет такой возможности...
Автор: Adamastis
Дата сообщения: 17.11.2008 18:22
Здраствуйте!
Помогите мне пожалуйста, я в Аццессе не очень(точнее вообще толком ничего не знаю), мне надо создать как бы запрос которая с таблицы "СТУД" будет брать поля под именами "1", "2", "3", "4", и вычислять с них среднее арифметическое... Зарание Спасибо
Автор: real_knacker
Дата сообщения: 23.11.2008 22:47
Всем добрый день! Помогите пож-ста, ситуация такая:

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

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

Запрос на обновление

UPDATE DbInfo SET DbInfo.DbDate = Max(EmptiesMovements!MovClosingDate);

выдает ошибку

"Попытка выполнить запрос, который не включает указанное выражение 'DbDate' как часть статической функции или группы."


Еще один вопрос - как сделать так, чтобы значение поля актуальности базы данных (логическое) автоматически изменялось в зависимости от условия "нет, если дата БД < текущей даты"?

Заранее благодарен.
Автор: dneprcomp
Дата сообщения: 24.11.2008 00:08
real_knacker
Попробуй

Код: UPDATE DbInfo SET DbInfo.DbDate = SELECT Max(EmptiesMovements!MovClosingDate) FROM EmptiesMovements;
Автор: 23W
Дата сообщения: 28.11.2008 17:08
Есть ли в mdb возможность автоматического формирования содержимого поля таблицы на основаннии данных связанной дочерней таблицы. Т.е., что хотется, редактирую я данные подчиненной таблицы (через Access или напрямую программно через ADO), а соответсвующее поле главной таблицы автоматически обновляется.

Таблицы две:
- список клиентов
- список их визитов

в таблице клиента есть поле "последний визит", которое и должно автоматически обновлятся на основе max(поля визит таблицы спиок визитов).

Или нужно делать самому запрос на обновление и принудительно его запускать?
Автор: Dixi257
Дата сообщения: 29.11.2008 14:21
23W
Нужно самому изменять программно или посредством запроса. Можно процедуру навесить на событие обновление.
Автор: 0xMyk
Дата сообщения: 29.11.2008 22:43
Надо перенести немеряно таблиц с access на ms sql server и синхринизировать их в дальнейшем.
Вопрос: есть уже где-н. готовый скрипт (желательно на питоне), который бы формировал нормальный "Create Table" sql запрос для sql server? Я нашел готовый jet2sql, но его еще надо доводить до ума, а времени у меня не густо. Спасибо
Автор: agro
Дата сообщения: 30.11.2008 23:12
всем доброго дня!
помогите разобраться
есть:
1. tblPrice
поля: id_tblPrice, p1, p2, p3, p4, PriceName, Price

tblSetNames
поля: id_tblPriceSets, SetName

tblPrice&SetNames
поля id_tblPriceSetsName, id_tblPrice, id_tblSetsNames

Форма1
в ней: поле со списком- для поля tblSetNames.SetName
список для tblPrice.PriceName (с multiSect=simple [или как там оно зовётся])
textBox для - суммирования того что выбрано в списке (отображает в реальном времени сумму tblPrice.Price, для выбранного в списке)
в списке на afterUpdate навешано вот это
Private Sub Список7_AfterUpdate()
Dim rst As ADODB.Recordset

Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection

Dim objListBox As ListBox
Dim varSelectedItem As Variant
Set objListBox = Forms.форма1.Список7

For Each varSelectedItem In objListBox.ItemsSelected
cmd.CommandText = "SELECT Price FROM tblPrice WHERE PriceName =" & objListBox.ItemData(varSelectedItem)
Set rst = cmd.Execute
Forms.форма1.Поле5.Value = Forms.форма1.Поле5.Value + rst.GetString

Next varSelectedItem
End Sub

в результате имею ошибку
"runtime error
ошибка синтаксиса (пропущен оператор) в выражении запроса
'priceName= значение выбранного пункта в списке'

при нажатии на дебуг желтым метит строку:
Set rst = cmd.Execute


P.S.
суть такая у меня здоровенный прайс на стом услуги более 500 пунктов(прайс сформирован мин.здравом и обсуждению не подлежит)
для упрощения расчётов необходимо иметь стандартные наборы ценовых пунктов с короткими и понятными названиями для врачей регистраторов и пациентов
приведенная форма это только начало работы, в ней должны формироваться эти самые наборы пунктоп из прайса
Автор: EZH
Дата сообщения: 30.11.2008 23:49
agro
А где у тебя кавычки вокруг текстового значения имени прайса?
Автор: agro
Дата сообщения: 01.12.2008 00:36
эээээ
ткните пожалста пальцем
я в вба недавно и всё это по хелпам и примерам из книг ваял
для меня и это тяжело
Автор: EZH
Дата сообщения: 01.12.2008 07:57
agro
Я конечно тоже не эксперт в вба, но текстовые значания, которым у тебя вроде бы является objListBox.ItemData(varSelectedItem), которое ты сравниваешь с PriceName в SQL запросах обрамляют в одинарные кавычки. Т.е. должно быть что то типа

" ... WHERE PriceName = '" & objListBox.ItemData(varSelectedItem) & "'"
Автор: 23W
Дата сообщения: 01.12.2008 09:36
Dixi257
спасибо.
Автор: agro
Дата сообщения: 01.12.2008 19:59
EZH


Цитата:
agro
Я конечно тоже не эксперт в вба, но текстовые значания, которым у тебя вроде бы является objListBox.ItemData(varSelectedItem), которое ты сравниваешь с PriceName в SQL запросах обрамляют в одинарные кавычки. Т.е. должно быть что то типа

" ... WHERE PriceName = '" & objListBox.ItemData(varSelectedItem) & "'"


вот какие варианты
1. cmd.CommandText = "SELECT Price FROM tblPrice WHERE PriceName =" & "objListBox.ItemData(varSelectedItem)"
ошибка: неопределённая функция в выражении 'objListBox.ItemData'

2. как в вашем варианте
cmd.CommandText = "SELECT Price FROM tblPrice WHERE PriceName = " ' & objListBox.ItemData(varSelectedItem)"'" часть текста стала коментарием
ошибка таже

3. cmd.CommandText = "SELECT Price FROM tblPrice WHERE PriceName =" & 'objListBox.ItemData(varSelectedItem)'

Compile error
syntax error
Автор: EZH
Дата сообщения: 01.12.2008 21:08
agro
Ты точно все набрал?
...WHERE PriceName = '" <- здесь сначала одинарная, потом двойная кавычка.
... & objListBox.ItemData(varSelectedItem) & "';" <- здесь двойная, одинарная, точка с запятой, потом двойная.
Автор: agro
Дата сообщения: 01.12.2008 22:29
EZH
ага я фишку просёк с одиночными и двойными
в этом случае пишет так

runtime error - цифирьки всякие

ошибка синтаксиса (пропущен оператор) в выражении запроса
'PriceName ='.

именно так и пишет

а в коде появляется коментарий после ' одиночной кавычки

Автор: dneprcomp
Дата сообщения: 01.12.2008 23:21
agro
Попобуй

Код: cmd.CommandText = "SELECT Price FROM tblPrice WHERE PriceName =" & objListBox.List(varSelectedItem)
Автор: Anton T
Дата сообщения: 02.12.2008 19:55
Нажимаю дважды на листбокс выкидывает ошибку:




Код: Private Sub Список12_DblClick(Cancel As Integer)
Dim TxtSQL As String ' Строка запроса
' Номер выбранного города
SelectG = ПолеСоСписком8.Value
' Номер выбранной улицы
SelectS = Поле1.Value
' Номер выбранного дома
SelectD = Поле3.Value
' Номер выбранной квартиры
SelectK = Поле5.Value
' Строка запроса
TxtSQL = "SELECT * FROM Лист1 WHERE Лист1.Город like " & SelectG & " AND Лист1.Адрес like " & SelectS & " AND Лист1.Дом like " & SelectD & " AND Лист1.Кв like " & SelectK & ""
' Источник данных запросы теперь этот запрос
Me.RecordSource = TxtSQL
'DoCmd.OpenQuery TxtSQL, acViewNormal
End Sub
Автор: dneprcomp
Дата сообщения: 02.12.2008 20:42
Anton T
Попробуй
TxtSQL = "SELECT * FROM Лист1 WHERE Лист1.Город like '" & SelectG & "' AND Лист1.Адрес like '" & SelectS & "' AND Лист1.Дом like "' & SelectD & "' AND Лист1.Кв like "' & SelectK & "'"
Автор: Anton T
Дата сообщения: 02.12.2008 20:53
dneprcomp
Работает, но не могу открыт запрос на выборку

Добавлено:
Убираю Me.RecordSource = TxtSQL, ставлю DoCmd.OpenQuery TxtSQL, acViewNormal пишет:
Автор: dneprcomp
Дата сообщения: 02.12.2008 22:37
Anton T
SELECT Statement в TxtSQL, не является именем QUERY.
Docmd.RunSQL TxtSQL, acViewNormal
http://www.blueclaw-db.com/docmd_openquery_example.htm
Автор: sadasaf
Дата сообщения: 03.12.2008 03:05
Подскажите структуру и связи для базы данных.
Нужно создать базу данных учета актов выполненных работ
Автор: Anton T
Дата сообщения: 03.12.2008 08:48
dneprcomp

Цитата:
Docmd.RunSQL TxtSQL, acViewNormal


Вот:


Если что, могу выложить пример, вот h**p://rapidshare.com/files/169748841/db2.rar.html
Автор: dneprcomp
Дата сообщения: 03.12.2008 22:21
Anton T
С твоей формой не разбирался. Она у меня просто не открывает код, т.к. все русские названия и обращения читаются кракозябрами. Кстати, проблема может быть и в этом.
Смотри работу Form1 и Query1
http://rapidshare.com/files/169951379/db2_2000format.rar.html

PS. Пожалуй, замени в sub RunRequest каждый IF вида:

Код: If lst1.Text = "" Then
lst1.Text = "*"
End If

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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