`

动态生成SQL查询语句

阅读更多

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>查询条件表单</title>
<style>
*{
 font-size:12px;
 padding:0;
 margin:0;
}
body{
 padding:40px;
}
#MainBox{
 border:#666 1px solid;
 background-color:#eee;
 width:700px;
}
#MainBox td{
 padding:4px;
}
#ConditionBox{
 height:150px;
 width:100%;
 overflow-y:auto;
 border:#bbb 1px solid;
 padding:2px;
 background-color:#fff;
}
.tmFrame{
 border:#eee 1px solid;
 padding:2px;
 width:100%;
}
.tmFrame_highlight{
 border:#666 1px solid;
 padding:2px;
 width:100%;
 background-color:#f7f7f7;
}
.fname{
 float:left;
 width:200px;
}
.conn{
 float:left;
 width:100px;
}
.fvalue{
 float:left;
 width:100px;
}
.handlebox{
 float:right;
 width:180px;
 display:none;
}
.handlebox_view{
 float:right;
 width:180px;
 display:block;
}
.rbox{
 float:right;
 margin:1px;
 background-color:#999;
 color:#fff;
 padding:1px;
 width:15px;
 cursor:hand;
}
legend{
 border:#bbb 1px solid;
 padding:4px;
}
fieldset{
 border:#bbb 1px solid;
 padding:4px;
}
.sqlwords{
 margin:2px;
 border:#bbb 1px solid;
 width:100%;
}
</style>
<script>
////构造函数
function ce(e){return document.createElement(e)}
/* Example:
*   var a = cex("DIV", {onmouseover:foo, name:'div1', id:'main'});
*/
function cex(e, x){
    var a = ce(e);
    for (prop in x){
      a[prop] = x[prop];
    }
    return a;
}
/*
* function ge
* Shorthand function for document.getElementById(i)
*/
function ge(i){return document.getElementById(i)}
/*
* function ac
* Example: ac( house, ac(roof, shingles), ac(floor, ac(tiles, grout)))
*/
function ac(){
    if (ac.arguments.length > 1){
        var a = ac.arguments[0];
        for (i=1; i<ac.arguments.length; i++){
            if (arguments[i])
               a.appendChild(ac.arguments[i]);
        }
        return a;
    } else {
        return null;
    }
}
/////ID增量
function guid(){
   if (!window.__id) window.__id = 0;
   return ++window.__id;
}
//======建立条件类
function term(tname,fname,conn,fvalue,ttype){
 this.tname=tname;
 this.fname=fname;
 this.conn=conn;
 this.fvalue=fvalue;
 this.id= guid();
 this.ttype=ttype;
}
term.prototype.getHTML = function(){
   var termFrame = cex("DIV", {
      id:this.id,
      className:'tmframe',
      onmouseover:this.fc_term_onmouseover(),
      onmouseout:this.fc_term_onmouseout()
      });
   //var module = cex("DIV", {
      //id:'module'+this.id,
      //className:'module'
      //});
   var tttt=this.tname+"."+this.fname;
   if(this.ttype!='fset')
  tttt=this.tname;
   var mtt = cex("input", {
      id:'tp'+this.id,
   name:'fname'+this.id,
      type:"hidden",
   value:this.ttype
      });
   var fname = cex("DIV", {
      id:'fname'+this.id,
      className:'fname',
   innerHTML:tttt
      });
     
   var conn = cex("DIV", {
      id:'conn'+this.id,
      className:'conn',
   innerHTML:this.conn
      });
 var fvalue = cex("DIV", {
      id:'fvalue'+this.id,
      className:'fvalue',
   innerHTML:this.fvalue
      });
 var handlebox  = cex("div", {
      id:'handlebox'+this.id,
      className:"handlebox"
      });
 var mdel  = cex("div", {
      id:'tmdel'+this.id,
      onclick:this.fc_mdel_onclick(),
      className:"rbox",
   title:"删除此条件",
      innerHTML: 'X'
      });
 var mup  = cex("div", {
      id:'tmup'+this.id,
      onclick:this.fc_mup_onclick(),
      className:"rbox",
   title:"向上移动",
      innerHTML: '↑'
      });
 var mdown  = cex("div", {
      id:'tmdown'+this.id,
      onclick:this.fc_mdown_onclick(),
      className:"rbox",
   title:"向下移动",
      innerHTML: '↓'
      });
 var mzkh  = cex("div", {
      id:'tzkh'+this.id,
      onclick:this.fc_mzkh_onclick(),
      className:"rbox",
   title:"添加左括号",
      innerHTML: '('
      });
 var mykh  = cex("div", {
      id:'tykh'+this.id,
      onclick:this.fc_mykh_onclick(),
      className:"rbox",
   title:"添加右括号",
      innerHTML: ')'
      });
 var mand  = cex("div", {
      id:'tand'+this.id,
      onclick:this.fc_mand_onclick(),
      className:"rbox",
   title:"添加并条件",
      innerHTML: 'and'
      });
 var mor  = cex("div", {
      id:'tor'+this.id,
      onclick:this.fc_mor_onclick(),
      className:"rbox",
   title:"添加或条件",
      innerHTML: 'or'
      });
   // Build DIV
   ac (termFrame,
   mtt,
   ac (handlebox,
   mdel,
   mup,
   mdown,
   mykh,
   mzkh,
   mand,
   mor
   ),
         fname,
         conn,
         fvalue
      );
     
   return termFrame;
}
term.prototype.highlight = function(){
   ge("handlebox"+this.id).className = 'handlebox_view'; 
   ge(this.id).className = 'tmFrame_highlight';
}
term.prototype.lowlight = function(){
   ge("handlebox"+this.id).className = 'handlebox';
   ge(this.id).className = 'tmFrame';
}
term.prototype.remove = function(){
   var _this = ge(this.id);
   _this.parentNode.removeChild(_this);
}
term.prototype.moveup = function(){
 var _this = ge(this.id);
 var pre_this = _this.previousSibling;
 if(pre_this!=null){
  _this.parentNode.insertBefore(_this,pre_this);
  this.lowlight();
 }
}
term.prototype.movedown = function(){
 var _this = ge(this.id);
 var next_this = _this.nextSibling;
 if(next_this!=null){
  _this.parentNode.insertBefore(next_this,_this);
  this.lowlight();
 }
}
term.prototype.addzkh = function(){
 var _this = ge(this.id);
 var tzkh = new term('╭----------------','','','','zkh');
 var node_zkh = tzkh.getHTML();
 _this.parentNode.insertBefore(node_zkh,_this);
}
term.prototype.addykh = function(){
 var _this = ge(this.id);
 var tykh = new term('╰----------------','','','','ykh');
 var node_ykh = tykh.getHTML();
 if(_this.nextSibling!=null)
  _this.parentNode.insertBefore(node_ykh,_this.nextSibling);
 else
  _this.parentNode.appendChild(node_ykh);
}
term.prototype.addand = function(){
 var _this = ge(this.id);
 var tand = new term('  并且','','','','tand');
 var node_and = tand.getHTML();
 if(_this.nextSibling!=null)
  _this.parentNode.insertBefore(node_and,_this.nextSibling);
 else
  _this.parentNode.appendChild(node_and);
}
term.prototype.addor = function(){
 var _this = ge(this.id);
 var tor = new term('  或者','','','','tor');
 var node_or = tor.getHTML();
 if(_this.nextSibling!=null)
  _this.parentNode.insertBefore(node_or,_this.nextSibling);
 else
  _this.parentNode.appendChild(node_or);
}
///对象控制函数
term.prototype.fc_term_onmouseover = function(){
   var _this = this;
   return function(){
      //if (!_this.isDragging)
         _this.highlight();
   }
}
term.prototype.fc_term_onmouseout = function(){
   var _this = this;
   return function(){
      //if (!_this.isDragging)
         _this.lowlight();
   }
}
term.prototype.fc_mdel_onclick = function(){
 var _this = this;
 return function(){
  _this.remove();
 }
}
term.prototype.fc_mup_onclick = function(){
 var _this = this;
 return function(){
  _this.moveup();
 }
}
term.prototype.fc_mdown_onclick = function(){
 var _this = this;
 return function(){
  _this.movedown();
 }
}
term.prototype.fc_mzkh_onclick = function(){
 var _this = this;
 return function(){
  _this.addzkh();
 }
}
term.prototype.fc_mykh_onclick = function(){
 var _this = this;
 return function(){
  _this.addykh();
 }
}
term.prototype.fc_mand_onclick = function(){
 var _this = this;
 return function(){
  _this.addand();
 }
}
term.prototype.fc_mor_onclick = function(){
 var _this = this;
 return function(){
  _this.addor();
 }
}
/////插入页面
function insertterm(){
 var tname = document.all.tname.value;
 var fname = document.all.fname.value;
 var conn = document.all.conn.value;
 var fvalue = document.all.fvalue.value;
 //xl(tname+"|"+fname+"|"+conn+"|"+fvalue);
 var tm = new term(tname,fname,conn,fvalue,"fset");
 var tmHTML = tm.getHTML();
 ac(ge("ConditionBox"),tmHTML);
 //ZA.addterm(tm);
}
//====条件控制窗口函数
function CBadd(){
 var h = document.all.ConditionBox.offsetHeight;
 document.all.ConditionBox.style.height = h + 20 + "px";
}
function CBcut(){
 var h = document.all.ConditionBox.offsetHeight;
 if(h>=150)
  document.all.ConditionBox.style.height = h - 20 + "px";
 else
  return false;
}
////////SQL语句处理函数
function getSQL(){
 var sql="";
 var ma = ge("ConditionBox").childNodes;
 //alert(ma.length);
 for(i=0;i<ma.length;i++){
  var id = ma[i].getAttribute("id");
  var tp = ge("tp"+id).value;
  if(tp=="fset"){
   sql+=" "+ge("fname"+id).innerHTML;
   sql+=" "+ge("conn"+id).innerHTML;
   sql+=" \""+ge("fvalue"+id).innerHTML+"\"";
  }
  else{
   //sql+=" "+ge("fname"+id).innerHTML;
   if(tp=="zkh")
    sql+=" (";
   if(tp=="ykh")
    sql+=" )";
   if(tp=="tand")
    sql+=" and";
   if(tp=="tor")
    sql+=" or";
  }
  //var mn = ma.childNodes;
  
 }
 ge("sqlwords").value = "WHERE "+sql;
}
//////////////term数组处理
//var ZA = {};
//ZA.terms = new Array();
//ZA.addterm = function(term){
// var ZAl = ZA.terms.length;
// ZA.terms[ZAl] = term;
 //alert(ZA.terms[ZAl].ttype);
// ZAl++;
//}
//ZA.insert_bef_term = function(term,tm){
 
//}
</script>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" id="MainBox">
  <tr>
    <td colspan="2" style="background-color:#999;color:#000;font-weight:bolder;font-size:14px">复杂查询表单</td>
  </tr>
  <tr>
    <td><div id="ConditionBox"></div>
 <div style="width:100%"><SPAN title='放大显示框' style='float:right;FONT-SIZE: 14px; CURSOR: hand;FONT-FAMILY: webdings' onclick='CBadd()'>6</SPAN><SPAN title='缩小显示' style='float:right;FONT-SIZE: 14px; CURSOR: hand;FONT-FAMILY: webdings' onclick='CBcut()'>5</SPAN></div></td>
  </tr>
  <tr>
    <td>
 <fieldset>
 <legend>SQL表达式</legend>
  <input type="text" id="sqlwords" class="sqlwords" /><input type="submit" name="Submit" value="GET SQL" onclick="getSQL()" style="float:right"/>
   </fieldset>
   </td>
  </tr>
  <tr>
    <td>
 <fieldset>
 <legend>定义条件</legend>
 <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td>表</td>
          <td><select name="tname" id="tname">
              <option value="table1" selected="selected">表1</option>
              <option value="table2">表2</option>
            </select></td>
          <td>字段</td>
          <td><select name="fname" id="fname">
              <option value="f1">字段1</option>
              <option value="f2">字段2</option>
     <option value="f3">字段3</option>
     <option value="f4">字段4</option>
     <option value="f5">字段5</option>
     <option value="f6">字段6</option>
     <option value="f7">字段7</option>
            </select></td>
          <td>关系</td>
          <td><select name="conn" id="conn">
              <option value="大于">大于</option>
              <option value="等于">等于</option>
              <option value="小于">小于</option>
              <option value="不等于">不等于</option>
            </select></td>
          <td>值</td>
          <td><input name="fvalue" type="text" id="fvalue" value="111111" /></td>
          <td><input type="submit" name="Submit" value="增加新条件" onclick="insertterm()"/></td>
        </tr>
      </table>
   </fieldset>
   </td>
  </tr>
</table>
</body>
</html>

分享到:
评论

相关推荐

    可视化sql查询语句生成器

    同时,它降低了错误率,因为大多数工具会自动检查语法和逻辑错误,确保生成的SQL语句是有效的。 另外,可视化界面对于初学者或者非技术背景的业务分析师尤其有用,他们可能对SQL语法不熟悉,但能够理解表格和图表。...

    SQL查询语句的动态生成.pdf

    通过两张表的设计,可以实现数据的动态查询和数据输入输出的控制,而不需要修改柜面程序代码,从而提高了系统的灵活性和扩展性。 以上是文档提供的关于动态生成SQL查询语句和查询控制表设计的知识点,它们对于构建...

    SQL查询语句生成器

    "Sql"这个文件可能是源代码文件,包含了生成SQL语句的程序逻辑和界面设计。可能使用了诸如Java、Python、C#等编程语言实现,并且可能采用了XML、JSON或其他格式来存储用户界面的配置和模板信息。 6. 使用技巧与...

    C#根据DataTable的数据变更动态生成SQL语句保存到数据库

    根据DataTable中数据行记录改变的状态,动态生成SQL语句, 如果一个表中字段上百个,在只改了其中两三个字段时,则生成的SQL语句就只会含有这修改内容的字段, 有了这一个函数,从此彻底告别手动写SQL语句更新到...

    sql语句万能生成器,sql语句,sql语句生成

    SQL语句生成器是一种软件工具,它能够帮助开发者自动生成SQL语句,大大减轻了编写和调试的工作负担。这种工具通常包含各种功能,如:根据数据库结构自动生成SELECT、INSERT、UPDATE、DELETE语句,支持JOIN操作,生成...

    C#封装MySql数据库操作,反射动态生成SQL语句

    C#封装MySql数据库操作,反射动态生成SQL语句。看程序前,最好请先看看里面的“数据库说明”文档,不然可能会一头雾水。 这是我第一次写数据库的程序,我知道有很多地方写得不好,希望能得到大家的指点。我的联系...

    C#根据DataTable动态生成SQL语句,解决数据库字段变更后代码也需要随之修改的问题

    彻底告别手动写SQL语句,一劳永逸解决数据库字段变更后...根据DataTable中数据行记录改变的状态,动态生成SQL语句, 如果一个表中字段上百个,在只改了其中两三个字段时,则生成的SQL语句就只会含有这修改内容的字段

    查看LINQ生成SQL语句的几种方法

    以下将详细介绍几种查看LINQ生成SQL语句的方法。 1. **Debug.WriteLine()** 在使用LINQ查询时,可以利用`Debug.WriteLine()`方法将生成的SQL语句打印到控制台。例如: ```csharp var query = (from customer in ...

    Excel根据表格,批量生成sqlserver语句 ,生成建表语句,自行到数据库中执行

    Excel文件中的"Excel根据表格,生成sql语句 .xlsm"很可能就是一个包含宏的Excel工作簿,用户可以打开这个文件,按照指示填写表格,然后运行宏来生成SQL Server的建表语句。 总结来说,这个方法是利用Excel的宏功能...

    动态生成SQL语句.txt

    ### 动态生成SQL语句的关键技术点 在IT领域,动态生成SQL语句是一种非常实用的技术,尤其在处理不确定的数据库操作时尤为有效。本文将根据提供的代码片段,详细解析其中涉及的重要知识点。 #### 1. 动态SQL的概念...

    自动生成SQL语句

    "自动生成SQL语句"的工具为开发者提供了便利,尤其是在处理复杂的数据操作时,可以节省大量手动编写SQL代码的时间。这样的工具通常通过解析数据库结构、理解用户需求,然后自动生成相应的SQL命令。 1. SQL基础知识...

    自动生成SQL语句_C#_sql_

    还有一些专门用于生成SQL语句的库,如MySql.Data.SqlClient、Npgsql等,它们提供了一些高级功能,如SQL模板、查询构建器等,帮助开发者更方便地生成SQL语句。 总结,自动生成SQL语句在C#开发中是一项实用的技术,...

    SQL SERVER 数据自动生成SQL语句

    SQL Server 数据自动生成SQL语句是一项实用的功能,它极大地简化了数据迁移或备份的过程。这个功能使得用户能够快速地根据数据库中的表结构和已有数据,生成相应的SQL插入语句,以便将这些数据移植到其他数据库系统...

    ACCESS数据库与SQL查询语句生成示例

    在ACCESS中,通过“模块”可以输入和执行SQL语句,实现更复杂的数据处理。这对于需要自动化或批量处理数据的场景尤其有用。 5. **示例应用**:例如,假设我们有一个名为"Employees"的表,包含"ID"、"Name"和"Salary...

    SQLServer动态SQL语句的用法

    SQL Server 中的动态 SQL 语句是一种灵活的查询方式,它可以根据不同的情况生成不同的 SQL 语句。动态 SQL 语句可以用来实现复杂的业务逻辑,提高查询效率和灵活性。 普通 SQL 语句和动态 SQL 语句的区别 普通 SQL...

    python自动生成sql建表语句

    压缩包内的`main.py`很可能是实现这一功能的主程序,它可能包含读取Excel、解析数据、生成SQL语句和写入文件的主要逻辑。`说明文档.txt`可能包含了程序的使用方法和注意事项,而`WindowsFrom`可能是一个包含GUI窗口...

    sql语句自动生成器

    7. **示例数据预览**:在生成SQL语句之前,工具可能提供预览功能,显示预期的查询结果,以便用户确认查询的正确性。 8. **代码优化**:高级的SQL自动生成器还会考虑语句的执行效率,优化SQL结构,比如使用JOIN替代...

    C#根据模型动态生成SQL和DBHelper

    在软件开发中,动态生成SQL语句是一项常见任务,它允许程序员根据业务逻辑灵活地构建查询。在C#中,可以使用System.Data.SqlClient命名空间下的SqlClient类库来实现这一目标。例如,可以使用SqlCommand对象创建SQL...

    Linq 将生成SQL语句显示出来

    Linq 将生成SQL语句显示出来 用于检查linq解析出来的sql语句。 很适合新手学习

    利用Excel批量生成单条SQL语句

    通过JS,我们可以在生成SQL前对Excel数据进行预处理,或者根据某些条件动态调整生成的SQL结构。 标签"SQL语句 批量生成 Excel 模板"揭示了这个工具的核心功能:批量生成SQL、使用Excel作为数据源以及通过模板简化...

Global site tag (gtag.js) - Google Analytics