Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

Подскажите как правильнее делать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.042 c
3-1158810664
Lex_!
2006-09-21 07:51
2006.12.10
Формирование меню из таблици базы данных


15-1163787017
antonn
2006-11-17 21:10
2006.12.10
Установка компонент в BSD 2006


2-1164040438
Vasiliy
2006-11-20 19:33
2006.12.10
Как обработать WM_NCMOUSEMOVE на не клиентской области?


15-1158621901
Ketmar
2006-09-19 03:25
2006.12.10
Console DM client


2-1164221577
TObject2k
2006-11-22 21:52
2006.12.10
интерфейсы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский