|
Тема
|
Въпрос-zадачка zа report в Access
|
|
Автор | нoвaчka (Нерегистриран) |
Публикувано | 17.08.05 13:20 |
|
Мисля, че в тоzи клуб има доста хора с опит и се надявам някой да може да ми помогне. Ситуацията е следната:
Имам баzа данни с няколко таблици. Едната от тях съдържа процеси. Всеки от тях има номер, който е съставен така: А-bbb-ccc-ddd, статус и дата. "А" е буква и може да бъде "А", "I" или "S". "bbb", "ccc" и "ddd" са трицифрени числа. Трябва да направя report, който да групира процесите спрямо раzличните стойности на "bbb" и zа всяка група да брои:
- колко процеси zапочват с всяка от буквите "А", "I" или "S".
- колко от теzи, които zапочват с "I", са със статус "ф".
- датата на колко от теzи, които zапочват с "I" и са със статус "ф", е от преди повече от 6 месеца.
Накрая на report-а трябва да се сумират гореиzброените стойности zа всички процеси в таблицата, неzависимо от "bbb".
Стана малко дълго, надявам се да съм успяла да го обясня добре.
Някой има ли идеи как да го осъществя това гореописаното? Нямам почти никакъв опит с баzи данни. Първо query ли да направя?
| |
Тема
|
Re: Въпрос-zадачка zа report в Access
[re: нoвaчka]
|
|
Автор |
wqw (непознат
) |
Публикувано | 17.08.05 15:46 |
|
Първо направи query което "разцепва" номера на съставните му части. Използвай функция Mid така някак:
SELECT Mid(Nomer, 1, 1) AS Type
, Mid(Nomer, 3, 3) AS bbb
, Mid(Nomer, 7, 3) AS ccc
, Mid(Nomer, 11, 3) AS ddd
, Status
, Date
FROM FactsTable
После базираш финалните query-та на това query, "лепиш" report-а и си gold :-))
cheers,
</wqw>
| |
Тема
|
Re: Въпрос-zадачка zа report в Access
[re: wqw]
|
|
Автор | нoвaчka (Нерегистриран) |
Публикувано | 17.08.05 17:17 |
|
Благодаря, че ми се притече на помощ. Наистина съм много боса в теzи неща. Значи мога да програмирам в Access директно на SQL?
Опитах твоя начин, но като иzполzвам "Mid(Nomer, 3, 3) AS bbb" zа номер I-123-456 например, реzултатът е 356!!! Имаш ли идея zащо става така и как да го оправя? Къде мога да намеря описание на функциите с подробности zа параметрите?
| |
Тема
|
Re: Въпрос-zадачка zа report в Access
[re: wqw]
|
|
Автор | нoвaчka (Нерегистриран) |
Публикувано | 17.08.05 17:24 |
|
А, сетих се още нещо- нужно ли е да правя няколко query-та, не мога ли на баzата на първото да правя пресмятанията директно в report-а? Вzела съм си една книга zа Access, но там не пише почти нищо...
Нещата, които ще фигурират в report-а, са вложени, т.е. всяко следващо zависи от предишните. Има ли някакви конструкции или трикове, които се иzполzват в подобни случаи?
Sorry zа многото въпроси. Дано ми отговориш
| |
Тема
|
Re: Въпрос-zадачка zа report в Access
[re: нoвaчka]
|
|
Автор | нoвaчka (Нерегистриран) |
Публикувано | 17.08.05 17:45 |
|
Открих zащо става така. Типът на полето "номер" е дефиниран като стринг, но има добавена следната маска zа въвеждане: >A"-2"00"-3"00"-4"00;;_. Няма ли по-елегантен начин да се ограничи форматът на стринговете в това поле?
| |
Тема
|
Re: Въпрос-zадачка zа report в Access
[re: нoвaчka]
|
|
Автор |
wqw (непознат
) |
Публикувано | 18.08.05 14:16 |
|
Function Mid(String, Start As Long, [Length])
Member of VBA.Strings
Returns specified number of characters from a string
Опитай се да прецизираш начало и размер на подстринговете. Примерно Mid(Nomer, 2, 3) etc.
cheers,
</wqw>
| |
Тема
|
Re: Въпрос-zадачка zа report в Access
[re: нoвaчka]
|
|
Автор |
wqw (непознат
) |
Публикувано | 18.08.05 14:28 |
|
Най-бавен е физическият достъп до данните на HDD. Затова най-добре да направиш сметките на single table scan така например:
SELECT SUM(IIF(Type = "A", 1, 0)) AS CountTypeA
, SUM(IIF(Type = "I", 1, 0)) AS CountTypeI
, SUM(IIF(Type = "S", 1, 0)) AS CountTypeS
, SUM(IIF(Type = "S" AND Status = "ф", 1, 0)) AS CountTypeSStatusF
, SUM(IIF(Type = "S" AND Status = "ф"
AND [Date] < DateAdd("m", -6, Date()), 1, 0)) AS CountTypeSStatusFBefore6Months
FROM qTableSplitNomer;
(not tested)
Погледни в Object Browser-а функциите DateAdd и Date:
Function DateAdd(Interval As String, Number As Double, Date)
Member of VBA.DateTime
Returns a Variant containing a date to which a specified time interval has been added
Property Date As Variant
Member of VBA.DateTime
Sets or returns the current system date
cheers,
</wqw>
| |
Тема
|
Re: Въпрос-zадачка zа report в Access
[re: нoвaчka]
|
|
Автор | Dani (Нерегистриран) |
Публикувано | 15.04.06 18:02 |
|
По принцин не е добре едно поле да е съставно щото трудно се правят заявки когато трубва да се извличат данни. Този случай е типичен пример за съставно поле.
Другия момент е че полетата по които се търси, тези с WHERE трябва да са индексирани.
От подобни неправилно проектирани неща и отчетите не вървят и скороста страда.
| |
|
|
|
|