home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / ib / setups / intrabld / data.z / MSSQLPUB.JFM < prev    next >
Text File  |  1996-11-13  |  18KB  |  592 lines

  1. /****************************************************************************\
  2. *                                                                            *
  3. * MSSqlPub.jfm  --  Sample MS SQL Server Form                                *
  4. *                                                                            *
  5. * MSSqlPub demonstrates the use of IntraBuilder with MS SQL Server data.     *
  6. * Before running this form, you need to have access to a MS SQL Server with  *
  7. * the sample database, pubs. You must use a user account that has write      *
  8. * access to the pubs database. When the form runs, you are asked to provide  *
  9. * a user name and password. If you want to automatically login to the server *
  10. * you can add a loginString value to the Database object in the class        *
  11. * definition below. It should look something like this:                      *
  12. *                                                                            *
  13. *     with (this.pubs1 = new Database()){                                    *
  14. *        left = 49;                                                          *
  15. *        top = 0;                                                            *
  16. *        databaseName = "PUBS";                                              *
  17. *        loginString = "username/password";                                  *
  18. *        active = true;                                                      *
  19. *     }                                                                      *
  20. *                                                                            *
  21. * For more information about setting up the Borland Database Engine to       *
  22. * a remote server database, see the Samples.txt file in this directory.      *
  23. *                                                                            *
  24. * Dependencies:  PUBS database on MS SQL Server                              *
  25. *                expinavh.gif                                                *
  26. *                expirowh.gif                                                *
  27. *                                                                            *
  28. * Updated 11/13/96 by IntraBuilder Samples Group                             *
  29. * $Revision:   1.6  $                                                        *
  30. *                                                                            *
  31. * Copyright (c) 1996, Borland International, Inc. All rights reserved.       *
  32. *                                                                            *
  33. \****************************************************************************/
  34. #include "intra.h"
  35. // {End Header} Do not remove this comment//
  36. // Generated on 11/13/96
  37. //
  38. var f = new mssqlpubForm();
  39. f.open();
  40. class mssqlpubForm extends Form {
  41.    with (this) {
  42.       preRender = class::form_preRender;
  43.       onServerLoad = class::form_onServerLoad;
  44.       height = 14;
  45.       left = 0;
  46.       top = 0;
  47.       width = 64;
  48.       title = "Publications from MS SQL Server";
  49.    }
  50.  
  51.  
  52.    with (this.pubs1 = new Database()){
  53.       left = 50;
  54.       top = 0;
  55.       databaseName = "PUBS";
  56.       active = true;
  57.    }
  58.  
  59.  
  60.    with (this.dbo_publishers = new Query()){
  61.       left = 56;
  62.       top = 2;
  63.       database = parent.pubs1;
  64.       sql = "SELECT * FROM dbo.publishers";
  65.       requestLive = false;
  66.  
  67.    }
  68.  
  69.  
  70.    with (this.dbo_publishers.rowset) {
  71.  
  72.    }
  73.  
  74.  
  75.    with (this.dbo_authorsAll = new Query()){
  76.       left = 56;
  77.       top = 1;
  78.       database = parent.pubs1;
  79.       sql = "SELECT * FROM dbo.authors";
  80.       requestLive = false;
  81.  
  82.    }
  83.  
  84.  
  85.    with (this.dbo_authorsAll.rowset) {
  86.  
  87.    }
  88.  
  89.  
  90.    with (this.dbo_titles = new Query()){
  91.       left = 56;
  92.       top = 0;
  93.       database = parent.pubs1;
  94.       sql = "SELECT * FROM dbo.titles";
  95.       active = true;
  96.    }
  97.  
  98.  
  99.    with (this.dbo_titles.rowset) {
  100.    }
  101.  
  102.  
  103.    with (this.dbo_titleauthor = new Query()){
  104.       left = 50;
  105.       top = 1;
  106.       database = parent.pubs1;
  107.       sql = "SELECT * FROM dbo.titleauthor where title_id = :title_id";
  108.       params["title_id"] = "";
  109.       masterSource = parent.dbo_titles.rowset;
  110.       active = true;
  111.       onOpen = class::titleAuthor_onOpen;
  112.    }
  113.  
  114.  
  115.    with (this.dbo_titleauthor.rowset) {
  116.  
  117.    }
  118.  
  119.  
  120.    with (this.dbo_authors = new Query()){
  121.       left = 50;
  122.       top = 2;
  123.       database = parent.pubs1;
  124.       sql = "SELECT * FROM dbo.authors where au_id = :au_id";
  125.       requestLive = false;
  126.       params["au_id"] = "";
  127.       masterSource = parent.dbo_titleauthor.rowset;
  128.       active = true;
  129.    }
  130.  
  131.  
  132.    with (this.dbo_authors.rowset) {
  133.  
  134.    }
  135.  
  136.  
  137.    with (this.image1 = new Image(this)){
  138.       onImageServerClick = {|nLeft, nTop|;if (nLeft >= 26*0 && nLeft < 26*1){form.rowset.first()}else if (nLeft >= 26*1 && nLeft < 26*2){if (!form.rowset.next(-1)) form.rowset.next();}else if (nLeft >= 26*2 && nLeft < 26*3){if (!form.rowset.next()) form.rowset.next(-1);}else{form.rowset.last()}};
  139.       height = 0.9583;
  140.       top = 1.5;
  141.       width = 13;
  142.       dataSource = "filename EXPINAVH.GIF";
  143.       alignment = 4;
  144.    }
  145.  
  146.  
  147.    with (this.image2 = new Image(this)){
  148.       onImageServerClick = class::image2_onImageServerClick;
  149.       height = 0.9583;
  150.       left = 16;
  151.       top = 1.5;
  152.       width = 22.75;
  153.       dataSource = "filename EXPIROWH.GIF";
  154.       alignment = 4;
  155.    }
  156.  
  157.  
  158.    with (this.html1 = new HTML(this)){
  159.       height = 1;
  160.       top = 3;
  161.       width = 10;
  162.       color = "black";
  163.       alignVertical = 1;
  164.       text = "Title id";
  165.    }
  166.  
  167.  
  168.    with (this.titleIDTest = new Text(this)){
  169.       left = 10;
  170.       top = 3;
  171.       width = 8;
  172.       dataLink = parent.dbo_titles.rowset.fields["title_id"];
  173.    }
  174.  
  175.  
  176.    with (this.html2 = new HTML(this)){
  177.       height = 1;
  178.       top = 4;
  179.       width = 10;
  180.       color = "black";
  181.       alignVertical = 1;
  182.       text = "Title";
  183.    }
  184.  
  185.  
  186.    with (this.titleText = new Text(this)){
  187.       left = 10;
  188.       top = 4;
  189.       width = 36;
  190.       dataLink = parent.dbo_titles.rowset.fields["title"];
  191.    }
  192.  
  193.  
  194.    with (this.html3 = new HTML(this)){
  195.       height = 1;
  196.       top = 5;
  197.       width = 10;
  198.       color = "black";
  199.       alignVertical = 1;
  200.       text = "Type";
  201.    }
  202.  
  203.  
  204.    with (this.html4 = new HTML(this)){
  205.       height = 1;
  206.       top = 6;
  207.       width = 10;
  208.       color = "black";
  209.       alignVertical = 1;
  210.       text = "Pub id";
  211.    }
  212.  
  213.  
  214.    with (this.html5 = new HTML(this)){
  215.       height = 1;
  216.       top = 7;
  217.       width = 10;
  218.       color = "black";
  219.       alignVertical = 1;
  220.       text = "Notes";
  221.    }
  222.  
  223.  
  224.    with (this.TITLE = new HTML(this)){
  225.       height = 1.5;
  226.       width = 60;
  227.       color = "black";
  228.       text = "<H1>Publication Titles</H1>";
  229.       pageno = 0;
  230.    }
  231.  
  232.  
  233.    with (this.notesTextArea = new TextArea(this)){
  234.       height = 4;
  235.       left = 10;
  236.       top = 7;
  237.       width = 48;
  238.       dataLink = parent.dbo_titles.rowset.fields["notes"];
  239.    }
  240.  
  241.  
  242.    with (this.pubIDSelect = new Select(this)){
  243.       onServerLoad = class::pubIDSelect_onServerLoad;
  244.       left = 10;
  245.       top = 6;
  246.       width = 15;
  247.       dataLink = parent.dbo_titles.rowset.fields["pub_id"];
  248.    }
  249.  
  250.  
  251.    with (this.authorHTML = new HTML(this)){
  252.       height = 1;
  253.       top = 11;
  254.       width = 10;
  255.       color = "black";
  256.       alignVertical = 1;
  257.       text = "Author(s)";
  258.    }
  259.  
  260.  
  261.    with (this.authorListBox = new ListBox(this)){
  262.       height = 4;
  263.       left = 10;
  264.       top = 11;
  265.       width = 28;
  266.    }
  267.  
  268.  
  269.    with (this.addButton = new Button(this)){
  270.       onServerClick = {;this.form.pageno = 2};
  271.       left = 44;
  272.       top = 11.5;
  273.       width = 15;
  274.       text = "Add Author";
  275.    }
  276.  
  277.  
  278.    with (this.deleteAuthorButton = new Button(this)){
  279.       onServerClick = class::deleteAuthorButton_onServerClick;
  280.       left = 44;
  281.       top = 13;
  282.       width = 15;
  283.       text = "Delete Author";
  284.    }
  285.  
  286.  
  287.    with (this.typeSelect = new Select(this)){
  288.       left = 10;
  289.       top = 5;
  290.       width = 22;
  291.       dataLink = parent.dbo_titles.rowset.fields["type"];
  292.       options = 'array {"business","mod_cook","popular_comp","psychology","trad_cook","UNDECIDED"}';
  293.    }
  294.  
  295.  
  296.    with (this.allAuthorsListBox = new ListBox(this)){
  297.       onServerLoad = class::allAuthorsListBox_onServerLoad;
  298.       height = 6;
  299.       left = 14;
  300.       top = 4;
  301.       width = 22;
  302.       pageno = 2;
  303.    }
  304.  
  305.  
  306.    with (this.html7 = new HTML(this)){
  307.       height = 1.2083;
  308.       top = 2;
  309.       width = 64;
  310.       color = "black";
  311.       text = "Available Authors";
  312.       pageno = 2;
  313.    }
  314.  
  315.  
  316.    with (this.addAuthorButton = new Button(this)){
  317.       onServerClick = class::addAuthorButton_onServerClick;
  318.       left = 2;
  319.       top = 4;
  320.       width = 10.5;
  321.       text = "Add";
  322.       pageno = 2;
  323.    }
  324.  
  325.  
  326.    with (this.abandonButton = new Button(this)){
  327.       onServerClick = {;this.form.pageno = 1};
  328.       left = 2;
  329.       top = 6;
  330.       width = 10;
  331.       text = "Abandon";
  332.       pageno = 2;
  333.    }
  334.  
  335.  
  336.    with (this.html8 = new HTML(this)){
  337.       height = 1.2083;
  338.       top = 2;
  339.       width = 60;
  340.       color = "black";
  341.       text = "<h2>An Error Has Occured:<h2>";
  342.       pageno = 3;
  343.    }
  344.  
  345.  
  346.    with (this.errorHTML = new HTML(this)){
  347.       height = 4;
  348.       top = 4;
  349.       width = 60;
  350.       color = "black";
  351.       text = "error";
  352.       pageno = 3;
  353.    }
  354.  
  355.  
  356.    with (this.errorBackButton = new Button(this)){
  357.       onServerClick = {;this.form.pageno = 1};
  358.       top = 8;
  359.       width = 10.5;
  360.       text = "Back";
  361.       pageno = 3;
  362.    }
  363.  
  364.    this.rowset = this.dbo_titles.rowset;
  365.  
  366.    function form_onServerLoad()
  367.    {
  368.       this.rowset.first();
  369.    }
  370.  
  371.    function form_preRender()
  372.    {
  373.       var state = this.rowset.state;
  374.       var vis = !(state == STATE_APPEND || state == STATE_FILTER || state == STATE_LOCATE);
  375.       this.authorHTML.visible = this.authorListBox.visible = 
  376.            this.addButton.visible = this.deleteAuthorButton.visible = vis;
  377.    }
  378.  
  379.    function pubIDSelect_onServerLoad()
  380.    {
  381.       this.pubIDArray = new Array();
  382.       this.form.dbo_publishers.active = true;
  383.       while (!this.form.dbo_publishers.rowset.endOfSet) {
  384.          this.pubIDArray.add(this.form.dbo_publishers.rowset.fields["pub_id"].value);
  385.          this.form.dbo_publishers.rowset.next();
  386.       }
  387.       this.form.dbo_publishers.active = false;
  388.       this.options = "array this.pubIDArray";
  389.    }
  390.  
  391.    function allAuthorsListBox_onServerLoad()
  392.    {
  393.       this.authorsArray = new Array();
  394.       this.form.dbo_authorsAll.active = true;
  395.       while (!this.form.dbo_authorsAll.rowset.endOfSet) {
  396.          this.authorsArray.add(this.form.dbo_authorsAll.rowset.fields["au_lname"].value + ", " +
  397.                                this.form.dbo_authorsAll.rowset.fields["au_fname"].value);
  398.          this.form.dbo_authorsAll.rowset.next();
  399.       }
  400.       this.authorsArray.sort();
  401.       this.options = "array this.authorsArray";
  402.    }
  403.  
  404.    function titleAuthor_onOpen()
  405.    {
  406.       var fields = this.parent.dbo_authors.rowset.fields;
  407.       this.authorArray = new Array();
  408.       this.max_au_ord = -1;
  409.       while (!this.rowset.endOfSet) {
  410.          this.authorArray.add(fields["au_lname"].value + ", " + fields["au_fname"].value);
  411.          this.max_au_ord = (this.rowset.fields["au_ord"].value > this.max_au_ord) ? this.rowset.fields["au_ord"].value : this.max_au_ord;
  412.          this.rowset.next();
  413.       }
  414.       try {
  415.          this.authorArray.sort();
  416.          this.parent.authorListBox.options = "array this.authorArray";
  417.       }
  418.       catch (Exception e) {}
  419.    }
  420.  
  421.    function addAuthorButton_onServerClick()
  422.    {
  423.       var value = this.form.allAuthorsListBox.value;
  424.       var authorsAll = this.form.dbo_authorsAll;
  425.       var titleauthor = this.form.dbo_titleauthor;
  426.       var titles = this.form.dbo_titles;
  427.       var error = "";
  428.       if (value.length == 0) {
  429.          error = "Error: no author was selected.";
  430.       }
  431.       else {
  432.          // look for match in dbo_authorsAll
  433.          authorsAll.active = false;
  434.          authorsAll.sql = "SELECT * FROM dbo.authors where au_fname = :fname and au_lname = :lname";
  435.          authorsAll.params["lname"] = value.substring(0,value.indexOf(", "));
  436.          authorsAll.params["fname"] = value.substring(value.indexOf(", ") + 2, value.length);
  437.          authorsAll.active = true;
  438.          // add to dbo_titleauthor
  439.          if (authorsAll.rowset.endOfSet) {
  440.             error = "Error: author was not added.";
  441.          }
  442.          else {
  443.             titleauthor.rowset.beginAppend();
  444.             titleauthor.rowset.fields["au_id"].value = authorsAll.rowset.fields["au_id"].value;
  445.             titleauthor.rowset.fields["title_id"].value = titles.rowset.fields["title_id"].value;
  446.             titleauthor.rowset.fields["au_ord"].value = titleauthor.max_au_ord + 1;
  447.             titleauthor.rowset.fields["royaltyper"].value = 0;
  448.             try {
  449.                titleauthor.rowset.save();
  450.                titleauthor.requery();
  451.             }
  452.             catch (DbException e) {
  453.                if (e.message.indexOf("PRIMARY") > 0) {
  454.                   error = "Error: duplicate author was not added.";
  455.                }
  456.                else {
  457.                   error = "Error: Server Error<p>";
  458.                   for (var i = 0; i<e.errors.length; i++)
  459.                      error += e.errors[i].message + "<br>";
  460.                }
  461.                titleauthor.rowset.abandon();
  462.             }
  463.             catch (Exception e) {
  464.                error = "Error: IntraBuilder Error<p>" + 
  465.                        e.message + " (" + e.code + ")";
  466.                titleauthor.rowset.abandon();
  467.             }
  468.          }
  469.       }
  470.       if (error.length > 0) {
  471.          this.form.errorHTML.text = error;
  472.          this.form.pageno = 3;
  473.       }
  474.       else {
  475.          this.form.pageno = 1;
  476.       }
  477.    }
  478.  
  479.    function deleteAuthorButton_onServerClick()
  480.    {
  481.       var value = this.form.authorListBox.value;
  482.       var authorsAll = this.form.dbo_authorsAll;
  483.       var titleauthor = this.form.dbo_titleauthor;
  484.       var error = "";
  485.       if (value.length == 0) {
  486.          error = "Error: no author was selected.";
  487.       }
  488.       else {
  489.          // look for match in dbo_authorsAll
  490.          authorsAll.active = false;
  491.          authorsAll.sql = "SELECT * FROM dbo.authors where au_fname = :fname and au_lname = :lname";
  492.          authorsAll.params["lname"] = value.substring(0,value.indexOf(", "));
  493.          authorsAll.params["fname"] = value.substring(value.indexOf(", ") + 2, value.length);
  494.          authorsAll.active = true;
  495.          // delete from dbo_titleauthor
  496.          if (authorsAll.rowset.endOfSet) {
  497.             error = "Error: author was not deleted.";
  498.          }
  499.          else {
  500.             if (titleauthor.rowset.applyLocate("au_id='" + authorsAll.rowset.fields["au_id"].value + "'")) {
  501.                titleauthor.rowset.delete();
  502.                titleauthor.requery();
  503.             }
  504.          }
  505.       }
  506.       if (error.length > 0) {
  507.          this.form.errorHTML.text = error;
  508.          this.form.pageno = 3;
  509.       }
  510.       else {
  511.          this.form.pageno = 1;
  512.       }
  513.    }
  514.  
  515.    function image2_onImageServerClick(nLeft, nTop) {
  516.       var error = "";
  517.       if (nLeft >= 26*0 && nLeft < 26*1) {
  518.          form.rowset.beginAppend();
  519.       } 
  520.       else if (nLeft >= 26*1 && nLeft < 26*2) { 
  521.          if (!form.rowset.endOfSet) {
  522.             try {
  523.                form.rowset.delete();
  524.                if (form.rowset.endOfSet)
  525.                   form.rowset.last();
  526.             }
  527.             catch (DbException e) {
  528.                if (e.message.indexOf("COLUMN REFERENCE constraint") > 0) {
  529.                   error = "Error: There are referencial integrity rules in place that prevent the deletion of this record. " +
  530.                           "This may be caused by deleting a title that still has authors attached. " + 
  531.                           "This simple sample program does not account for these server constraints.";
  532.                }
  533.                else {
  534.                   error = "Error: Server Error<p>";
  535.                   for (var i = 0; i<e.errors.length; i++)
  536.                      error += e.errors[i].message + "<br>";
  537.                }
  538.             }
  539.             catch (Exception e) {
  540.                error = "Error: IntraBuilder Error<p>" + 
  541.                        e.message + " (" + e.code + ")";
  542.             }
  543.          }
  544.       } 
  545.       else if (nLeft >= 26*2 && nLeft < 26*3) { 
  546.          try {
  547.             form.rowset.save();
  548.          }
  549.          catch (DbException e) {
  550.             if (e.message.indexOf("PRIMARY KEY") > 0) {
  551.                error = "Error: There is already a title with this ID. Enter a different Title ID. The title was not saved.";
  552.             }
  553.             else {
  554.                error = "Error: Server Error<p>";
  555.                for (var i = 0; i<e.errors.length; i++)
  556.                   error += e.errors[i].message + "<br>";
  557.             }
  558.          }
  559.          catch (Exception e) {
  560.             error = "Error: IntraBuilder Error<p>" + 
  561.                     e.message + " (" + e.code + ")";
  562.          }
  563.       } 
  564.       else if (nLeft >= 26*3 && nLeft < 26*4) {
  565.          form.rowset.abandon();
  566.       } 
  567.       else if (nLeft >= 26*4 && nLeft < 26*5) {
  568.          form.rowset.beginEdit();
  569.       } 
  570.       else if (nLeft >= 26*5 && nLeft < 26*6) { 
  571.          if (form.rowset.state==5)
  572.             form.rowset.applyLocate();
  573.          else
  574.             form.rowset.beginLocate();
  575.       } 
  576.       else {
  577.          if (form.rowset.state==4)
  578.             form.rowset.applyFilter();
  579.          else
  580.             form.rowset.beginFilter();
  581.       }
  582.       if (error.length > 0) {
  583.          this.form.errorHTML.text = error;
  584.          this.form.pageno = 3;
  585.       }
  586.       else {
  587.          this.form.pageno = 1;
  588.       }
  589.    }
  590.  
  591. }
  592.