Thanks for your reply.

MONTH_* are not fields in a table, they are output parameters of my stored 
procedure.

Mike


  ----- Original Message ----- 
  From: thp_pkmi 
  To: firebird-support@yahoogroups.com 
  Sent: Tuesday, June 18, 2013 10:52 PM
  Subject: [firebird-support] Re: Does Firebird have a way to reference similar 
named fields? (Like MONTH_1 thru MONTH_120)


    
  If I can assume Month_1..Month_120 as fields of your table rather than 
variables, then I suppose we can do things like this:

  I= 1;
  while (I <= NoOfCol) do
  begin
  s= 'update YOUR_TABLE set Month_'||I||' = Month_'||I||' + ? where 
SOME_CONDITION';
  execute statement (s) (nTotalMonth);
  I= I+1;
  end

  "YOUR_TABLE" & "SOME_CONDITION" are just symbolic, sorry to be wordy

  This approach is only good in syntax, in real performance I think it will be 
a bit slower than your long syntax, because of the run time compilation of 
EXECUTE STATEMENT.

  --- In firebird-support@yahoogroups.com, "Softtech Support" <stwizard@...> 
wrote:
  >
  > Thanks for your reply.
  > 
  > I should have mentioned that this stored procedure is used to generate a 
Stair-Step Financial Report (My first attempt at such a report I might add) and 
therefore option 1 below would not work as I do not need to store the results.
  > 
  > I have used EXECUTE STATEMENT in the past for SELECT statements and even 
after looking again at the LangRef-Update.pdf (For v1.5) I do not see how it 
could be used for this instance. Am I missing something?
  > 
  > A little more info:
  > I basically created a stored procedure that would generate a Stair-Step 
Financial report that can list the number of accounts/cases turned, amount 
turned, average amount turned for collections for a given period, followed by 
the amount received for every month since the given period.
  > 
  > The report works as follows:
  > If Client X has been a client for two years, then it would be a 24 x 24 
report. Shown below is an example of a client signed on Oct 2012 and we started 
receiving accounts in Dec 2012. So the report is ran for the first year 
10/01/12 thru 06/30/13 and is a 9 x 9 report (9 rows - Periods x 9 columns - 
Monthly collections).
  > 
  > The start date for this report is 10/01/12 and every month following the 
first has to be listed whether they had acounts turned to them for collections 
or not. Then the Recovery would show how much was received in each month 
following the turn. 
  > 
  > Obviously, each row has one less column filled out..so when you get to the 
last row, there is only Month 1 on the report. 
  > 
  > PERIOD CASES PRINC_AMT AVG_CASE MONTH_1 MONTH_2 MONTH_3 MONTH_4 MONTH_5 
MONTH_6 MONTH_7 MONTH_8 MONTH_9
  > Oct-12 0 0 0 0 0 0 0 0 0 0 0 0
  > Nov-12 0 0 0 0 0 0 0 0 0 0 0 0
  > Dec-12 292 162894.14 557.85 1101.64 2721.09 3510.35 2571.71 381.21 256.64 
25.00 0 0
  > Jan-13 229 161576.07 705.57 3802.94 762.90 3995.06 1062.37 1433.10 3206.25 
0 0 0
  > Feb-13 182 150174.56 825.13 1315.53 1502.86 1920.46 60.00 87.74 0 0 0 0
  > Mar-13 158 122131.82 772.98 187.00 1867.37 1805.65 4251.79 0 0 0 0 0
  > Apr-13 207 157906.67 762.83 1629.24 2649.20 500.83 0 0 0 0 0 0
  > May-13 208 166616.77 801.04 167.23 1800.69 0 0 0 0 0 0 0
  > Jun-13 294 236136.50 803.18 200.00 0 0 0 0 0 0 0 0
  > 
  > Is there somewhere I can post attachments? If so then I could post the full 
stored procedure and an excel file that was generated by it.
  > 
  > So any other ideas how to modify this stored procedure?
  > 
  > Mike
  > 
  > 
  > ----- Original Message ----- 
  > From: thp_pkmi 
  > To: firebird-support@yahoogroups.com 
  > Sent: Tuesday, June 18, 2013 5:14 AM
  > Subject: [firebird-support] Re: Does Firebird have a way to reference 
similar named fields? (Like MONTH_1 thru MONTH_120)
  > 
  > 
  > 
  > I think you have 2 options:
  > 
  > 1. normalize the table to have 2 fields "Month Number" & "Month Value", 
then you can search record by "Month Number" for updating "Month Value"
  > 
  > 2. use PSQL statement: EXECUTE STATEMENT, you can read about it in 
Firebird-2.5-LangRef-Update.pdf
  > 
  > --- In firebird-support@yahoogroups.com, "Softtech Support" <stwizard@> 
wrote:
  > >
  > > In Delphi I have the ability to reference a field using FieldByName() 
inside a For loop like this:
  > > 
  > > For I := 1 to 120 do
  > > begin
  > > with cdsReport do
  > > begin
  > > FieldByName('MONTH_' + IntToStr(I)).Visible := iNoOfCols >= I;
  > > end;
  > > end;
  > > 
  > > 
  > > Is there any way to do this in a Firebird Stored Procedure? I have 120 
fields named MONTH_1 thru MONTH_120 and currently I have to reference them like 
this. Just wanting to know if there is a better way..
  > > ...
  > > I = 1;
  > > 
  > > WHILE (I <= iNoOfColumns ) DO
  > > BEGIN
  > > IF (I = 1) THEN
  > > MONTH_1 = MONTH_1 + nTotalMonth;
  > > ELSE IF (I = 2) THEN
  > > MONTH_2 = MONTH_2 + nTotalMonth;
  > > ELSE IF (I = 3) THEN
  > > MONTH_3 = MONTH_3 + nTotalMonth;
  > > ELSE IF (I = 4) THEN
  > > MONTH_4 = MONTH_4 + nTotalMonth;
  > > ELSE IF (I = 5) THEN
  > > MONTH_5 = MONTH_5 + nTotalMonth;
  > > ELSE IF (I = 6) THEN
  > > MONTH_6 = MONTH_6 + nTotalMonth;
  > > ELSE IF (I = 7) THEN
  > > MONTH_7 = MONTH_7 + nTotalMonth;
  > > ELSE IF (I = 8) THEN
  > > MONTH_8 = MONTH_8 + nTotalMonth;
  > > ELSE IF (I = 9) THEN
  > > MONTH_9 = MONTH_9 + nTotalMonth;
  > > ELSE IF (I = 10) THEN
  > > MONTH_10 = MONTH_10 + nTotalMonth;
  > > ELSE IF (I = 11) THEN
  > > MONTH_11 = MONTH_11 + nTotalMonth;
  > > ELSE IF (I = 12) THEN
  > > MONTH_12 = MONTH_12 + nTotalMonth;
  > > ELSE IF (I = 13) THEN
  > > MONTH_13 = MONTH_13 + nTotalMonth;
  > > ELSE IF (I = 14) THEN
  > > MONTH_14 = MONTH_14 + nTotalMonth;
  > > ELSE IF (I = 15) THEN
  > > MONTH_15 = MONTH_15 + nTotalMonth;
  > > ELSE IF (I = 16) THEN
  > > MONTH_16 = MONTH_16 + nTotalMonth;
  > > ELSE IF (I = 17) THEN
  > > MONTH_17 = MONTH_17 + nTotalMonth;
  > > ELSE IF (I = 18) THEN
  > > MONTH_18 = MONTH_18 + nTotalMonth;
  > > ELSE IF (I = 19) THEN
  > > MONTH_19 = MONTH_19 + nTotalMonth;
  > > ELSE IF (I = 20) THEN
  > > MONTH_20 = MONTH_20 + nTotalMonth;
  > > ELSE IF (I = 21) THEN
  > > MONTH_21 = MONTH_21 + nTotalMonth;
  > > ELSE IF (I = 22) THEN
  > > MONTH_22 = MONTH_22 + nTotalMonth;
  > > ELSE IF (I = 23) THEN
  > > MONTH_23 = MONTH_23 + nTotalMonth;
  > > ELSE IF (I = 24) THEN
  > > MONTH_24 = MONTH_24 + nTotalMonth;
  > > ELSE IF (I = 25) THEN
  > > MONTH_25 = MONTH_25 + nTotalMonth;
  > > ELSE IF (I = 26) THEN
  > > MONTH_26 = MONTH_26 + nTotalMonth;
  > > ELSE IF (I = 27) THEN
  > > MONTH_27 = MONTH_27 + nTotalMonth;
  > > ELSE IF (I = 28) THEN
  > > MONTH_28 = MONTH_28 + nTotalMonth;
  > > ELSE IF (I = 29) THEN
  > > MONTH_29 = MONTH_29 + nTotalMonth;
  > > ELSE IF (I = 30) THEN
  > > MONTH_30 = MONTH_30 + nTotalMonth;
  > > ELSE IF (I = 31) THEN
  > > MONTH_31 = MONTH_31 + nTotalMonth;
  > > ELSE IF (I = 32) THEN
  > > MONTH_32 = MONTH_32 + nTotalMonth;
  > > ELSE IF (I = 33) THEN
  > > MONTH_33 = MONTH_33 + nTotalMonth;
  > > ELSE IF (I = 34) THEN
  > > MONTH_34 = MONTH_34 + nTotalMonth;
  > > ELSE IF (I = 35) THEN
  > > MONTH_35 = MONTH_35 + nTotalMonth;
  > > ELSE IF (I = 36) THEN
  > > MONTH_36 = MONTH_36 + nTotalMonth;
  > > ELSE IF (I = 37) THEN
  > > MONTH_37 = MONTH_37 + nTotalMonth;
  > > ELSE IF (I = 38) THEN
  > > MONTH_38 = MONTH_38 + nTotalMonth;
  > > ELSE IF (I = 39) THEN
  > > MONTH_39 = MONTH_39 + nTotalMonth;
  > > ELSE IF (I = 40) THEN
  > > MONTH_40 = MONTH_40 + nTotalMonth;
  > > ELSE IF (I = 41) THEN
  > > MONTH_41 = MONTH_41 + nTotalMonth;
  > > ELSE IF (I = 42) THEN
  > > MONTH_42 = MONTH_42 + nTotalMonth;
  > > ELSE IF (I = 43) THEN
  > > MONTH_43 = MONTH_43 + nTotalMonth;
  > > ELSE IF (I = 44) THEN
  > > MONTH_44 = MONTH_44 + nTotalMonth;
  > > ELSE IF (I = 45) THEN
  > > MONTH_45 = MONTH_45 + nTotalMonth;
  > > ELSE IF (I = 46) THEN
  > > MONTH_46 = MONTH_46 + nTotalMonth;
  > > ELSE IF (I = 47) THEN
  > > MONTH_47 = MONTH_47 + nTotalMonth;
  > > ELSE IF (I = 48) THEN
  > > MONTH_48 = MONTH_48 + nTotalMonth;
  > > ELSE IF (I = 49) THEN
  > > MONTH_49 = MONTH_49 + nTotalMonth;
  > > ELSE IF (I = 50) THEN
  > > MONTH_50 = MONTH_50 + nTotalMonth;
  > > ELSE IF (I = 51) THEN
  > > MONTH_51 = MONTH_51 + nTotalMonth;
  > > ELSE IF (I = 52) THEN
  > > MONTH_52 = MONTH_52 + nTotalMonth;
  > > ELSE IF (I = 53) THEN
  > > MONTH_53 = MONTH_53 + nTotalMonth;
  > > ELSE IF (I = 54) THEN
  > > MONTH_54 = MONTH_54 + nTotalMonth;
  > > ELSE IF (I = 55) THEN
  > > MONTH_55 = MONTH_55 + nTotalMonth;
  > > ELSE IF (I = 56) THEN
  > > MONTH_56 = MONTH_56 + nTotalMonth;
  > > ELSE IF (I = 57) THEN
  > > MONTH_57 = MONTH_57 + nTotalMonth;
  > > ELSE IF (I = 58) THEN
  > > MONTH_58 = MONTH_58 + nTotalMonth;
  > > ELSE IF (I = 59) THEN
  > > MONTH_59 = MONTH_59 + nTotalMonth;
  > > ELSE IF (I = 60) THEN
  > > MONTH_60 = MONTH_60 + nTotalMonth;
  > > ELSE IF (I = 61) THEN
  > > MONTH_61 = MONTH_61 + nTotalMonth;
  > > ELSE IF (I = 62) THEN
  > > MONTH_62 = MONTH_62 + nTotalMonth;
  > > ELSE IF (I = 63) THEN
  > > MONTH_63 = MONTH_63 + nTotalMonth;
  > > ELSE IF (I = 64) THEN
  > > MONTH_64 = MONTH_64 + nTotalMonth;
  > > ELSE IF (I = 65) THEN
  > > MONTH_65 = MONTH_65 + nTotalMonth;
  > > ELSE IF (I = 65) THEN
  > > MONTH_66 = MONTH_66 + nTotalMonth;
  > > ELSE IF (I = 67) THEN
  > > MONTH_67 = MONTH_67 + nTotalMonth;
  > > ELSE IF (I = 68) THEN
  > > MONTH_68 = MONTH_68 + nTotalMonth;
  > > ELSE IF (I = 69) THEN
  > > MONTH_69 = MONTH_69 + nTotalMonth;
  > > ELSE IF (I = 70) THEN
  > > MONTH_70 = MONTH_70 + nTotalMonth;
  > > ELSE IF (I = 71) THEN
  > > MONTH_71 = MONTH_71 + nTotalMonth;
  > > ELSE IF (I = 72) THEN
  > > MONTH_72 = MONTH_72 + nTotalMonth;
  > > ELSE IF (I = 73) THEN
  > > MONTH_73 = MONTH_73 + nTotalMonth;
  > > ELSE IF (I = 74) THEN
  > > MONTH_74 = MONTH_74 + nTotalMonth;
  > > ELSE IF (I = 75) THEN
  > > MONTH_75 = MONTH_75 + nTotalMonth;
  > > ELSE IF (I = 76) THEN
  > > MONTH_76 = MONTH_76 + nTotalMonth;
  > > ELSE IF (I = 77) THEN
  > > MONTH_77 = MONTH_77 + nTotalMonth;
  > > ELSE IF (I = 78) THEN
  > > MONTH_78 = MONTH_78 + nTotalMonth;
  > > ELSE IF (I = 79) THEN
  > > MONTH_79 = MONTH_79 + nTotalMonth;
  > > ELSE IF (I = 80) THEN
  > > MONTH_80 = MONTH_80 + nTotalMonth;
  > > ELSE IF (I = 81) THEN
  > > MONTH_81 = MONTH_81 + nTotalMonth;
  > > ELSE IF (I = 82) THEN
  > > MONTH_82 = MONTH_82 + nTotalMonth;
  > > ELSE IF (I = 83) THEN
  > > MONTH_83 = MONTH_83 + nTotalMonth;
  > > ELSE IF (I = 84) THEN
  > > MONTH_84 = MONTH_84 + nTotalMonth;
  > > ELSE IF (I = 85) THEN
  > > MONTH_85 = MONTH_85 + nTotalMonth;
  > > ELSE IF (I = 86) THEN
  > > MONTH_86 = MONTH_86 + nTotalMonth;
  > > ELSE IF (I = 87) THEN
  > > MONTH_87 = MONTH_87 + nTotalMonth;
  > > ELSE IF (I = 88) THEN
  > > MONTH_88 = MONTH_88 + nTotalMonth;
  > > ELSE IF (I = 89) THEN
  > > MONTH_89 = MONTH_89 + nTotalMonth;
  > > ELSE IF (I = 90) THEN
  > > MONTH_90 = MONTH_90 + nTotalMonth;
  > > ELSE IF (I = 91) THEN
  > > MONTH_91 = MONTH_91 + nTotalMonth;
  > > ELSE IF (I = 92) THEN
  > > MONTH_92 = MONTH_92 + nTotalMonth;
  > > ELSE IF (I = 93) THEN
  > > MONTH_93 = MONTH_93 + nTotalMonth;
  > > ELSE IF (I = 94) THEN
  > > MONTH_94 = MONTH_94 + nTotalMonth;
  > > ELSE IF (I = 95) THEN
  > > MONTH_95 = MONTH_95 + nTotalMonth;
  > > ELSE IF (I = 96) THEN
  > > MONTH_96 = MONTH_96 + nTotalMonth;
  > > ELSE IF (I = 97) THEN
  > > MONTH_97 = MONTH_97 + nTotalMonth;
  > > ELSE IF (I = 98) THEN
  > > MONTH_98 = MONTH_98 + nTotalMonth;
  > > ELSE IF (I = 99) THEN
  > > MONTH_99 = MONTH_99 + nTotalMonth;
  > > ELSE IF (I = 100) THEN
  > > MONTH_100 = MONTH_100 + nTotalMonth;
  > > ELSE IF (I = 101) THEN
  > > MONTH_101 = MONTH_101 + nTotalMonth;
  > > ELSE IF (I = 102) THEN
  > > MONTH_102 = MONTH_102 + nTotalMonth;
  > > ELSE IF (I = 103) THEN
  > > MONTH_103 = MONTH_103 + nTotalMonth;
  > > ELSE IF (I = 104) THEN
  > > MONTH_104 = MONTH_104 + nTotalMonth;
  > > ELSE IF (I = 105) THEN
  > > MONTH_105 = MONTH_105 + nTotalMonth;
  > > ELSE IF (I = 106) THEN
  > > MONTH_106 = MONTH_106 + nTotalMonth;
  > > ELSE IF (I = 107) THEN
  > > MONTH_107 = MONTH_107 + nTotalMonth;
  > > ELSE IF (I = 108) THEN
  > > MONTH_108 = MONTH_108 + nTotalMonth;
  > > ELSE IF (I = 109) THEN
  > > MONTH_109 = MONTH_109 + nTotalMonth;
  > > ELSE IF (I = 110) THEN
  > > MONTH_110 = MONTH_110 + nTotalMonth;
  > > ELSE IF (I = 111) THEN
  > > MONTH_111 = MONTH_111 + nTotalMonth;
  > > ELSE IF (I = 112) THEN
  > > MONTH_112 = MONTH_112 + nTotalMonth;
  > > ELSE IF (I = 113) THEN
  > > MONTH_113 = MONTH_113 + nTotalMonth;
  > > ELSE IF (I = 114) THEN
  > > MONTH_114 = MONTH_114 + nTotalMonth;
  > > ELSE IF (I = 115) THEN
  > > MONTH_115 = MONTH_115 + nTotalMonth;
  > > ELSE IF (I = 116) THEN
  > > MONTH_116 = MONTH_116 + nTotalMonth;
  > > ELSE IF (I = 117) THEN
  > > MONTH_117 = MONTH_117 + nTotalMonth;
  > > ELSE IF (I = 118) THEN
  > > MONTH_118 = MONTH_118 + nTotalMonth;
  > > ELSE IF (I = 119) THEN
  > > MONTH_119 = MONTH_119 + nTotalMonth;
  > > ELSE IF (I = 120) THEN
  > > MONTH_120 = MONTH_120 + nTotalMonth;
  > > END
  > > 
  > > I = I + 1;
  > > ...
  > > 
  > > Thanks to all that can lend any insight,
  > > Mike
  > > 
  > > 
  > > [Non-text portions of this message have been removed]
  > >
  > 
  > 
  > 
  > 
  > 
  > [Non-text portions of this message have been removed]
  >



  

[Non-text portions of this message have been removed]

Reply via email to