Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Just help ^^ / 25 сообщений из 34, страница 1 из 2
25.07.2003, 13:17
    #32218126
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
Помогите 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
25.07.2003, 13:20
    #32218131
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
убрал rs2.movefirst
Дак он мне в таблицу 11000 записей внес. И все равно только по первой валюте
...
Рейтинг: 0 / 0
25.07.2003, 13:21
    #32218134
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
а что запрос-то возвращает, если его сделать просто как запрос?
...
Рейтинг: 0 / 0
25.07.2003, 13:23
    #32218137
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
возвращает, соответственно, остаток кассы за сегодняшний день по каждой валюте
...
Рейтинг: 0 / 0
25.07.2003, 13:30
    #32218149
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
вот извращенетц
кто же так записи
добаляет?
запросом надо
запросом на добавление
а он коду написал
аж на километр
хотя все можно было
закинуть в запрос
до чего народ темный пошел
...
Рейтинг: 0 / 0
25.07.2003, 13:30
    #32218150
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
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
25.07.2003, 13:32
    #32218154
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
и с Хамом согласен, кроме обзывательств
а тебе что, сразу счетчик какой надо считать??
...
Рейтинг: 0 / 0
25.07.2003, 13:37
    #32218169
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
через запрос в данной ситьуации муторнее выйдет
...
Рейтинг: 0 / 0
25.07.2003, 14:07
    #32218241
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
Код: 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
25.07.2003, 14:12
    #32218251
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
Твоими устами да мед хлебать :))
Задача слишком сложна для такого простого решения...

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

Замерь время выполнения, просто радиинтереса.
Напиши в моём и в своём коде след.:
Код: plaintext
1.
2.
3.
t = Time()
'дальше код
MsgBox  "Время выполнения: "  & Format(Time() - t,  "hh:mm:ss" ), vbInformation,  "Тест" 
...
Рейтинг: 0 / 0
25.07.2003, 14:44
    #32218325
zz
zz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
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
25.07.2003, 14:46
    #32218329
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
ага :))
...
Рейтинг: 0 / 0
25.07.2003, 14:47
    #32218335
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
Однако предложенный Hummerom вариант добавляет значение только по одной валюте....
...
Рейтинг: 0 / 0
25.07.2003, 14:49
    #32218339
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Just help ^^
и непонятно, кстати, как там прописать
rs2("rest") * YeRate(rs2("валюта")) / YeRate(YeType("1"))

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

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

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

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


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