Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Подскажите как правильнее делать a функции/процедуре...   Найти похожие ветки 

 
pavel_guzhanov ©   (2006-11-23 08:41) [0]

Для примера. В функции/процедуре в самом начале получается набор данных из базы, при помощи Query.Open. в функции используется в том числе и значение одного поля из этого набора (Query.FieldByName("Field1").asinteger). Это значение используется несколько раз. Как правильнее - каждый раз, при использовании этого значения писать эту строчку (Query.FieldByName("Field1").asinteger), или объявить переменную типа Integer, присвоить ей в начале функции/процедуры значение, и оперировать уже переменной?

ps. Integer я привел для примера, может быть любой тип данных...

pps. простите, если путано задал вопрос, лучше сформулировать не смог :0))


 
Александр Иванов ©   (2006-11-23 08:46) [1]

С переменной быстрее, но под нее выделяется память.


 
StriderMan ©   (2006-11-23 08:48) [2]


> Это значение используется несколько раз. (Query.FieldByName("Field1").asinteger), или объявить переменную
> типа Integer

конечно данные из переменной быстрее получишь чем значение поля, тем более ..ByName (хотя там имена индексированы, и все происходит довольно быстро).
Я обычно завожу переменную если больше двух раз используется.  Да и код читабельнее получается.


 
Чапаев ©   (2006-11-23 09:25) [3]

Если в цикле, то точно переменную заводить надо. ;-)


 
Anatoly Podgoretsky ©   (2006-11-23 09:35) [4]

> pavel_guzhanov  (23.11.2006 08:41:00)  [0]

Переменная это одна штука.
Набор данных это несколько штук


 
pavel_guzhanov ©   (2006-11-23 09:52) [5]


> Переменная это одна штука.
> Набор данных это несколько штук

Это я понимаю :0)). Вопрос состоит в том, как лучше поступить при использовании значения конкретного одного поля из набора данных.


 
Чапаев ©   (2006-11-23 09:53) [6]

> Вопрос состоит в том, как лучше поступить при использовании
> значения конкретного одного поля из набора данных
Согласись, дать правильный ответ может только конкретный программист, выполняющий конкретно этот проект. ;-)


 
oxffff ©   (2006-11-23 09:54) [7]

Поместить в регистр процессора и писать на ассемблере. :)


 
Anatoly Podgoretsky ©   (2006-11-23 09:57) [8]

> pavel_guzhanov  (23.11.2006 09:52:05)  [5]

А никак, несколько значений в одну переменную не поместить, разве что сумму


 
Александр Иванов ©   (2006-11-23 10:21) [9]

> [5] pavel_guzhanov ©   (23.11.06 09:52)

Что-то все запуталось сильнее. Первоначально понял что происходит следующее:
Query.Open;
Query.First;
d := Query.FieldByName("Field1").AsInteger;
b := Query.FieldByName("Field1").AsInteger;
t := Query.FieldByName("Field1").AsInteger;


В этом случае нужно использовать переменую. Но если код выглядит так, то никакого смысла в переменной нет:
Query.Open;
Query.First;
d := Query.FieldByName("Field1").AsInteger;
Query.Next;
b := Query.FieldByName("Field1").AsInteger;
Query.Next;
t := Query.FieldByName("Field1").AsInteger;


 
pavel_guzhanov ©   (2006-11-23 10:43) [10]

вопрос в том, что правильнее:


Query.Open;
Query.First;
d := Query.FieldByName("Field1").AsInteger+5;
b := Query.FieldByName("Field1").AsInteger+8;
t := Query.FieldByName("Field1").AsInteger+9;


или


Query.Open;
Query.First;
s:=Query.FieldByName("Field1").AsInteger;
d := s+5;
b := s+8;
t := s+9;

?


 
Чапаев ©   (2006-11-23 10:57) [11]

Второе.


 
Чапаев ©   (2006-11-23 10:59) [12]

Правильнее и в том смысле, что теоретически где-нибудь между
d := Query.FieldByName("Field1").AsInteger+5;
b := Query.FieldByName("Field1").AsInteger+8;
t := Query.FieldByName("Field1").AsInteger+9;
значение поля измениться может.

Хотя, опять же, может быть по условию тебе нужно получить именно новые данные...


 
Плохиш ©   (2006-11-23 11:05) [13]


> Чапаев ©   (23.11.06 10:59) [12]

В данном конкретном случае, ни теоретически, ни практически измениться не может.


 
pavel_guzhanov ©   (2006-11-23 11:05) [14]

Спасибо, понял.


 
Чапаев ©   (2006-11-23 11:08) [15]

> [13] Плохиш ©   (23.11.06 11:05)
Почему?


 
Jeer ©   (2006-11-23 11:10) [16]

Потому, что запрос уже сделан и это есть енкоторый временной срез данных.


 
Чапаев ©   (2006-11-23 11:15) [17]

Понял.


 
Anatoly Podgoretsky ©   (2006-11-23 14:09) [18]

> Александр Иванов  (23.11.2006 10:21:09)  [9]

В таком виде смысла вообще нет ни для первого, ни для второго кода.


 
Anatoly Podgoretsky ©   (2006-11-23 14:10) [19]

> Чапаев  (23.11.2006 10:57:11)  [11]

Первое


 
Anatoly Podgoretsky ©   (2006-11-23 14:11) [20]

> Плохиш  (23.11.2006 11:05:13)  [13]

Зуб даешь?
Последнее время по форумам часто бродят автообновители.


 
Александр Иванов ©   (2006-11-23 14:34) [21]

> [18] Anatoly Podgoretsky ©   (23.11.06 14:09)

Придираетесь :) Это был пример.


 
Anatoly Podgoretsky ©   (2006-11-23 16:51) [22]

Александр Иванов ©   (23.11.06 14:34) [21]
Ни в коей мере или смысл в обеих вариантах, или нет в обеих.


 
Плохиш ©   (2006-11-23 17:40) [23]


> Anatoly Podgoretsky ©   (23.11.06 14:11) [20]
> > Плохиш  (23.11.2006 11:05:13)  [13]
>
> Зуб даешь?

Во время выполнения этих 5/6 строчек кода программа просто не будет отвлекаться на какие-то там автообновители :-)


 
Anatoly Podgoretsky ©   (2006-11-23 18:54) [24]

> Плохиш  (23.11.2006 17:40:23)  [23]

Зуб получил, аж целую челюсть.
Большая благодарность :-)


 
Petr V. Abramov ©   (2006-11-23 22:18) [25]

если в цикле не выполняется процедура, по как проще. Если выполняется, то переменная.
т.к. FieldByName - еще тот немалый код



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.069 c
15-1164004463
pssst
2006-11-20 09:34
2006.12.10
win 2003


1-1162187327
Николай1984
2006-10-30 08:48
2006.12.10
Бинарные деревья (деревья поиска)


2-1164270535
webpauk
2006-11-23 11:28
2006.12.10
как правильно записать следующую конструкцию?


2-1164036911
никв
2006-11-20 18:35
2006.12.10
adoquery в консоли


3-1159767855
Tab
2006-10-02 09:44
2006.12.10
Локальная база данных