|
|
|
| Скажите плиз, какая функция из приведенных будет идиологически правильной?
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 | |
|
| |
|
|
|
| а не лучше через
Nz(DSum("Что1?","Где1?","Когда1?"),0) - Nz(DSum("Что2?","Где2?","Когда2?"),0)
|
| |
|
| |
|
|
|
| Уважаемый Мышь!
Я не сказал то, что это есть запросы. В базе присутствует таблица. В ней куча столбцов.
В одном из столбцов значения могут быть только "Пропустил" и "Отработал".
В следующем столбце- количество часов.
Необходимо подсчитать всю сумму со значением "пропустил" - сумму со значением "отработал". ВСЕ НАХОДИТСЯ В ОДНОЙ ТАБЛИЦЕ.
Плюс предварительная сортировка Отдел>Группа>Работник
Необходимо также эти данные просматривать как на отдельного работника, так и на группу и на отдел (типа, в таком-то отделе сколько человек еще должны отработать свои опоздания и отгулы....).
Поэтому я и создал эти функции с входными (не отобразил в примере) параметрами.
Меня интересует, как идиологически правильно писать эти функции? Создавать переменную Recordset и обнулять после, или НЕ СОЗДАВАТЬ ЕЕ ?? | |
|
| |
|
|
|
| прежде всего, идеологически неправильно то, что вы дважды используете CurrentDB как в первой, так и во второй функции. | |
|
| |
|
|
|
|
| давай по порядку,
1. описание таблицы в студию (название, поля)
2. что из нее надо получить? | |
|
| |
|
|
|
| Уважаемые! У меня все получилось.
Вы мне только посоветуйте, функцию писать с определением Recordset, или без?
т.е.
Dim Rst As Recordset
Set Rst = CurrentDb.OpenRecordset("бла-бла-бла")
Rst.Close
Set = Nothing
или так:
Dim Val As Double
Val = CurrentDb.OpenRecordset("бла-бла-бла") | |
|
| |
|
|
|
|
| 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. Хочу поздравить всех с праздником! Удачи всем, и отличного настроения! | |
|
| |
|
|
|
| если используете открытие рекордсета один раз, то ничего криминального нет в том,ч тобы использовать CurrentDb.OpenRecordset("бла-бла-бла")
если же используете открытие рекордсета несколько раз, то во первых
Dim db as Database
далее
Set db=CurrentDB
ну и дальше рекордсеты открываете от этой датабэйз.
экономьте память машины пользователя на которой он может еще, параллельно с вашей программой, слушать MediaPlayer :)
вообще можете писать как угодно. но.
потом, когда вам придется делиться своими кодами с другими не взыщите, если вас будут называть "пацаватым программистом" | |
|
| |
|
|
|
| to Силыч
Пасибо, именно это мнение я и спрашивал.
Я не достаточно информирован относительно "данных тонкостей", поэтому и хотел узнать мнение относительно сего у "ученых мужей" ))) | |
|
| |
|
|
|
| и Вас поздравляю с праздником!!!
Вот и счастливый финал
-<>-! | |
|
| |
|
|
|
| спасибо, и тебя с праздником.
как идеологически правильно сказать затрудняюсь.
-проверять наличие записей в рекодсете - это правильно.
-относительно выделения рекодсета в переменную - я всегда выделяю, особенно с появлением ADO.
- Rst.Close - хороший тон
- Set Rst = Nothing - где-то на сайте описана ошибка ACCESS связанная с такой конструкцией
- Rst.Fields(0) - стараюсь не использовать, вдруг порядок полей в рекордсете поменяется (но это скорее личные тараканы)
rst.fields("ИМЯ")
или
rst.[ИМЯ]
|
| |
|
| |