Главная страница
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.05 c
2-1164115734
gosha73
2006-11-21 16:28
2006.12.10
Ядро - дельфи, плагин - си. Указатель на процедуру.


3-1159793840
Wolferio
2006-10-02 16:57
2006.12.10
Как узнать типы полей в базе данных


1-1161889905
SkySpeed
2006-10-26 23:11
2006.12.10
Как можно узнать какой объём файла подкачки занимает файл/прога?


15-1164265481
SerJaNT
2006-11-23 10:04
2006.12.10
Возвраст


15-1164013021
palva
2006-11-20 11:57
2006.12.10
Ода во славу пиратства