home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / rks_dd / _SETUP.1 / psql_form.pas < prev    next >
Pascal/Delphi Source File  |  1998-02-01  |  6KB  |  266 lines

  1. unit psql_form;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, Buttons, ExtCtrls, Menus, DB, DBTables,
  8.   ComCtrls, inifiles,shlobj,ole2;
  9.   (* ole2.pas je v  \Borland\Delphi 3\Source\RTL\WIN\ole2.pas  *)
  10.  
  11. const
  12.   inifilename = 'simpler.ini';
  13.  
  14. type
  15.  
  16.   TBrowseFolderDialog = class(TObject)
  17.   private
  18.     bi:tbrowseinfo;
  19.     str:array[0..max_path] of char;
  20.     pIDListItem:PItemIdList;
  21.     pstr:pchar;
  22.     function gettitle:string;
  23.     function getpath:string;
  24.   public
  25.      function execute:boolean;
  26.   published
  27.     property path: string read getpath;
  28.   end;
  29.  
  30.  
  31.  
  32.   Tf_psql = class(TForm)
  33.     MainMenu1: TMainMenu;
  34.     File1: TMenuItem;
  35.     Edit1: TMenuItem;
  36.     Exit1: TMenuItem;
  37.     LoadSQLscript1: TMenuItem;
  38.     Query1: TQuery;
  39.     OpenDialog1: TOpenDialog;
  40.     ClearOutput1: TMenuItem;
  41.     StatusBar1: TStatusBar;
  42.     Panel5: TPanel;
  43.     sb_load: TSpeedButton;
  44.     sb_close: TSpeedButton;
  45.     sb_run: TSpeedButton;
  46.     Run1: TMenuItem;
  47.     N1: TMenuItem;
  48.     sb_selectfolder: TSpeedButton;
  49.     Label1: TLabel;
  50.     Panel1: TPanel;
  51.     Panel2: TPanel;
  52.     Panel3: TPanel;
  53.     Memo1: TMemo;
  54.     Memo2: TMemo;
  55.     Splitter1: TSplitter;
  56.     procedure Exit1Click(Sender: TObject);
  57.     procedure LoadSQLscript1Click(Sender: TObject);
  58.     procedure ClearOutput1Click(Sender: TObject);
  59.     procedure sb_runClick(Sender: TObject);
  60.     procedure sb_closeClick(Sender: TObject);
  61.     procedure sb_selectfolderClick(Sender: TObject);
  62.     procedure Run1Click(Sender: TObject);
  63.     procedure FormCreate(Sender: TObject);
  64.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  65.     procedure FormDestroy(Sender: TObject);
  66.   private
  67.     errorcount:integer;
  68.     browsefolderdialog1:tbrowsefolderdialog;
  69.   public
  70.     procedure run;
  71.     procedure runsql(sl:tstringlist);
  72.   end;
  73.  
  74. var
  75.   f_psql: Tf_psql;
  76.  
  77. implementation
  78.  
  79. {$R *.DFM}
  80.  
  81. function charexist(ch:char;s:string):integer;
  82. var i:integer;
  83.     ch2:char;
  84. begin
  85. result := 0;
  86. for i := length(s) downto 1 do
  87.    begin
  88.    ch2 := s[i];
  89.    IF ch2 = ch then
  90.       begin
  91.       result := i;
  92.       exit;
  93.       end;
  94.    end;
  95. end;
  96.  
  97.  
  98. function TBrowseFolderDialog.gettitle:string;
  99. begin
  100. result := bi.lpszTitle;
  101. end;
  102.  
  103.  
  104. function tbrowsefolderdialog.getpath:string;
  105. begin
  106. result := pstr;
  107. end;
  108.  
  109.  
  110. function tbrowsefolderdialog.execute:boolean;
  111. begin
  112. bi.hwndOwner := getactivewindow;
  113. bi.pidlroot := nil;
  114. bi.pszdisplayname := @str;
  115. bi.ulflags := BIF_returnonlyfsdirs;
  116. bi.lpfn := nil;
  117. pIDListItem := SHBrowseforfolder(bi);
  118. IF pIDListItem <> nil then
  119.    begin
  120.    pstr := @str;
  121.    SHGEtPathFromIdLIst(pidlistitem,pstr);
  122.    CoTaskMemFree(piDListItem);
  123.    result := true;
  124.    end
  125.   else
  126.    result := false;
  127. end;
  128.  
  129.  
  130.  
  131.  
  132. procedure Tf_psql.run;
  133. var sl:tstringlist;
  134.     i:integer;
  135.     s:string;
  136.     pozice:integer;
  137. begin
  138. query1.databasename := label1.caption;
  139. errorcount := 0;
  140. sl := tstringlist.create;
  141.   try
  142.   for i := 0 to memo1.lines.count-1 do
  143.      begin
  144.      s := memo1.lines.strings[i];
  145.      pozice := charexist(';',s);
  146.      IF pozice = 0 then
  147.        begin
  148.        IF trim(s) <>'' then sl.add(s);
  149.        end
  150.       else
  151.        begin
  152.        s := copy(s,0,pozice-1);
  153.        if trim(s) <> '' then sl.add(s);
  154.        runsql(sl);
  155.        sl.clear;
  156.        end;
  157.      end;
  158.   runsql(sl);
  159.   IF errorcount > 0 then
  160.      begin
  161.      memo2.lines.add(format('pocet chyb %d',[errorcount]));
  162.      MessageDlg(format('Ve scriptu bylo %d chyb',[errorcount]),mtWarning,[mbCancel],0);
  163.      end
  164.     else
  165.      begin
  166.      MessageDlg('Script probehl bez chyb',mtInformation,[mbOK],0);
  167.      end;
  168.   finally
  169.   sl.free;
  170.   end;
  171. end;
  172.  
  173.  
  174. procedure Tf_psql.runsql(sl:tstringlist);
  175. begin
  176. IF sl.count > 0 then
  177.    begin
  178.    memo2.lines.addstrings(sl);
  179.    memo2.lines.add('');
  180.    query1.sql.clear;
  181.    query1.sql.assign(sl);
  182.      try
  183.      query1.execsql;;
  184.      except
  185.        on e:edbengineerror do
  186.         begin
  187.         memo2.lines.add(format('ERROR: %s',[e.message]));
  188.         inc(errorcount);
  189.         end;
  190.      end;
  191.    end;
  192. end;
  193.  
  194. procedure Tf_psql.Exit1Click(Sender: TObject);
  195. begin
  196. close;
  197. end;
  198.  
  199.  
  200. procedure Tf_psql.LoadSQLscript1Click(Sender: TObject);
  201. begin
  202. IF opendialog1.execute then
  203.    begin
  204.    memo1.lines.clear;
  205.    memo1.lines.loadfromfile(opendialog1.filename);
  206.    end;
  207. end;
  208.  
  209. procedure Tf_psql.ClearOutput1Click(Sender: TObject);
  210. begin
  211. memo2.lines.clear;
  212. end;
  213.  
  214. procedure Tf_psql.sb_runClick(Sender: TObject);
  215. begin
  216. run;
  217. end;
  218.  
  219. procedure Tf_psql.sb_closeClick(Sender: TObject);
  220. begin
  221. close;
  222. end;
  223.  
  224. procedure Tf_psql.sb_selectfolderClick(Sender: TObject);
  225. begin
  226. IF browsefolderdialog1.execute then
  227.    begin
  228.    label1.caption := browsefolderdialog1.path;
  229.    end;
  230. end;
  231.  
  232. procedure Tf_psql.Run1Click(Sender: TObject);
  233. begin
  234. run;
  235. end;
  236.  
  237. procedure Tf_psql.FormCreate(Sender: TObject);
  238. var ini:tinifile;
  239. begin
  240. browsefolderdialog1 := tbrowsefolderdialog.create;
  241. ini := tinifile.create(inifilename);
  242.   try
  243.   label1.caption := ini.readstring('pisql','directory','');
  244.   finally
  245.   ini.free;
  246.   end;
  247. end;
  248.  
  249. procedure Tf_psql.FormClose(Sender: TObject; var Action: TCloseAction);
  250. var ini:tinifile;
  251. begin
  252. ini := tinifile.create(inifilename);
  253.   try
  254.   ini.writestring('pisql','directory',label1.caption);
  255.   finally
  256.   ini.free;
  257.   end;
  258. end;
  259.  
  260. procedure Tf_psql.FormDestroy(Sender: TObject);
  261. begin
  262. browsefolderdialog1.free;
  263. end;
  264.  
  265. end.
  266.