powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Just help ^^
25 сообщений из 34, страница 1 из 2
Just help ^^
    #32218126
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите pls разобраться. Приведенный ниже код вычисляет ненулевые значения Остатка кассы по каждой валюте и должен записывать эти значения в соответствующую таблицу cash. Однако, он записывает в табицу остаток только по перой валюте в запросе. Видать я что-то с циклом намудрил...

Help pls



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim rs As DAO.Recordset
    Dim rs2 As DAO.Recordset
    
    Set rs = CurrentDb.OpenRecordset( "cash" )
    Set rs2 = CurrentDb.OpenRecordset( "SELECT [cash].[Валюта], Sum([cash].[Приход]) AS arrival, Sum([cash].[Расход]) AS charge, Sum(nz([Приход],0 ))-Sum(nz([Расход], 0 )) AS rest FROM cash GROUP BY [cash].[Валюта], [cash].[Дата] HAVING (((cash.Дата)=date()))")
    
        If rs2( "rest" ) <>  0  Then
            Do Until rs2.EOF
            rs2.MoveFirst
            With rs
                .AddNew
                ![Реф №] =  "0 = 00 "
                !Наименование =  "Остаток кассы" 
                !Валюта = rs2( "валюта" )
                !Приход = rs2( "rest" )
                .Update
            End With
            rs2.MoveNext
            Loop
        End If
        rs.close
        rs2.close
...
Рейтинг: 0 / 0
Just help ^^
    #32218131
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убрал rs2.movefirst
Дак он мне в таблицу 11000 записей внес. И все равно только по первой валюте
...
Рейтинг: 0 / 0
Just help ^^
    #32218134
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что запрос-то возвращает, если его сделать просто как запрос?
...
Рейтинг: 0 / 0
Just help ^^
    #32218137
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возвращает, соответственно, остаток кассы за сегодняшний день по каждой валюте
...
Рейтинг: 0 / 0
Just help ^^
    #32218149
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот извращенетц
кто же так записи
добаляет?
запросом надо
запросом на добавление
а он коду написал
аж на километр
хотя все можно было
закинуть в запрос
до чего народ темный пошел
...
Рейтинг: 0 / 0
Just help ^^
    #32218150
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
After you call the AddNew method, the new record becomes the current record and remains current after you call the Update method.

(c) msdn

ну и дальше там что-то написано :)
...
Рейтинг: 0 / 0
Just help ^^
    #32218154
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и с Хамом согласен, кроме обзывательств
а тебе что, сразу счетчик какой надо считать??
...
Рейтинг: 0 / 0
Just help ^^
    #32218169
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
через запрос в данной ситьуации муторнее выйдет
...
Рейтинг: 0 / 0
Just help ^^
    #32218241
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
CurrentDb.Execute  "INSERT INTO Cash ( Валюта, Приход, Дата, [Реф №], Наименование )
SELECT cash.Валюта, Sum([Приход])-Sum([Расход]) AS rest, cash.Дата, "  0 = 00  " AS [Реф №], " Остаток кассы " AS Наименование
FROM cash
GROUP BY cash.Валюта, cash.Дата, "  0 = 00  ", " Остаток кассы "
HAVING (((Sum([Приход])-Sum([Расход]))<>0 ) AND ((cash.Дата)=date()));
"


Всё, и никаких проблем, зачем по рекордсетам бегать, в одном топике я уже говорил, если у вас будет 1000000 записей скажем или больше, тоже рекордсет? Флаг вам в руки и памяти побольше:)
...
Рейтинг: 0 / 0
Just help ^^
    #32218251
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Твоими устами да мед хлебать :))
Задача слишком сложна для такого простого решения...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim rs As DAO.Recordset
    Dim rs2 As DAO.Recordset
    
    Set rs = CurrentDb.OpenRecordset( "cash" )
    Set rs2 = CurrentDb.OpenRecordset( "SELECT [cash].[Валюта] ........

        If rs2(" rest ") <> 0  Then
            Do Until rs2.EOF
                With rs
                    .AddNew
                    ![Реф №] = " 0 = 00  "
                    !Наименование = " Остаток кассы "
                    !Валюта = rs2(" валюта ")
                    !Приход = rs2(" rest ")
                    !Эквивалент1 = rs2(" rest ") * YeRate(rs2(" валюта ")) / YeRate(YeType("  1 "))
                    .Update
                    rs2.MoveNext
                End With
            Loop
        End If
    rs.close
    rs2.close

Типа так я ее решил...
...
Рейтинг: 0 / 0
Just help ^^
    #32218255
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя я не прав... Твой вариант тоже хорош, но мой все же читабельнее :))
...
Рейтинг: 0 / 0
Just help ^^
    #32218284
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно я повешу Всеволода
под первой попавшейся сосной?
...
Рейтинг: 0 / 0
Just help ^^
    #32218285
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причём здесь читабельнее?
У меня запрос, а у тебя рекордсет:)
Дело в подходе просто, зачем рекордсет, если можно одним запросом:)

Замерь время выполнения, просто радиинтереса.
Напиши в моём и в своём коде след.:
Код: plaintext
1.
2.
3.
t = Time()
'дальше код
MsgBox  "Время выполнения: "  & Format(Time() - t,  "hh:mm:ss" ), vbInformation,  "Тест" 
...
Рейтинг: 0 / 0
Just help ^^
    #32218325
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Всеволод:
Так еще читабельнее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
rs.AddNew
rs( 0 )= 0 
rs( 1 )= 0 
rs.update

rs.AddNew
rs( 0 )= 1 
rs( 1 )= 1 
rs.update
...
rs.AddNew
rs( 0 )=i
rs( 1 )=i
rs.update

Надеюсь, мысль понятна...
...
Рейтинг: 0 / 0
Just help ^^
    #32218329
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага :))
...
Рейтинг: 0 / 0
Just help ^^
    #32218335
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако предложенный Hummerom вариант добавляет значение только по одной валюте....
...
Рейтинг: 0 / 0
Just help ^^
    #32218339
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и непонятно, кстати, как там прописать
rs2("rest") * YeRate(rs2("валюта")) / YeRate(YeType("1"))

где YeRate(rs2("валюта")) это курс валюты на сегодняшний день
...
Рейтинг: 0 / 0
Just help ^^
    #32218342
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Hummer:
а насчет скорости я бы поспорил.
вобщем случае запросы конечно побыстрее,
но если базу юзает куча народу,
то не факт, что запрос будет быстрее, может и наоборот получиться.

к тому же в коде можно обрабатывать ошибки,
а в запросе только наблюдать.
...
Рейтинг: 0 / 0
Just help ^^
    #32218351
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и вообще о какой скорости можно говорить, когда етот самый запрос добавляет 2-3 строки
...
Рейтинг: 0 / 0
Just help ^^
    #32218355
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>да и вообще о какой скорости можно говорить, когда етот самый запрос
>добавляет 2-3 строки

наивный :)
у меня, например, ситуация, что я таблицу только открываю
по несколько секунд :(
юзверей развелось тыщы, пора отстреливать :)
...
Рейтинг: 0 / 0
Just help ^^
    #32218357
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня немного проще :)
есть 5 касс, есть 5 кассиров
каждый кассир ведет свою кассу (таблицу)
...
Рейтинг: 0 / 0
Just help ^^
    #32218367
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Vsevolod V
Отправил пример на мыло pi3dec@mail.ru.
Должно всё работать. Если что не так - пример табличек на почту, может что не так понял просто....

2 sasha_1
Ну если пользователей так много и размер базы большой, то mdb это не выход, нужен преход на SQL (для комфортной работы с сервером через adp).
Просто не знаю, что у вас за ситуация, переход вещь очень гемморойная...
А то будет как ЛП как-то описывал, начальство запускает отчёт и все пользователи висят, отгрузки со склада не идут и т.п.
Надо рассматривать каждый случай обращения к базе отдельно и замерять время - может получиться и наоборот, кто же спорит, но в общем случае запрос быстрее.
...
Рейтинг: 0 / 0
Just help ^^
    #32218373
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда я присоединюсь к Hummer.
действительно запрос в данном случае удобнее и быстрее.
тем более, что он автоматом создает транзакцию.
(кстати ты про них не забыл в своем коде?)
...
Рейтинг: 0 / 0
Just help ^^
    #32218380
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блиинн :))
База создана в более поздней версии Access...
(у меня А2000)
я сейчас выть начну :)
...
Рейтинг: 0 / 0
Just help ^^
    #32218384
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению я не знаю что такое транзакция
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Just help ^^
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]