Ir al contenido


Foto

Ayuda para modificar un componente


  • Por favor identifícate para responder
No hay respuestas en este tema

#1 red_dragon

red_dragon

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 20 abril 2013 - 10:15

Bueno el componente en cuestion es ArtFormula, lo encuentran en http://artsoft.nm.ru...ks.html#formula sirve como evaluador de expresiones en tiempo de ejecucion, descargado de la pagina no tiene soporte para llamar datos de una tabla o base de datos, sin embargo el autor de este componente proporciona codigo para que esta funcionalidad se incluya en el componente, lo malo es que intente agregar a los archivos pas que viene con el componente y no le encuentro solucion. El codigo adicional en cuestion es este:

El autor dice que hay que crear un nuevo modulo para acceder a los datos de Firebird. Por ejem para un tsqltable seria asi.



delphi
  1. FBTables : array of TSQLTable;
  2.  
  3. function mytable(var Calc : TFormulaCalc):TCalcItem;
  4. begin
  5. setN(result,trunc(Calc.topn));
  6. end;
  7.  
  8. function mytableopen(var Calc : TFormulaCalc):TCalcItem;
  9. var i,p : integer;
  10. begin
  11. p := -1;
  12. for i := 0 to high(FBTables) do
  13. begin
  14.   if FBTables[i] = nil then
  15.   begin
  16.   p := i;
  17.   break;
  18.   end;
  19. end;
  20. if p = -1 then
  21. begin
  22.   p := high(FBTables)+1;
  23.   setlength(FBTables,p+1);
  24. end;
  25. FBTables[p] := TSQLTable.Create(Self);
  26. < ... initialization of FBTables[p] ... >
  27. setN(result,p);
  28. end;
  29.  
  30.  
  31. function mytableclose(var Calc : TFormulaCalc):TCalcItem;
  32. var current:integer;
  33. begin
  34. current := trunc(Calc.TopN);
  35. FBTables[current].close;
  36. Freeandnil(Files[current]);
  37. setN(result,0);
  38. end;
  39.  
  40. function mytablenext(var Calc : TFormulaCalc):TCalcItem;
  41. var current:integer;
  42. begin
  43. current := trunc(Calc.TopN);
  44. FBTables[current].next;
  45. if FBTables[current].eof then setN(result,0)
  46. else setN(result,1);
  47. end;
  48.  
  49. function mytablefield(var Calc : TFormulaCalc):TCalcItem;
  50. var current:integer;
  51. begin
  52. current := trunc(Calc.ItemN(1));
  53. SetS(result,FBTables[current].fieldbyname(Calc.topS).asstring);
  54. end;
  55.  
  56.  
  57.  
  58. module := Formula.AddUserFunction('table',1,mytable,true);
  59. Formula.AddModuleFunction(module,'open',1,mytableopen);
  60. Formula.AddModuleFunction(module,'close',0,mytableclose);
  61. Formula.AddModuleFunction(module,'next',0,mytablenext);
  62. Formula.AddModuleFunction(module,'field',1,mytablefield);



Despues.



delphi
  1. $mytable := table.open('table_name');
  2. $n := 1;
  3. while $n=1 do
  4. if table($mytable).field('field')="AFECTED" then B3=50 else B3=0 endd;
  5. $n := table($mytable).next;
  6. wend;
  7.  
  8. table($mytable).close;



Alguna idea de como deben ir y en que archivos para que la funcionalidad de sacar datos de Tsqltable o Tsqlquery se adicione con estos codigos a ese componente, desde ya gracias por vuestra respuesta.
  • 0




IP.Board spam blocked by CleanTalk.