Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

MSAccess->Report-> Как программно добавить данные?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Ginger



Зарегистрирован: 12.03.2006
Сообщения: 6
Откуда: Из-за компутера!

СообщениеДобавлено: Ср Мар 22 2006 14:56    Заголовок сообщения: MSAccess->Report-> Как программно добавить данные? Ответить с цитатой

Есть такая необходимость:
нужно программо добавлять данные для отчета в MS Access'e. Мне нужно смоделировать те данные которые приходят в отчет из запроса или таблицы.
на VB это должно выглядеть типа того:

Me.datasource.AddNew

Но я не знаю как реально это сделать! Кто знает плиз, помогите! Это нужно срочно!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
vladimir_kg



Зарегистрирован: 05.04.2006
Сообщения: 31

СообщениеДобавлено: Ср Апр 05 2006 13:16    Заголовок сообщения: Re: MSAccess->Report-> Как программно добавить данные? Ответить с цитатой

Ginger писал(а):
Есть такая необходимость:
нужно программо добавлять данные для отчета в MS Access'e. Мне нужно смоделировать те данные которые приходят в отчет из запроса или таблицы.
на VB это должно выглядеть типа того:

Me.datasource.AddNew

Но я не знаю как реально это сделать! Кто знает плиз, помогите! Это нужно срочно!!!


не совсем понятен вопрос....
Воспользуйся vba
могу только одно посоветовать, открывай запрос из формы в аксесе, но прежде чем открывать отчет, выполни функцию которая подготавливает данные и закидывает их во временную таблицу.... но всегда с одним именем....
а далее вызываешь отчет
который выдает данные из этой временной таблицы....

небольшая справочка...

Вот небольшой примерчик функции... использование АДО....
вот тут и подготовка данных....

Sub subCalcPractic()

Dim dtCurrentDate As Date
dtCurrentDate = Forms![ГлавнаяФорма]![НачалоОтсчета]

Dim cnn As New ADODB.Connection
Set cnn = CurrentProject.Connection

Dim rstpr As New ADODB.Recordset
rstpr.Open "Практика", cnn, adOpenKeyset, adLockOptimistic

Dim rsTоR As New ADODB.Recordset
rsTоR.Open "ТаблицаЗаписейРасчетВременная", cnn, adOpenKeyset, adLockOptimistic

Dim rabdn As Integer
Dim hours As Integer
Dim cursum As Currency

Do While (Not rstpr.EOF)
'' здесь такая функция которая выдает количество раб дней за период
rabdn = funRabDays(rstpr("НачДата"), rstpr("КонДата"))
hours = rabdn * 8
cursum = hours * rstpr("Ставка")

rsTоR.AddNew
rsTоR("ТабНомер") = rstpr("ТабНомер")
rsTоR("Дата") = dtCurrentDate
rsTоR("Счет") = 48 '' Рук.Практики
rsTоR("Сумма") = cursum
rsTоR.Update

rstpr.MoveNext
Loop


End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Ginger



Зарегистрирован: 12.03.2006
Сообщения: 6
Откуда: Из-за компутера!

СообщениеДобавлено: Ср Апр 05 2006 15:48    Заголовок сообщения: Re: MSAccess->Report-> Как программно добавить данные? Ответить с цитатой

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


Спасибо Владимир!
Но предложенный вариант не подходит.
в упрощенном виде это должно выглядеть так:
у меня в отчете в области наддых есть поле Name.
Мне нужно для этого поля на VB добавлять данные.
while(n<count)
Me!Name.value="Что-нить вставляем..."
Wend

при этом при просмотре отчета мы видем столько полей Name с теми данными которые мы вставили сколько равно значение count.

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

Но спасибо и за этот вариант - если не найду как это делать - придется использовать временную таблицу.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
vladimir_kg



Зарегистрирован: 05.04.2006
Сообщения: 31

СообщениеДобавлено: Чт Апр 06 2006 10:48    Заголовок сообщения: Re: MSAccess->Report-> Как программно добавить данные? Ответить с цитатой

Спасибо Владимир!
Но предложенный вариант не подходит.
в упрощенном виде это должно выглядеть так:
у меня в отчете в области наддых есть поле Name.
Мне нужно для этого поля на VB добавлять данные.
while(n<count)
Me!Name.value="Что-нить вставляем..."
Wend
.[/quote]

Слушай есть еще один вариант...

Можно сделать так

Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer)
me.print "что хочешь, только незабудь про форматирование"
''' можешь использовать и цикл....
End Sub

только есть одна проблема отслеживание конца страницы....
нужно почить справку по этому вопросу....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Ginger



Зарегистрирован: 12.03.2006
Сообщения: 6
Откуда: Из-за компутера!

СообщениеДобавлено: Чт Апр 06 2006 12:09    Заголовок сообщения: Ответить с цитатой

Вот именно! Нужно многое что отслеживать если делать таким образом.
Поэтому самый простой вариант - программано посылать данные в отчет.
Как это сделать?
Все остальные варианты очень трудные.

есть ли что-то типа

Me![ОбластьДанных].AddNewData

или

Me![ОбластьДанных].AddNewRow

какая либо функция, которой можно управлять данными в области данных!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
vladimir_kg



Зарегистрирован: 05.04.2006
Сообщения: 31

СообщениеДобавлено: Сб Май 20 2006 14:21    Заголовок сообщения: Ответить с цитатой

Тогда предлагаю два этих метода совместить....

короче говоря прежде нужно настроить это поле:
полей есть такое свойство как "РАСШИРЕНИЕ" ставим да...

далее добавляем следующий код:

Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
Dim i As Integer
Dim mystr As String
For i = 1 To Me.val
mystr = mystr & "Наши данные " & Str(i) & vbCrLf
Next i
Me.НашеПоле = mystr
End Sub

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

типа такого вида:

id val

1 2 наше Мои данные 1
Мои данные 2
2 4 наше Мои данные 1
Мои данные 2
Мои данные 3
Мои данные 4
3 5 наше Мои данные 1
Мои данные 2
Мои данные 3
Мои данные 4
Мои данные 5


Примечание:
ТАК ЕЩЕ НЕ ИЗВРАЩАЛСЯ НА АКСЕСЕ.... Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
vladimir_kg



Зарегистрирован: 05.04.2006
Сообщения: 31

СообщениеДобавлено: Сб Май 20 2006 14:25    Заголовок сообщения: Ответить с цитатой

потерялось форматирование ((((
и по этому плохо видно что в итоге получается....

если есть желание могу выслать примерчик по почте forlove.82@mail.ru, на котором только что извращался....
Arrow
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Ginger



Зарегистрирован: 12.03.2006
Сообщения: 6
Откуда: Из-за компутера!

СообщениеДобавлено: Вс Май 21 2006 21:55    Заголовок сообщения: Ответить с цитатой

спасибо за ответы!
Если я правильно понял - этот пример вкладывает все данные в одно поле.
А мне нужно чтобы создавалось другое поля для новых данных.

Пример:
В таблице есть строки:
Строка 1
Строка 2
Строка 3
Строка 4
Строка 5
Строка 6

Мы делаем отчет на основе этой таблице, где в свойство Source текстового поля ставим столбец таблицы в котором хранятся эти строки.
При выводе (предпросмотре или печате) отчета мы получаем 6 полей со строками из нашей таблицы.
Это есстественное дело.

ТАК ВОТ: мне нужно программно посылать данные в отчет чтобы получилось тоже самое (тот же самый результат):

SUB
For i = 1 To 6
Me.source.НашеПоле.AddNew
Me.НашеПоле = "Строка " & Str(i)
Next i
End Sub

Результат должен быть одинаковый как при естественном выводе отчета на основе таблици.
Вот только проблема как добавить это новое поле (или новый комплект данных, которые соответсвуют одной строке таблицы или запроса)???

Как смоделитьровать сами данные и как их добавлять - это не проблема.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
vladimir_kg



Зарегистрирован: 05.04.2006
Сообщения: 31

СообщениеДобавлено: Пт Июн 09 2006 09:06    Заголовок сообщения: Ответить с цитатой

Если твой проект *.mdb

встроенный SQL .mdb не позволит создать такой запрос.

Запрос выполнятеся строка за строкой, попытка использовать подзапрос ни к чему не приведет. (т.е. нельзя заставить выполнить строку несколько раз)

но всетаки решение нашлось...
сразу хочу оговориться, что работает оно только до определенного диапазона значений...
максимально количество строк в принципе не ограничено, но необходимо их прописать...

ВОТ САМ ПРИМЕР

тебе понадобиться дополнительная таблица следующего вида...
где n - количество повторов....
ef - любое поле.... я для простоты использовал числовое поле, оно позволит контролировать кол-во строк.... желательно что бы эти два поля были ключем таблицы...

------------------------------------
n..............................ef
------------------------------------
1..............................1
2..............................1
2..............................2
3..............................1
3..............................2
3..............................3
4..............................1
4..............................2
4..............................3
4..............................4
5..............................1
5..............................2
5..............................3
5..............................4
5..............................5
---------------------------
можно продолжать в том же духе...... Smile

в моем примере максимально количесвто выводимых строк 5...


а вот твоя таблица:

где n количество повторов строки.
id - уникальный номер
val - какое либо значение

----------------------------------------------------------------------------
ID..............................n..............................val
----------------------------------------------------------------------------
1..............................2..............................два
2..............................3..............................три
3..............................5..............................а это пять
4..............................4..............................этот текст (4 раза)


А теперь самое простое:
Запрос который выведет то что мы так долго искали...

SELECT t1.ID, t1.val, t1.n
FROM t1 INNER JOIN dop ON t1.n=dop.n;

Результат запроса для представленных выше данных следущий:

----------------------------------------------------------------------------
ID..............................val..............................n
----------------------------------------------------------------------------
1..............................два..............................2
1..............................два..............................2
2..............................три..............................3
2..............................три..............................3
2..............................три..............................3
3..............................а это пять..............................5
3..............................а это пять..............................5
3..............................а это пять..............................5
3..............................а это пять..............................5
3..............................а это пять..............................5
4..............................этот текст (4 раза)..............................4
4..............................этот текст (4 раза)..............................4
4..............................этот текст (4 раза)..............................4
4..............................этот текст (4 раза)..............................4

вот пожалуй и все что могу предложить на текущий момент.

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

Данный пример не подойдет для тех случаев когда приходится выводить большое количество повторов....

Специально для Админа (когда будет работать форматирование, это существенно....)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Ginger



Зарегистрирован: 12.03.2006
Сообщения: 6
Откуда: Из-за компутера!

СообщениеДобавлено: Сб Июн 10 2006 22:01    Заголовок сообщения: Ответить с цитатой

Спасбо!
Я как раз использую сейчас такой пример с таблицей (это обсуждалось еще в других темах)...
Тока я немного оптимизировал эту схему.

Мне хочется узнать 2 вопроса:
1. Всетаки возможно ли это сделать на SQL (и в каких СУБД).
2. Возможно ли программно добавлять (засылать) данные в отчет (собственно о чем тема и идет...).

Если кто знает о такой возможности (и реальных примерах) поделитесь мудростью!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Lamers



Зарегистрирован: 29.06.2006
Сообщения: 16

СообщениеДобавлено: Чт Июн 29 2006 15:14    Заголовок сообщения: Ответить с цитатой

Запрос1:
Код:
SELECT [ones].[x]+[tens].[x]*10+[hundreds].[x]*100 AS [NUMBER]
FROM [SELECT 0 as x from table1
union select 1 as x from table1
union select 2 as x from table1
union select 3 as x from table1
union select 4 as x from table1
union select 5 as x  from table1
union select 6 as x from table1
union select 7 as x from table1
union select 8 as x from table1
union select 9 as x from table1]. AS ones, [SELECT 0 as x from table1
union select 1 as x from table1
union select 2 as x from table1
union select 3 as x from table1
union select 4 as x from table1
union select 5 as x  from table1
union select 6 as x from table1
union select 7 as x from table1
union select 8 as x from table1
union select 9 as x from table1]. AS tens, [SELECT 0 as x from table1
union select 1 as x from table1
union select 2 as x from table1
union select 3 as x from table1
union select 4 as x from table1
union select 5 as x  from table1
union select 6 as x from table1
union select 7 as x from table1
union select 8 as x from table1
union select 9 as x from table1]. AS hundreds;

Запрос2:
Код:

SELECT Table1.Stroka, Table1.Count, Запрос1.NUMBER
FROM Table1, Запрос1
WHERE (((Запрос1.NUMBER)<=[Count]))
ORDER BY Table2.Field1;
[/code]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...