home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / zkuste / delphi / nastroje / d23456 / SPLBASE.ZIP / Splbase / Class / Spl2Unit1.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-06-16  |  12.9 KB  |  512 lines

  1. unit Spl2Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, spl;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     GroupBox1: TGroupBox;
  12.     Edit1: TEdit;
  13.     GroupBox2: TGroupBox;
  14.     Edit2: TEdit;
  15.     Button1: TButton;
  16.     Button2: TButton;
  17.     Button3: TButton;
  18.     Button4: TButton;
  19.     Button5: TButton;
  20.     Button6: TButton;
  21.     Button7: TButton;
  22.     Button8: TButton;
  23.     Button9: TButton;
  24.     Button10: TButton;
  25.     Button11: TButton;
  26.     Memo1: TMemo;
  27.     spl1: Tspl;
  28.     procedure Button9Click(Sender: TObject);
  29.     procedure Button10Click(Sender: TObject);
  30.     procedure FormCreate(Sender: TObject);
  31.     procedure Button6Click(Sender: TObject);
  32.     procedure Button7Click(Sender: TObject);
  33.     procedure Button8Click(Sender: TObject);
  34.     procedure Button5Click(Sender: TObject);
  35.     procedure Button1Click(Sender: TObject);
  36.     procedure Button4Click(Sender: TObject);
  37.     procedure Button2Click(Sender: TObject);
  38.     procedure Button3Click(Sender: TObject);
  39.     procedure Button11Click(Sender: TObject);
  40.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  41.   private
  42.     { Private declarations }
  43.   public
  44.     { Public declarations }
  45.   end;
  46.  
  47. var
  48.   Form1: TForm1;
  49.   dogen: boolean {Starts and stops automatic data generation};
  50.  
  51. implementation
  52.  
  53. {$R *.DFM}
  54.  
  55.  
  56. function spellnum ( num : string ) : string;
  57. {This procedure converts a string digits into its English
  58.  string equivalent. The number must be a value less than 10
  59.  billion converted into a string of length 10 and filled
  60.  left with zeroes if necessary}
  61. var
  62.    x : integer;
  63.    s, s1 : string;
  64.    ar : array [0..32] of string[10];
  65.    p, p3, cnt, ck : integer;
  66. begin
  67.    p := 32;
  68.    p3 := 1;
  69.    s := '';
  70.    if strtointdef ( num, -1 ) < 0 then
  71.       num := '';
  72.    if num <> '' then
  73.    begin
  74.       ar[0] := 'zero';
  75.       ar[1] := 'one';
  76.       ar[2] := 'two';
  77.       ar[3] := 'three';
  78.       ar[4] := 'four';
  79.       ar[5] := 'five';
  80.       ar[6] := 'six';
  81.       ar[7] := 'seven';
  82.       ar[8] := 'eight';
  83.       ar[9] := 'nine';
  84.       ar[10] := 'ten';
  85.       ar[11] := 'eleven';
  86.       ar[12] := 'twelve';
  87.       ar[13] := 'thirteen';
  88.       ar[14] := 'fourteen';
  89.       ar[15] := 'fifteen';
  90.       ar[16] := 'sixteen';
  91.       ar[17] := 'seventeen';
  92.       ar[18] := 'eighteen';
  93.       ar[19] := 'nineteen';
  94.       ar[20] := 'twenty';
  95.       ar[21] := 'thirty';
  96.       ar[22] := 'fourty';
  97.       ar[23] := 'fifty';
  98.       ar[24] := 'sixty';
  99.       ar[25] := 'seventy';
  100.       ar[26] := 'eighty';
  101.       ar[27] := 'ninety';
  102.       ar[28] := 'hundred';
  103.       ar[29] := '';
  104.       ar[30] := 'thousand';
  105.       ar[31] := 'million';
  106.       ar[32] := 'billion';
  107.       if num [1] <> '0' then
  108.       begin
  109.          x := strtoint ( num[1] );
  110.          s := s + ar [x] + ' ' + ar [p] + ' ';
  111.       end;
  112.    end
  113.    else
  114.       s := '';
  115.    p := p - 1;
  116.    cnt := 2;
  117.    ck := 0;
  118.  
  119.    while cnt <= length ( num ) do
  120.    begin
  121.       if num[cnt] <> '0' then
  122.       begin
  123.          if p3 = 1 then
  124.          begin
  125.             x := strtoint ( num[cnt] );
  126.             s := s + ar [x] + ' hundred ';
  127.             cnt := cnt + 1;
  128.             p3 := p3 + 1;
  129.             ck := 2;
  130.          end
  131.          else if p3 = 2 then
  132.          begin
  133.             if num[cnt] = '1' then
  134.             begin
  135.                s1 := num[cnt] + num [cnt + 1];
  136.                x := strtoint ( s1 );
  137.                s := s + ar [x] + ' ';
  138.                p3 := p3 + 1;
  139.                cnt := cnt + 1;
  140.                ck := 1;
  141.             end
  142.             else
  143.             begin
  144.                s1 := num[cnt];
  145.                x := strtoint ( s1 );
  146.                s := s + ar [x + 18] + ' ';
  147.                p3 := p3 + 1;
  148.                cnt := cnt + 1;
  149.                if num[cnt] = '0' then
  150.                   ck := 1
  151.                else
  152.                   ck := 3;
  153.             end
  154.          end
  155.          else
  156.          begin
  157.             if ck <> 1 then
  158.             begin
  159.                x := strtoint ( num[cnt] );
  160.                s := s + ar [x] + ' ';
  161.                ck := 2;
  162.             end;
  163.             if ck > 0 then
  164.                s := s + ar [p] + ' ';
  165.             cnt := cnt + 1;
  166.             ck := 0;
  167.             p := p - 1;
  168.             p3 := 1;
  169.          end
  170.       end
  171.       else
  172.       begin
  173.          if p3 = 3 then
  174.          begin
  175.             if ck <> 1 then
  176.             begin
  177.                x := strtoint ( num[cnt] );
  178.                if ( x > 0 ) or ( ( s = '' ) and
  179.                                  ( cnt = 10 ) ) then
  180.                begin
  181.                   s := s + ar [x] + ' ';
  182.                   ck := 2;
  183.                end
  184.             end;
  185.             if ck > 0 then
  186.                s := s + ar [p] + ' ';
  187.             cnt := cnt + 1;
  188.             ck := 0;
  189.             p := p - 1;
  190.             p3 := 1;
  191.          end
  192.          else
  193.          begin
  194.             cnt := cnt + 1;
  195.             p3 := p3 + 1;
  196.          end;
  197.       end;
  198.    end;
  199.    spellnum := s;
  200. end;
  201.  
  202. procedure TForm1.Button9Click(Sender: TObject);
  203. begin
  204.    close
  205. end;
  206.  
  207. procedure TForm1.Button10Click(Sender: TObject);
  208. {Automatically inputs 1 million even numbers from 2 to
  209.  2000000 into the database from different angles to also
  210.  test its strength. Process can be terminated by clicking
  211.  the "stop" button.}
  212. var
  213.    x : integer;
  214.    ll : array [1..4] of longint;
  215.    cnt : longint;
  216.    s1, s2 : string;
  217. begin
  218.    if not ( spl1.activedb ) then
  219.    begin
  220.       showmessage ('No active database.');
  221.       dogen := true;
  222.    end;
  223.    if dogen then
  224.    begin
  225.       button10.Caption := '&Generate';
  226.       dogen := false;
  227.    end
  228.    else
  229.    begin
  230.       dogen := true;
  231.       button10.Caption := '&Stop';
  232.       ll[1] := 500000;
  233.       ll[2] := 500002;
  234.       ll[3] := 1500000;
  235.       ll[4] := 1500002;
  236.       x := 1;
  237.       cnt := 0;
  238.       s1 := timetostr ( time );
  239.       edit1.Text := s1;
  240.       repeat
  241.          s1 := inttostr ( ll[x] );
  242.          while length ( s1 ) < 10 do
  243.             s1 := '0' + s1;
  244.          setlength ( s1, 10 );
  245.          s2 := spellnum ( s1 );
  246.          if s2 <> '' then
  247.          begin
  248.             edit2.Text := s1;
  249.             memo1.Text := s2;
  250.             if odd ( x ) then
  251.                ll[x] := ll[x] - 2
  252.             else
  253.                ll[x] := ll[x] + 2;
  254.  
  255.             if spl1.addfield ( s1, 1 ) then
  256.             begin
  257.                if spl1.addfield ( s2, 2 ) then
  258.                begin
  259.                   if not ( spl1.addrec ( s1 ) ) then
  260.                      showmessage ( inttostr ( Spl1.ErrorNumber ) + ' ' +
  261.                                    Spl1.ErrorString );
  262.                end
  263.                else
  264.                   showmessage ( inttostr ( Spl1.ErrorNumber ) + ' ' +
  265.                                 Spl1.ErrorString );
  266.             end
  267.             else
  268.                showmessage ( inttostr ( Spl1.ErrorNumber ) + ' ' +
  269.                              Spl1.ErrorString );
  270.  
  271.             x := x + 1;
  272.             if x = 5 then
  273.                x := 1;
  274.             cnt := cnt + 1;
  275.          end
  276.          else
  277.          begin
  278.             edit2.Text := 'Error generating number.';
  279.             memo1.Text := 'Illegal or non positive number.';
  280.             dogen := false
  281.          end;
  282.  
  283.          application.ProcessMessages;
  284.  
  285.       {until (topbox^.count = splmax) or (dogen = false);}
  286.       until (cnt >= 1000000) or (dogen = false);
  287.       edit1.Text := edit1.Text + ' - ' + timetostr ( time )
  288.                     + ' - ' + inttostr ( cnt ) + ' - ' +
  289.                     inttostr ( spl1.reccount );
  290.    end;
  291.  
  292. end;
  293.  
  294. procedure TForm1.FormCreate(Sender: TObject);
  295. begin
  296.    {spl1 := tspl.Create ( self );}
  297.    dogen := false;
  298.    {spl1.initbase;}
  299.    if spl1.initspl then
  300.    begin
  301.       spl1.initbase;
  302.       edit2.Text := 'Splitter database system initialized.'
  303.    end
  304.    else
  305.       edit2.text := 'Initialization failed.'
  306. end;
  307.  
  308. procedure TForm1.Button6Click(Sender: TObject);
  309. var
  310.    s : string;
  311. begin
  312.    spl1.initbase;
  313.    if spl1.setspl ('010140') then
  314.    begin
  315.       if spl1.createspl ('test') then
  316.          edit2.Text := 'Splitter Database created.'
  317.       else
  318.       begin
  319.          s := inttostr ( Spl1.ErrorNumber ) + ' ' +
  320.          Spl1.ErrorString;
  321.          edit2.Text := s;
  322.       end
  323.    end
  324.    else
  325.    begin
  326.       s := inttostr ( Spl1.ErrorNumber ) + ' ' +
  327.       Spl1.ErrorString;
  328.       edit2.Text := s;
  329.    end
  330. end;
  331.  
  332. procedure TForm1.Button7Click(Sender: TObject);
  333. var
  334.    s : string;
  335. begin
  336.    spl1.initbase;
  337.    if spl1.openspl ('test') then
  338.    begin
  339.       spl1.reclimit := spl1.reccount;
  340.       edit2.Text := 'Splitter Database opened.';
  341.       memo1.text := {spl1.currentdb + ' - ' +
  342.                     inttostr ( spl1.allrec.size ) + ' - ' +}
  343.                     inttostr ( spl1.Reclimit );
  344.    end
  345.    else
  346.    begin
  347.       s := inttostr ( Spl1.ErrorNumber ) + ' ' +
  348.       Spl1.ErrorString;
  349.       edit2.Text := s;
  350.    end
  351. end;
  352.  
  353. procedure TForm1.Button8Click(Sender: TObject);
  354. var
  355.    s1, s2 : string;
  356. begin
  357.    if spl1.activedb then
  358.    begin
  359.       s1 := edit1.Text;
  360.       while length ( s1 ) < 10 do
  361.          s1 := '0' + s1;
  362.       setlength ( s1, 10 );
  363.       s2 := spellnum ( s1 );
  364.       if s2 <> '' then
  365.       begin
  366.          edit2.Text := s1;
  367.          memo1.Text := s2;
  368.          if spl1.addfield ( s1, 1 ) then
  369.          begin
  370.             if spl1.addfield ( s2, 2 ) then
  371.             begin
  372.                if spl1.addrec ( s1 ) then
  373.                   showmessage ('Record sucessfuly inserted.')
  374.                else
  375.                   showmessage ( inttostr ( Spl1.ErrorNumber ) + ' ' +
  376.                                 Spl1.ErrorString );
  377.             end
  378.             else
  379.                showmessage ( inttostr ( Spl1.ErrorNumber ) + ' ' +
  380.                              Spl1.ErrorString );
  381.          end
  382.          else
  383.             showmessage ( inttostr ( Spl1.ErrorNumber ) + ' ' +
  384.                           Spl1.ErrorString );
  385.       end
  386.       else
  387.       begin
  388.          showmessage ('Illegal input. Not a positive number.');
  389.          edit2.Text := s1;
  390.          memo1.Text := 'Illegal value.';
  391.       end;
  392.    end
  393.    else
  394.       showmessage ('No active database.');
  395. end;
  396.  
  397. procedure TForm1.Button5Click(Sender: TObject);
  398. var
  399.    s : string;
  400. begin
  401.    if spl1.activedb then
  402.    begin
  403.       s := edit1.Text;
  404.       while length ( s ) < 10 do
  405.          s := '0' + s;
  406.       edit1.Text := s;
  407.       if spl1.getrec ( s ) then
  408.       begin
  409.          showmessage ('Record found.');
  410.          memo1.Text := 'Record found.';
  411.          edit2.text := spl1.getfield ( 1 );
  412.          memo1.Text := spl1.getfield ( 2 );
  413.       end
  414.       else
  415.       begin
  416.          showmessage ('Record not found.');
  417.          memo1.Text := inttostr ( Spl1.ErrorNumber ) + ' '
  418.                        + Spl1.ErrorString;
  419.       end
  420.    end
  421.    else
  422.       showmessage ('No active database.');
  423. end;
  424.  
  425. procedure TForm1.Button1Click(Sender: TObject);
  426. begin
  427.    if not (spl1.dbempty) then
  428.    begin
  429.       if spl1.firstrec then
  430.       begin
  431.          edit2.text := spl1.getfield ( 1 );
  432.          memo1.Text := spl1.getfield ( 2 );
  433.       end
  434.       else
  435.          memo1.Text := inttostr ( Spl1.ErrorNumber ) + ' '
  436.                        + Spl1.ErrorString;
  437.    end
  438.    else
  439.       showmessage ('Database empty or not loaded.')
  440. end;
  441.  
  442. procedure TForm1.Button4Click(Sender: TObject);
  443. begin
  444.    if not (spl1.dbempty) then
  445.    begin
  446.       if spl1.lastrec then
  447.       begin
  448.          edit2.text := spl1.getfield ( 1 );
  449.          memo1.Text := spl1.getfield ( 2 );
  450.       end
  451.       else
  452.          memo1.Text := inttostr ( Spl1.ErrorNumber ) + ' '
  453.                        + Spl1.ErrorString;
  454.    end
  455.    else
  456.       showmessage ('Database empty or not loaded.')
  457. end;
  458.  
  459. procedure TForm1.Button2Click(Sender: TObject);
  460. begin
  461.    if not (spl1.dbempty) then
  462.    begin
  463.       if spl1.nextrec then
  464.       begin
  465.          edit2.text := spl1.getfield ( 1 );
  466.          memo1.Text := spl1.getfield ( 2 );
  467.       end
  468.       else
  469.          memo1.Text := inttostr ( Spl1.ErrorNumber ) + ' '
  470.                        + Spl1.ErrorString;
  471.    end
  472.    else
  473.       showmessage ('Database empty or not loaded.')
  474. end;
  475.  
  476. procedure TForm1.Button3Click(Sender: TObject);
  477. begin
  478.    if not (spl1.dbempty) then
  479.    begin
  480.       if spl1.prevrec then
  481.       begin
  482.          edit2.text := spl1.getfield ( 1 );
  483.          memo1.Text := spl1.getfield ( 2 );
  484.       end
  485.       else
  486.          memo1.Text := inttostr ( Spl1.ErrorNumber ) + ' '
  487.                        + Spl1.ErrorString;
  488.    end
  489.    else
  490.       showmessage ('Database empty or not loaded.')
  491. end;
  492.  
  493. procedure TForm1.Button11Click(Sender: TObject);
  494. begin
  495.    if spl1.delrec then
  496.       showmessage ('Record properly deleted.')
  497.    else
  498.    memo1.Text := inttostr ( Spl1.ErrorNumber ) + ' '
  499.                  + Spl1.ErrorString;
  500.  
  501. end;
  502.  
  503. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  504. begin
  505.    if spl1.releasespl then
  506.       showmessage ('Splitter database system released.')
  507.    else
  508.       showmessage ('Error releasing Splitter database system.');
  509. end;
  510.  
  511. end.
  512.