Browse Source

* fixes for > 100 query parameters. Mantis #19645, patch from Lacak2

git-svn-id: trunk@19215 -
marco 14 years ago
parent
commit
5e91099731
1 changed files with 11 additions and 9 deletions
  1. 11 9
      packages/fcl-db/src/base/dsparams.inc

+ 11 - 9
packages/fcl-db/src/base/dsparams.inc

@@ -356,10 +356,11 @@ begin
               end;
             if ParameterStyle in [psPostgreSQL,psSimulated] then
               begin
-              if ParameterIndex > 8 then
-                inc(NewQueryLength,2)
-              else
-                inc(NewQueryLength,1)
+              i:=ParameterIndex+1;
+              repeat
+                inc(NewQueryLength);
+                i:=i div 10;
+              until i=0;
               end;
 
             // store ParameterIndex in FParamIndex, ParamPart data
@@ -396,7 +397,10 @@ begin
       Move(SQL[BufIndex],NewQuery[NewQueryIndex],CopyLen);
       Inc(NewQueryIndex,CopyLen);
       case ParameterStyle of
-        psInterbase : NewQuery[NewQueryIndex]:='?';
+        psInterbase : begin
+                        NewQuery[NewQueryIndex]:='?';
+                        Inc(NewQueryIndex);
+                      end;
         psPostgreSQL,
         psSimulated : begin
                         ParamName := IntToStr(ParamBinding[i]+1);
@@ -405,15 +409,13 @@ begin
                           NewQuery[NewQueryIndex]:='$';
                           Inc(NewQueryIndex);
                           end;
-                        NewQuery[NewQueryIndex]:= paramname[1];
-                        if length(paramname)>1 then
+                        for b := 1 to length(ParamName) do
                           begin
+                          NewQuery[NewQueryIndex]:=ParamName[b];
                           Inc(NewQueryIndex);
-                          NewQuery[NewQueryIndex]:= paramname[2]
                           end;
                       end;
       end;
-      Inc(NewQueryIndex);
       BufIndex:=ParamPart[i].Stop;
     end;
     CopyLen:=Length(SQL)+1-BufIndex;