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

» Access VBA

Автор: antsh85
Дата сообщения: 09.05.2005 02:40
Товарищи помогите. Я в аксесе вообще не шарю, книг в нете по нему тоже не найти, а работу сделать однако надо. Нужно создать простейшую базу данных:
Берём к примеру 2 таблицы:
в первую записываем имя ученика и его массив оценок
во вторую записываем имя ученика, его среднюю оценку и название этой оценки (плохо хорошо ...)

Помогите плз, мне необходимо это сделать чтобы получить доступ на экзамен.
Автор: dneprcomp
Дата сообщения: 09.05.2005 22:26
antsh85
Книги по Access можно спросить на форуме eBookz http://forum.ru-board.com/forum.cgi?forum=93 в темах:

Компьютерные (IT) книги на РУССКОМ языке
http://forum.ru-board.com/topic.cgi?forum=93&topic=0479&start=960#lt

Компьютерные (IT) книги на АНГЛИЙСКОМ
http://forum.ru-board.com/topic.cgi?forum=93&topic=0541&start=340#lt

VBA для "чайников" можно найти в теме
Компьютер для начинающих
http://forum.ru-board.com/topic.cgi?forum=93&topic=0563#1
Автор: antsh85
Дата сообщения: 09.05.2005 23:26
dneprcomp
большое спасибо.
Автор: YFred
Дата сообщения: 19.05.2005 09:19
Люди помогите разобраться
Цель: необходимо из запроса в Access'e выгрузить данные в Excel
Проблема: как получить доступ к данным из запроса (Запрос создавался в мастере а не из VB)
Автор: evle
Дата сообщения: 20.05.2005 11:18
YFred
В Excel'е Данные -> Импорт внешних данных.
Но тут есть грабли: если в запросе используются нестандартные функции (я подключал сумму прописью), то запрос не будет виден.
Как это решать не знаю, пока делаю временную таблицу из этого запроса и подключаю ее.
Автор: rsmike
Дата сообщения: 08.06.2005 13:14
Здравствуйте, товарищи.

Не проигнорируйте вопрос, пожалуйста.

На форме имеется поле со списком. В списке клиенты. Имеется отчет по клиентам, не суть важно какой.

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

Как?
Автор: dneprcomp
Дата сообщения: 08.06.2005 22:04
rsmike
Не пробовал ли использовать parameter query?
См. в хелпе 'Create a parameter query that gets criteria from a custom dialog box'

Цитата:
In its Criteria cell, enter the expression that tells Microsoft Access to refer to the
твой клиент
Цитата:
control in the dialog box for the criteria values the query uses. In this case, you'd enter the expression
Forms![имя контрола]![выбранный клиент].
Автор: rsmike
Дата сообщения: 09.06.2005 12:15
dneprcomp

Спасибо за ответ, попробую объяснить чуток подробнее.

Если в параметрах запроса подставить "Forms![имя формы]![выбранный клиент]", появится следующий эффект: при выборе одного значения все, разумеется, работает как должно, но при отсутствии выбора в поле формы остается NULL, и запрос честно ограничивает вывод nullевыми записями (то есть не выдает ничего).

Собственно вопрос и заключался - как так хитро прописать "Criteria cell", чтобы пустое условие отрабатывало как отсутствие условия вообще.
Автор: dneprcomp
Дата сообщения: 09.06.2005 21:06
rsmike
1. Составляй Select в If в зависимости от содержания контрола, а не привязывай отчет к контролу.
2.Попробуй заполнять поле контрола сам дефолтным значение. Запрети туда писать пользователю. Значение меняй только по клику.
Автор: rsmike
Дата сообщения: 10.06.2005 08:42
dneprcomp

2 вариант не совсем понял - что это даст?

А есть ли какая-то конструкция - критерий для вывода всех записей? Что-то типа Like "*"? Тогда вопрос бы сводился к IIf(is null ([value]);"*";[value]). Но Like * не работает.
Автор: dneprcomp
Дата сообщения: 10.06.2005 09:50
rsmike
Вариант 2. Допустим, заполним контрол ""(пустой строкой). Этим мы избавляемся от Null и в селекте пишем что то вроде where поле <> ""
Можно наверное упростить и писать where поле is not isnull
Like с * по моему не работает.
Цитата:
конструкция - критерий для вывода всех записей

является select tablename.* from tablename
Автор: rsmike
Дата сообщения: 10.06.2005 11:47
dneprcomp

Спасибо. Буду думать.
Автор: rsmike
Дата сообщения: 14.06.2005 08:15
Если кому интересно, вышел из положения с помощью установки в поле пустой строки как значения по умолчанию плюс следующей конструкции в поле "Условие отбора":

Like "*" & [Forms]![ФТест]![ПолеКлиент]

Кривовато, конечно, но работает, за исклучением частного случая совпадения окончания одного названия и целиком другого.
Автор: Farkhad
Дата сообщения: 16.06.2005 14:41
У меня стоит задача: за одну неделю сделать курсовую работу по MS Access.
Необходимо разработать базу данных (я решил делать склад книг в инет-магазине), с пользовательским интерфейсом (т.е. стандартное меню аксессовское заменяется моим).
Проект должен содержать ряд типовых отчетов, пару запросов, формы, поиск.

Нашел такие e-книги:

>> /McGraw.Hill.Osborne/McGraw.Hill.Osborne.Access.VBAProgramming.ISBN0072231971.chm 11.93 MB

>> /Microsoft.Press/Microsoft.Press.Programming.Microsoft.Office.Access.2003.Core.Reference.chm 3.69 MB

>> /Microsoft.Press/Microsoft.Press.Programming.Microsoft.Office.Access.2003.eBook-LiB.chm 16.80 MB

>> /Que/Que.Automating.Microsoft.Access.with.VBA.Sep.2004.ISBN0789732440.chm 6.50 MB

>> /Sams/Sams.Teach.Yourself.Microsoft.Office.Access.2003.in.24.Hours.chm

Что посоветуете взять на вооружение (назовите одну книгу)? Спрашиваю потому что времени в обрез, сессия горит!
Автор: ptaha
Дата сообщения: 16.06.2005 15:48
Лучшее подспорье в освоении аксесса - встроенный хелп. Только не забудь при установке оффиса установить так же и хелп по VBA. Только он местами на английском.

А в качестве дополнительного пособия, имха, пойдет любая из книг. Например, последняя из предложенных тобой.
Автор: SiaRain
Дата сообщения: 21.06.2005 13:38
Как в этом греб.....м Access'е написать число прописью?



PS
Срочно надо, выручайте мужики!

PPC
Билл жжот со своим Access'ом Ж)
Автор: evle
Дата сообщения: 21.06.2005 15:11
SiaRain
Я где-то находил недавно такую функцию. (В принципе реализаций полно).
[more=Поскольку длинная - спрячу в more]

Код: Option Compare Database

'''''''''''''''''''''''''''''''''''''
' Функция выводить сумму прописью '
' Вход: Сумма число '
' Выход: Сумма прописью '
'''''''''''''''''''''''''''''''''''''
Function SummaPropis(ByVal tt As Variant) As String
On Error GoTo Err_SummaPropis

Dim count As Integer, i As Integer, n As Integer, l As Integer
Dim kop As String, snum As String, s As String, e As String, t As String
Dim text As String
Static m1(8) As String
Static m2(8) As String
Static m3(8) As String
Static mm(8) As String
Static prob As String

m1(0) = "сто"
m1(1) = "двести"
m1(2) = "триста"
m1(3) = "четыреста"
m1(4) = "пятьсот"
m1(5) = "шестьсот"
m1(6) = "семьсот"
m1(7) = "восемьсот"
m1(8) = "девятьсот"
m2(0) = "десять"
m2(1) = "двадцать"
m2(2) = "тридцать"
m2(3) = "сорок"
m2(4) = "пятьдесят"
m2(5) = "шестьдесят"
m2(6) = "семьдесят"
m2(7) = "восемьдесят"
m2(8) = "девяносто"
m3(0) = "один"
m3(1) = "два"
m3(2) = "три"
m3(3) = "четыре"
m3(4) = "пять"
m3(5) = "шесть"
m3(6) = "семь"
m3(7) = "восемь"
m3(8) = "девять"
mm(0) = "одиннадцать"
mm(1) = "двенадцать"
mm(2) = "тринадцать"
mm(3) = "четырнадцать"
mm(4) = "пятнадцать"
mm(5) = "шестнадцать"
mm(6) = "семнадцать"
mm(7) = "восемнадцать"
mm(8) = "девятнадцать"
prob = " "

t = Format(tt, "000000000000.00")

i = 0
Do
i = i + 1
Loop While Mid$(t, i, 1) = "0"
i = i - 1
e = String$(i, 32)
t = Right$(t, 15 - i)
t = e & t

count = 4
kop = Right$(t, 2)
text = Left$(t, 12)
snum = ""
i = 1

Do While count > 0
s = Mid$(text, i, 1)
If s <> " " And s <> "0" Then
n = Val(s) - 1
snum = snum & m1(n)
snum = snum & prob
End If
i = i + 1
s = Mid$(text, i, 1)
If s <> " " And s <> "0" And s <> "1" Then
n = Val(s) - 1
snum = snum & m2(n) & prob
End If
i = i + 1
s = Mid$(text, i, 1)
If s <> " " And s <> "0" Then
If Mid$(text, i - 1, 1) = "1" Then
n = Val(s) - 1
snum = snum & mm(n) & prob
Else
n = Val(s) - 1
snum = snum & m3(n) & prob
End If
End If
If s = "0" And Mid$(text, i - 1, 1) = "1" Then
snum = snum & m2(0) & prob
End If
If s <> " " Then
Select Case count
Case 4:
Select Case s
Case "1":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "миллиард "
Else
GoTo mi
End If
Case "2":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "миллиарда "
Else
GoTo mi
End If
Case "3":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "миллиарда "
Else
GoTo mi
End If
Case "4":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "миллиарда "
Else
GoTo mi
End If
Case Else
mi: snum = snum & "миллиардов "
End Select
Case 3:
Select Case s
Case "1":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "миллион "
Else
GoTo ma
End If
Case "2":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "миллиона "
Else
GoTo ma
End If
Case "3":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "миллиона "
Else
GoTo ma
End If
Case "4":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "миллиона "
Else
GoTo ma
End If
Case Else
ma: If Mid$(text, i - 2, 1) = "0" And Mid$(text, i - 1, 1) = "0" And s = "0" Then
Else
snum = snum & "миллионов "
End If
End Select
Case 2:
Select Case s
Case "1":
If Mid$(text, i - 1, 1) <> "1" Then
l = Len(snum) - 3
snum = Left$(snum, l)
snum = snum & "на тысяча "
Else
GoTo ti
End If
Case "2":
If Mid$(text, i - 1, 1) <> "1" Then
l = Len(snum)
snum = Left$(snum, l - 2)
snum = snum & "е тысячи "
Else
GoTo ti
End If
Case "3":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "тысячи "
Else
GoTo ti
End If
Case "4":
If Mid$(text, i - 1, 1) <> "1" Then
snum = snum & "тысячи "
Else
GoTo ti
End If
Case Else
ti: If Mid$(text, i - 2, 1) = "0" And Mid$(text, i - 1, 1) = "0" And s = "0" Then
Else
snum = snum & "тысяч "
End If
End Select
Case 1:
End Select
End If
i = i + 1
count = count - 1
Loop

' If Mid$(text, 11, 1) <> "1" Then
' Select Case Right$(text, 1)
' Case "1":
' snum = snum & "рубль"
' Case "2":
' snum = snum & "рубля"
' Case "3":
' snum = snum & "рубля"
' Case "4":
'' snum = snum & "рубля"
' Case Else
' snum = snum & "рублей"
' End Select
' Else
' snum = snum & "рублей"
' End If

snum = snum & "руб. " & kop & " коп."
s = Left$(snum, 1)
n = Asc(s) - 32
s = Chr$(n)
l = Len(snum) - 1
snum = Right$(snum, l)

SummaPropis = s & snum

Exit_SummaPropis:
Exit Function

Err_SummaPropis:
MsgBox Err.Description, , "Функия - SummaPropis"
Resume Exit_SummaPropis

End Function
Автор: SiaRain
Дата сообщения: 21.06.2005 15:16
evle
зпасиБО!
Автор: evle
Дата сообщения: 31.07.2005 12:45
[ уже разобрался ]
Автор: evle
Дата сообщения: 13.08.2005 17:21
Есть таблица приблизительно такой структуры:
Поле 1 Поле 2 Поле 3 Способ
Автор: dneprcomp
Дата сообщения: 13.08.2005 22:04
evle
А как организовано сейчас и что значит попроще?
Автор: evle
Дата сообщения: 14.08.2005 06:53
dneprcomp
Сейчас все организовано плохо: для каждого спопоба набор дополнительных полей из которых потом выбирается через IIf. Но пока было всего 3 способа, а планируется десяток, да и бардак все равно устранять надо. Интересуют стандартные способы решения подобных задач.
Сам думаю делать VB-скриптом: в справочнике с названиями способов завести поля для каждого вычисляемого поля и писать туда формулы в текстовом виде. При подсчете брать функцией формулу, парсить ее и подставлять аргументы.
Но тут вижу три проблемы:
1. Чем парсить формулы
2. Как передавать аргументы скрипту
3. Не будет ли такая конструкция тормозить
Может что посоветуете?
Автор: Orakle
Дата сообщения: 20.10.2005 00:13
Возникла проблема в следующем:

Есть таблица "расходы", в котрой Столбец Дата и Столбцы Расходы. И отдельная таблица "Зарплата", в которой столбец Дата и Зар.плата (Я думаю что даты нужно связать способом "один-к-одному", хотя не уверен). Мне нужно чтобы в запросе выводилось: Дата и в столбце "Сумма расходов" производилась следующая операция: Складывались данные за введенную дату в таблице "Расходы" с данными за туже дату в таблице "Зарплата" (если в таблице Зарплата ничего не введено, нужно чтобы считалось как 0). Как такое провернуть?

Спасибо.
Автор: MrZeRo
Дата сообщения: 21.10.2005 16:26
Orakle
Например, таблица "расходы" ras:
fdate - дата
amt - сумма расхода (или несколько видов расхода)

Таблица "Зарплата" zp:
fdate - дата
amt - зарплата

Тогда я бы сделал так:


Цитата:

SELECT fdate, SUM(amt) as amt1
FROM
(
SELECT fdate, amt
FROM ras
UNION ALL
SELECT fdate, amt
FROM zp
) as t1
GROUP BY fdate


Но интуиция подсказывает, что у тебя неэфективный дизайн базы, на этот вывод наводит тот факт, что

Цитата:
Столбец Дата и Столбцы Расходы

То есть при добавлении нового вида расхода надо добавлять новый столбец и переписывать запросы. Тут надо как минимум 2 таблицы: виды расходов и значения расходов, связанных по полю "уникальный идентификатор вида расхода".
Но это так, к слову, информации мало, поэтому могу и ошибиться.
Автор: Shadi
Дата сообщения: 19.01.2006 07:00
Есть база на 60М на Access 2003! Фирма разрослась и сейчас с базой работает до 17 человек одновременно. Есть большие проблемы.Программист до меня был наркоман. Спер комп и скрылся. Запросы все идут "матрешкины"(сплошные вложенные). При попытке добавить в запрос что-нибуть еще сразу кричит "Не хватает памяти"!
Вопрос! С чего начать перенос на MS SQL? Может кто-то уже переносил таким образом базу. Буду очень благодарен за любые созидательные советы
Автор: SergeBS
Дата сообщения: 19.01.2006 12:24
Shadi
На delphikingdom было как раз об этом статья.
Опыт прикладного программиста в деле перевода базы данных с MS Access на SQL-Server
Автор: ShIvADeSt
Дата сообщения: 20.01.2006 01:02
Shadi
Самое трудное - это перевести запросы, так как в акцезе SQL немного извращенный, так как некоторые вещи там не реализованы. Начни с самого просто, вначале создай аналогичные базы на серваке, а потом начинай переносить запросы по одному, с самых маленьких сравнивая результаты работы в том и другом случаях. Как раз при сложных запросах уже разберешься где на что менять.
Автор: Shadi
Дата сообщения: 23.01.2006 08:40
SergeBS
ShIvADeSt

Спасибо за советы! Смотрю в сторону мастера преобразования в формат SQL Server.
Вроде MS сервак установил.. Запустил мастер.. Выдал 250 страниц протокола Вроде прошло все гладко??? Но надо еще смотреть и смотреть...
Может есть какой мастер по переводу запросов из MS Access в MS SQL или все ручками?
Автор: Arjuna
Дата сообщения: 27.01.2006 19:17
Не знаете случайно, есть ли для Delphi компонент, который бы смог заменить многостолбцовый раскывающийся список (как в Access)?

А то трудно отвыкнуть от хорошего...
Автор: Silla
Дата сообщения: 27.01.2006 20:25
Arjuna
Посмотри компоненты от ДевЭкспресс
Обсуждаются
http://forum.ru-board.com/topic.cgi?forum=33&bm=1&topic=0939&start=1640#lt
Скачать помогут здесь
http://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=28418&start=1600#lt

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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