组合条件查询(初版)
例子下载
如果你正在从事一些信息系统的开发,那么不可避免的是,需要根据不同的条件去查数据,那么用户可能希望的是可以使用所有相关的条件去查询,这也就是大家认为的组合条件查询。
这里介绍的只是组合条件查询的一个雏形,灵活性、可移植性、可复执性都还不太好,这里拿出来也就是给大家一点参考,当然,在后续的日子里,我会继续完善它,争取让它具有相当高的复制性,可以给你的开发工作带来一点便利。
先截个图给大家看一下:
当然,这只是个雏形,以后它会慢慢的变得漂亮和更实用一些。
实现的代码,全部使用javascript实现,有一部分还是硬编码,由于对javascript的了解还是一点皮毛,所以还没有封装好。贴一下实现的代码吧。
function InsertCondition(table,number)
{
//获取插入的table
var tb = document.getElementById(table);
//插入一行 <tr> </tr>
var newRow = tb.insertRow();
//插入一个单元格 <td> </td>
var newCell = newRow.insertCell();
//创建一个select 字段
var selField = document.createElement("select");
selField.id = table + "_selField_" + number;
var option1 = new Option('','');
var option2 = new Option('育龄妇女姓名','Name');
var option3 = new Option('出生日期','Birthday');
var option4 = new Option('婚姻状况','MarriageStatus');
var option5 = new Option('初婚日期','MarryDate');
selField.add(option1,0);
selField.add(option2,1);
selField.add(option3,2);
selField.add(option4,3);
selField.add(option5,4);
newCell.appendChild(selField);
var newCellLink = newRow.insertCell();
//创建一个select 连接符号
var selLink = document.createElement("select");
selLink.id = table + "_selLink_" + number;
var option1Link = new Option('','');
var option2Link = new Option('相等','==');
var option3Link = new Option('不相等','!=');
selLink.add(option1Link,0);
selLink.add(option2Link,1);
selLink.add(option3Link,2);
newCellLink.appendChild(selLink);
var newCellEnd = newRow.insertCell();
//创建一个select 结束
var selEnd = document.createElement("select");
selEnd.id = table + "_selEnd_" + number;
var option1End = new Option('','');
var option2End = new Option('并且','and');
var option3End = new Option('或者','or');
var option4End = new Option('结束','end');
selEnd.add(option1End,0);
selEnd.add(option2End,1);
selEnd.add(option3End,2);
selEnd.add(option4End,3);
//绑定事件
selEnd.attachEvent('onchange',CreateOrDeleteRow);
newCellEnd.appendChild(selEnd);
}
{
//获取插入的table
var tb = document.getElementById(table);
//插入一行 <tr> </tr>
var newRow = tb.insertRow();
//插入一个单元格 <td> </td>
var newCell = newRow.insertCell();
//创建一个select 字段
var selField = document.createElement("select");
selField.id = table + "_selField_" + number;
var option1 = new Option('','');
var option2 = new Option('育龄妇女姓名','Name');
var option3 = new Option('出生日期','Birthday');
var option4 = new Option('婚姻状况','MarriageStatus');
var option5 = new Option('初婚日期','MarryDate');
selField.add(option1,0);
selField.add(option2,1);
selField.add(option3,2);
selField.add(option4,3);
selField.add(option5,4);
newCell.appendChild(selField);
var newCellLink = newRow.insertCell();
//创建一个select 连接符号
var selLink = document.createElement("select");
selLink.id = table + "_selLink_" + number;
var option1Link = new Option('','');
var option2Link = new Option('相等','==');
var option3Link = new Option('不相等','!=');
selLink.add(option1Link,0);
selLink.add(option2Link,1);
selLink.add(option3Link,2);
newCellLink.appendChild(selLink);
var newCellEnd = newRow.insertCell();
//创建一个select 结束
var selEnd = document.createElement("select");
selEnd.id = table + "_selEnd_" + number;
var option1End = new Option('','');
var option2End = new Option('并且','and');
var option3End = new Option('或者','or');
var option4End = new Option('结束','end');
selEnd.add(option1End,0);
selEnd.add(option2End,1);
selEnd.add(option3End,2);
selEnd.add(option4End,3);
//绑定事件
selEnd.attachEvent('onchange',CreateOrDeleteRow);
newCellEnd.appendChild(selEnd);
}
function CreateOrDeleteRow()
{
var sel = event.srcElement;
var selID = sel.id;
//分析table的名称以及number
var list = new Array();
list = selID.split('_');
//当前table的总行数
var length = document.getElementById(list[0]).rows.length;
//当前table的行数
var now = parseInt(list[2]);
var val = sel.options[sel.selectedIndex].value;
if(val == 'end')
{
//删除剩下的行
for(var i=now;i<length;i++)
{
document.getElementById(list[0]).deleteRow();
}
}
else
{
if(now == length)
{
//新增一行
InsertCondition(list[0],now + 1);
}
}
}
{
var sel = event.srcElement;
var selID = sel.id;
//分析table的名称以及number
var list = new Array();
list = selID.split('_');
//当前table的总行数
var length = document.getElementById(list[0]).rows.length;
//当前table的行数
var now = parseInt(list[2]);
var val = sel.options[sel.selectedIndex].value;
if(val == 'end')
{
//删除剩下的行
for(var i=now;i<length;i++)
{
document.getElementById(list[0]).deleteRow();
}
}
else
{
if(now == length)
{
//新增一行
InsertCondition(list[0],now + 1);
}
}
}
//获取组合查询的sql语句
function GetQuerySql(table)
{
var sql = '';
var tb = document.getElementById(table);
for(var i=1;i<=tb.rows.length;i++)
{
//获取字段 select
var selField = document.getElementById(table + "_selField_" + i);
var fieldVal = selField.options[selField.selectedIndex].value;
//获取连接 select
var selLink = document.getElementById(table + "_selLink_" + i);
var linkVal = selLink.options[selLink.selectedIndex].value;
//获取结束 select
var selEnd = document.getElementById(table + "_selEnd_" + i);
var endVal = selEnd.options[selEnd.selectedIndex].value;
if(fieldVal != '' && linkVal != '')
{
sql += ' ( ' + 'fH' + fieldVal + ' ' + linkVal + ' fG' + fieldVal + ') '
}
else
{
alert('请把组合条件输入完整!');
}
if(endVal != 'end')
{
sql += ' ' + endVal + ' ';
}
}
return sql;
}
function GetQuerySql(table)
{
var sql = '';
var tb = document.getElementById(table);
for(var i=1;i<=tb.rows.length;i++)
{
//获取字段 select
var selField = document.getElementById(table + "_selField_" + i);
var fieldVal = selField.options[selField.selectedIndex].value;
//获取连接 select
var selLink = document.getElementById(table + "_selLink_" + i);
var linkVal = selLink.options[selLink.selectedIndex].value;
//获取结束 select
var selEnd = document.getElementById(table + "_selEnd_" + i);
var endVal = selEnd.options[selEnd.selectedIndex].value;
if(fieldVal != '' && linkVal != '')
{
sql += ' ( ' + 'fH' + fieldVal + ' ' + linkVal + ' fG' + fieldVal + ') '
}
else
{
alert('请把组合条件输入完整!');
}
if(endVal != 'end')
{
sql += ' ' + endVal + ' ';
}
}
return sql;
}
代码比较简单,实现的原理也就不罗嗦了。