Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скажите плиз, какая функция из приведенных будет идиологически правильной?
 
 автор: akkorn   (03.11.2007 в 19:33)   личное сообщение
 
 

Скажите плиз, какая функция из приведенных будет идиологически правильной?


Function Func1() As Double
Dim RstProp As Recordset
Dim ValRstProp As Double
Dim RstOtr As Recordset
Dim ValRstOtr As Double

Set RstProp = CurrentDb.OpenRecordset("бла-бла-бла. рeзультат- сумма значений в столбце")
Set RstOtr = CurrentDb.OpenRecordset("бла-бла-бла. рeзультат- сумма значений в столбце")

If RstProp.RecordCount > 0 Then ValRstProp = RstProp.Fields(0)
If RstOtr.RecordCount > 0 Then ValRstOtr = RstOtr.Fields(0)

Func1 = ValRstProp - ValRstOtr

RstProp.Close
RstOtr.Close
Set RstProp = Nothing
Set RstOtr = Nothing
End Function






Function Func2() As Double
On Error Resume Next
Dim ValRstProp As Double
Dim ValRstOtr As Double

ValRstProp = CurrentDb.OpenRecordset("бла-бла-бла. рeзультат- сумма значений в столбце").Fields(0)
ValRstOtr = CurrentDb.OpenRecordset("бла-бла-бла. рeзультат- сумма значений в столбце").Fields(0)

Func2 = ValRstProp - ValRstOtr

End Function

  Ответить  
 
 автор: ГлазастыйМышь   (03.11.2007 в 20:29)   личное сообщение
 
 

а не лучше через

Nz(DSum("Что1?","Где1?","Когда1?"),0) - Nz(DSum("Что2?","Где2?","Когда2?"),0)

  Ответить  
 
 автор: akkorn   (03.11.2007 в 20:37)   личное сообщение
 
 

Уважаемый Мышь!
Я не сказал то, что это есть запросы. В базе присутствует таблица. В ней куча столбцов.
В одном из столбцов значения могут быть только "Пропустил" и "Отработал".
В следующем столбце- количество часов.
Необходимо подсчитать всю сумму со значением "пропустил" - сумму со значением "отработал". ВСЕ НАХОДИТСЯ В ОДНОЙ ТАБЛИЦЕ.
Плюс предварительная сортировка Отдел>Группа>Работник

Необходимо также эти данные просматривать как на отдельного работника, так и на группу и на отдел (типа, в таком-то отделе сколько человек еще должны отработать свои опоздания и отгулы....).

Поэтому я и создал эти функции с входными (не отобразил в примере) параметрами.


Меня интересует, как идиологически правильно писать эти функции? Создавать переменную Recordset и обнулять после, или НЕ СОЗДАВАТЬ ЕЕ ??

  Ответить  
 
 автор: Serge Gavrilov   (03.11.2007 в 22:01)   личное сообщение
 
 

прежде всего, идеологически неправильно то, что вы дважды используете CurrentDB как в первой, так и во второй функции.

  Ответить  
 
 автор: akkorn   (03.11.2007 в 23:02)   личное сообщение
 
 

>прежде всего, идеологически неправильно то, что вы дважды
>используете CurrentDB как в первой, так и во второй функции.

Согласен. Но как быть, если необходима работа с ДВУМЯ запросами?
Что же, теперь разбивать на две функции (по запросу в каждой) ?

ааа. а можно и так:
задаем 2 переменные. работаем с CurrentDB первый раз.
результат- в первую переменную.
задаем значение для rst во второй раз.
результат - во вторую.
оки. согласен с вами.


ТАК ЧТО ПРАВИЛЬНЕЕ- Создавать "Dim RstProp As Recordset" и после обнулять, или по примеру второй функции не создавать?

  Ответить  
 
 автор: ГлазастыйМышь   (03.11.2007 в 23:33)   личное сообщение
 
 

давай по порядку,
1. описание таблицы в студию (название, поля)
2. что из нее надо получить?

  Ответить  
 
 автор: akkorn   (04.11.2007 в 01:05)   личное сообщение
 
 

Уважаемые! У меня все получилось.
Вы мне только посоветуйте, функцию писать с определением Recordset, или без?

т.е.
Dim Rst As Recordset
Set Rst = CurrentDb.OpenRecordset("бла-бла-бла")
Rst.Close
Set = Nothing

или так:
Dim Val As Double
Val = CurrentDb.OpenRecordset("бла-бла-бла")

  Ответить  
 
 автор: час   (04.11.2007 в 11:22)   личное сообщение
 
 


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

Подумайте... может сначала над полностью объяснить проблему - это и поможет в поисках решения.

  Ответить  
 
 автор: akkorn   (04.11.2007 в 19:36)   личное сообщение
 
 

to час

Задаю вопрос заново:

Рекомендуется ли использовать инструкцию
Recordset (Dim rst.. , Set rst=...... Set rst=Nothing)
если можно напрямую присваивать значение
Val = CurrentDb.OpenRecordset("бла-бла-бла") ....

В чем сложность-то?
Я не прошу что-то придумать, я спрашиваю мнение, блин!


е-мое, ну или так:
какая инструкция вам больше по душе:


Function Func1() As Double
Dim Rst As Recordset
Dim ValRst As Double

Set Rst = CurrentDb.OpenRecordset("бла-бла-бла"))
If Rst.RecordCount > 0 Then ValRst = Rst.Fields(0)

Rst.Close
Set Rst = Nothing
End Function


ИЛИ

Function Func2() As Double
On Error Resume Next
Dim ValRst As Double

ValRst = CurrentDb.OpenRecordset("бла-бла-бла").Fields(0)

End Function



P.S. Хочу поздравить всех с праздником! Удачи всем, и отличного настроения!

  Ответить  
 
 автор: Силыч   (05.11.2007 в 09:14)   личное сообщение
 
 

если используете открытие рекордсета один раз, то ничего криминального нет в том,ч тобы использовать CurrentDb.OpenRecordset("бла-бла-бла")
если же используете открытие рекордсета несколько раз, то во первых
Dim db as Database
далее
Set db=CurrentDB
ну и дальше рекордсеты открываете от этой датабэйз.
экономьте память машины пользователя на которой он может еще, параллельно с вашей программой, слушать MediaPlayer :)

вообще можете писать как угодно. но.
потом, когда вам придется делиться своими кодами с другими не взыщите, если вас будут называть "пацаватым программистом"

  Ответить  
 
 автор: akkorn   (05.11.2007 в 13:01)   личное сообщение
 
 

to Силыч
Пасибо, именно это мнение я и спрашивал.
Я не достаточно информирован относительно "данных тонкостей", поэтому и хотел узнать мнение относительно сего у "ученых мужей" )))

  Ответить  
 
 автор: час   (05.11.2007 в 15:25)   личное сообщение
 
 

и Вас поздравляю с праздником!!!
Вот и счастливый финал
-<>-!

  Ответить  
 
 автор: osmor   (06.11.2007 в 09:03)   личное сообщение
 
 

спасибо, и тебя с праздником.
как идеологически правильно сказать затрудняюсь.
-проверять наличие записей в рекодсете - это правильно.
-относительно выделения рекодсета в переменную - я всегда выделяю, особенно с появлением ADO.
- Rst.Close - хороший тон
- Set Rst = Nothing - где-то на сайте описана ошибка ACCESS связанная с такой конструкцией
- Rst.Fields(0) - стараюсь не использовать, вдруг порядок полей в рекордсете поменяется (но это скорее личные тараканы)

rst.fields("ИМЯ")
или
rst.[ИМЯ]

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList