|
|
|
| есть таблы
Описание, Сумма, Дата, Вид (логический)
нужно создать перекрестный запрос чтобы выводило
Дата (Вид=True) Дата (Вид=False)
Описание, Сумма Сумма
|
изгольнулся написал так
SELECT Dog_Oper.Opisanie, Sum(Dog_Oper.Summa) AS [Sum-Summa], Format([Data],"mmmm/yyyy") & [vid] AS Выражение1
FROM Dog_Oper
GROUP BY Dog_Oper.Opisanie, Format([Data],"mmmm/yyyy") & [vid];
|
на основании его создал перекрестный
но фигня получаетя в том что даты не располагаются как им положено
получается таким образом
Март 2010(true) Март 2010(Fasle) дальше нужен Апрель 2010(true) и т.д. а он тулит Март 2011(true) Март 2011(Fasle)
т.е. он правильно обрабатывает сортировку по текстовому полю - но как заставить его видеть одновременно и дату (для сортировки) и дата+логика (для создания 2-х колонок из одной)
или я не туда поперся | |
|
| |
|
|
|
| изгольнулся - воткнул таким образом на основании таблы - все гут,
TRANSFORM Sum(Dog_Oper.Summa) AS [Sum-Summa]
SELECT Dog_Oper.Opisanie, Dog_Oper.Nom, Sum(Dog_Oper.Summa) AS [Итоговое значение Summa]
FROM Dog_Oper
GROUP BY Dog_Oper.Opisanie, Dog_Oper.Nom
PIVOT Format([Data],"yyyy/mm") & [vid];
|
но заголовки колонок показывает 2010_11-1 2010_110 и т.д.
как можно в Имена столбцов засунуть Format([Data],"mmmm/yyyy") & [Vid] - в место Format([Data],"yyyy/mm") & [vid]? для отображения "Ноябрь 2010 Поставка", "Ноябрь 2010 Оплата" и т.д.
п.с. можно конечно оставить и так 2010_11 Поставка, 2010_11 Оплата - но чует седце ткнут пальцем и скажут напиши месяц буковками | |
|
| |
|
|
|
| блин - не понос так золотуха
объясните почему запрос перекрестный - работает, а как только в его источник воткну условия со ссылкой на форму - нет
Источник - работает прекрасно
SELECT Dog_Oper.Opisanie, Dog_Oper.Nom, Sum(Dog_Oper.Summa) AS [Sum-Summa], Dog_Oper.Data, Dog_Oper.Vid
FROM Dog_Oper
GROUP BY Dog_Oper.Opisanie, Dog_Oper.Nom, Dog_Oper.Data, Dog_Oper.Vid
HAVING (((Dog_Oper.Nom)=[Forms]![Форма4]![Kod_dog]));
еслина основани его сделать перекрестный
TRANSFORM Sum(Dog_oper_GR.[Sum-Summa]) AS [Sum-Sum-Summa]
SELECT Dog_oper_GR.Opisanie, Dog_oper_GR.Nom, Sum(Dog_oper_GR.[Sum-Summa]) AS [Итоговое значение Sum-Summa]
FROM Dog_oper_GR
GROUP BY Dog_oper_GR.Opisanie, Dog_oper_GR.Nom
PIVOT Format([Data],"yyyy/mm") & IIf([vid],"Оплата","Поставка");
не работает кричит [Forms]![Форма4]![Kod_dog] - не распознается ядром баз данных как допустимое имя поля или выражение
если HAVING (((Dog_Oper.Nom)=[Forms]![Форма4]![Kod_dog])) заменить на HAVING Dog_Oper.Nom=35 - нормально работает и не орет.
может я чего-то не знаю про перекрестные запросы | |
|
| |
|
|
|
|
[Forms]![Форма4]![Kod_dog]
|
Попробуй ее в глоб переменную
GLKOD=[Forms]![Форма4]![Kod_dog])
|
а в запросе используй функцию
Public Function FGLKOD()
FGLKOD=GLKOD
End Functin
|
типа
HAVING ((Dog_Oper.Nom)=FGLKOD())); | |
|
| |
|
|
|
| спасибо - учту, т.к. как без кода не обойтись - придется формировать запрос сборкой.
я кажись нашел как заголовки колонок сделать каждый раз новыми - типа как хочу, а не то что Акс выдает | |
|
| |
|
|
|
|
как заголовки колонок сделать каждый раз новыми - типа как хочу, а не то что Акс выдает
|
это часто надо бывает... | |
|
| |
|
|
|
| Чтобы ссылка на форму паботала в перекрестном запросе, ее надо явно прописать в параметрах запроса (перекрестного или базового). Т.е., чтоб в режиме SQL текст запроса начинался с PARAMETERS [Forms]![Форма4]![Kod_dog]
И еще совет: HAVING применяется в случае, если надо наложить условие на результат статистической функции. В вашем случае можно заменить его на WHERE. Теоретически будет быстее работать. | |
|
| |
|
|
|
| спасибо огромное, плохо если не значешь да еще и забыл. | |
|
| |
|
|
|
| У меня 11_11_2010 и т.п. преобразуется сл.ф-ей
Public Function Nd_mes(s As String) As String
Dim v As Date
v = Replace(s, "_", ".")
Nd_mes = Day(v) & vbCrLf & WeekdayName(Weekday(v, vbMonday), True, vbMonday)
End Function
|
в OPEN
Me("Head" & i).ControlSource = "='" & Nd_mes(rs.Fields(i - 1).Name) & "'"
|
Проверка - Debug.Print Nd_mes("31_08_2010") выводит число и день недели. Ты можешь что-нить подобное загнать в форму или отчет | |
|
| |
|
|
|
| Вот еще полезная техологическая функция когда много полей
Public Sub repname()
'Меняет глупые наименования полей типа Поле261 на умные типа "dat1"
DoCmd.OpenReport "Rep1", acViewDesign, , , acHidden"
Dim Ctl As Control
Dim Ctl1 As Control
Dim rpt As Report
With Reports("RepPlanPredjavl_tbl")
For Each Ctl1 In Reports("Rep1").Section("ÏПримечание отчета").Controls
Debug.Print Ctl1.Name
For i = 261 To 325
If Ctl1.Name = "Поле" & i Then
Ctl1.Name = "SCol" & (i - 260) ' SCol - нужное (контекстно-понятное) имя
Debug.Print Ctl1.Name
End If
Next i
Next
End With
DoCmd.Close acReport, "Rep1", acSaveYes
End Sub
|
| |
|
| |
|
|
|
| долго я ... судьбу вот наковырял, проверил работат, но обработку нужно вставить месяца
- не думаю что открыл америку - но новичкам и таким как я (с 5-е на 10-е) пользительно знать
Sub Dog_oper_pere_new()
Dim dbs As DAO.Database
Dim qdf As QueryDef
Dim ff As Field
Dim prp As Property
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("Dog_Oper_pere")
For Each ff In qdf.Fields
Select Case ff.Name
Case "Итоговое значение S_Summa" ' эти два поля в отчете заголовки строк
Case "opisanie"
Case Else ' а это поля которые динамические
Set prp = ff.CreateProperty("Caption", dbText, "СЮДА воткнуть обработку FF.NAME - для получения красивого названия поля") ' создали свойство
ff.Properties.Append prp ' добавили его
ff.Properties.Refresh ' обновили коллекцию
End Select
Next
End Sub
|
| |
|
| |
|
|
|
| продолжу - дабы не плодить тему
1. как кодом установить ширину столбца "по ширине данных"??
нашел вот такое -
CreateProperty("ColumnWidth", dbInteger, -2)
но оно не реагирует на него
2. как кодом закрепить первый столбец?? | |
|
| |