Subject | RE: [IBO] Calculated Fields - still didn´t got them |
---|---|
Author | Hans |
Post date | 2012-09-26T14:41:43Z |
Maybe consider to have the fields calculated in your SQL query or Procedure
like:
Select Field-1, .. Field-n, FIELD_A-FIELD_B as MYCALC1, FIELD_C-FIELD_D as
MYCALC2 from relation
Simple and Fast.
-----Original Message-----
From: IBObjects@yahoogroups.com [mailto:IBObjects@yahoogroups.com] On Behalf
Of Andrei Luís
Sent: Wednesday, September 26, 2012 8:28 AM
To: ibobjects@yahoogroups.com
Subject: [IBO] Calculated Fields - still didn´t got them
Hello folks,
I'm dealing with a performance problem for a long time, and I know that part
of it has been the calculated fields I'm using.
I'm doing them by 'my way', and by this I mean 'any way', not the best.
I'm searching about this topic here in the list, and I found something like
that:
1 procedure Tdm.qrTestCalculateField(Sender: TIB_Statement; ARow: TIB_Row;
AField: TIB_Column);
2 begin
3 if (AField.FieldName='MYCALC1') then
4 begin
5 AField.AsCurrency := ARow.ByName('FIELD_A').AsCurrency -
ARow.ByName('FIELD_B').asCurrency;
6 end;
7
8 if (AField.FieldName='MYCALC2') then
9 begin
10 AField.AsCurrency := ARow.ByName('FIELD_A').AsCurrency +
ARow.ByName('FIELD_B').asCurrency;
11 end;
12
13 if (AField.FieldName='MYCALC3') then
14 begin
15 AField.AsCurrency := ARow.ByName('FIELD_A').AsCurrency *
ARow.ByName('FIELD_B').asCurrency;
16 end;
17 end;
My questions:
1 - Is this the best way to use calculated fields in IBO? I mean, is it the
fastest way thinking about performance?
2 - I tried this code, but AField is always NIL!??? So if I run it like
that, I get an access violation exception at line 3. So I tried to isolate
this with a 'If AField = nil then exit', but every time the event is called,
AField is nil, then nothing is calculated.
3 - How about the code below? This is what I'm doing today:
1 procedure Tdm.qrTestCalculateField(Sender: TIB_Statement; ARow:
TIB_Row; AField: TIB_Column);
2 begin
3 ARow.ByName('MYCALC1').asCurrency :=
ARow.ByName('FIELD_A').AsCurrency - ARow.ByName('FIELD_B').asCurrency;
4 ARow.ByName('MYCALC1').asCurrency :=
ARow.ByName('FIELD_A').AsCurrency + ARow.ByName('FIELD_B').asCurrency;
5 ARow.ByName('MYCALC1').asCurrency :=
ARow.ByName('FIELD_A').AsCurrency * ARow.ByName('FIELD_B').asCurrency;
6 end;
[]s
Andrei
[Non-text portions of this message have been removed]
------------------------------------
___________________________________________________________________________
IB Objects - direct, complete, custom connectivity to Firebird or InterBase
without the need for BDE, ODBC or any other layer.
___________________________________________________________________________
http://www.ibobjects.com - your IBO community resource for Tech Info papers,
keyword-searchable FAQ, community code contributions and more !
Yahoo! Groups Links
like:
Select Field-1, .. Field-n, FIELD_A-FIELD_B as MYCALC1, FIELD_C-FIELD_D as
MYCALC2 from relation
Simple and Fast.
-----Original Message-----
From: IBObjects@yahoogroups.com [mailto:IBObjects@yahoogroups.com] On Behalf
Of Andrei Luís
Sent: Wednesday, September 26, 2012 8:28 AM
To: ibobjects@yahoogroups.com
Subject: [IBO] Calculated Fields - still didn´t got them
Hello folks,
I'm dealing with a performance problem for a long time, and I know that part
of it has been the calculated fields I'm using.
I'm doing them by 'my way', and by this I mean 'any way', not the best.
I'm searching about this topic here in the list, and I found something like
that:
1 procedure Tdm.qrTestCalculateField(Sender: TIB_Statement; ARow: TIB_Row;
AField: TIB_Column);
2 begin
3 if (AField.FieldName='MYCALC1') then
4 begin
5 AField.AsCurrency := ARow.ByName('FIELD_A').AsCurrency -
ARow.ByName('FIELD_B').asCurrency;
6 end;
7
8 if (AField.FieldName='MYCALC2') then
9 begin
10 AField.AsCurrency := ARow.ByName('FIELD_A').AsCurrency +
ARow.ByName('FIELD_B').asCurrency;
11 end;
12
13 if (AField.FieldName='MYCALC3') then
14 begin
15 AField.AsCurrency := ARow.ByName('FIELD_A').AsCurrency *
ARow.ByName('FIELD_B').asCurrency;
16 end;
17 end;
My questions:
1 - Is this the best way to use calculated fields in IBO? I mean, is it the
fastest way thinking about performance?
2 - I tried this code, but AField is always NIL!??? So if I run it like
that, I get an access violation exception at line 3. So I tried to isolate
this with a 'If AField = nil then exit', but every time the event is called,
AField is nil, then nothing is calculated.
3 - How about the code below? This is what I'm doing today:
1 procedure Tdm.qrTestCalculateField(Sender: TIB_Statement; ARow:
TIB_Row; AField: TIB_Column);
2 begin
3 ARow.ByName('MYCALC1').asCurrency :=
ARow.ByName('FIELD_A').AsCurrency - ARow.ByName('FIELD_B').asCurrency;
4 ARow.ByName('MYCALC1').asCurrency :=
ARow.ByName('FIELD_A').AsCurrency + ARow.ByName('FIELD_B').asCurrency;
5 ARow.ByName('MYCALC1').asCurrency :=
ARow.ByName('FIELD_A').AsCurrency * ARow.ByName('FIELD_B').asCurrency;
6 end;
[]s
Andrei
[Non-text portions of this message have been removed]
------------------------------------
___________________________________________________________________________
IB Objects - direct, complete, custom connectivity to Firebird or InterBase
without the need for BDE, ODBC or any other layer.
___________________________________________________________________________
http://www.ibobjects.com - your IBO community resource for Tech Info papers,
keyword-searchable FAQ, community code contributions and more !
Yahoo! Groups Links