FSN#45107 Excel export 'Elke SQL bekijken
svn path=/Website/trunk/; revision=40642
This commit is contained in:
@@ -11,208 +11,88 @@
|
||||
Notes:
|
||||
*/
|
||||
%>
|
||||
|
||||
<!-- #include file="../shared/common.inc" -->
|
||||
<!-- #include file="../Shared/adovbs.inc" -->
|
||||
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
||||
<!-- #include file="../Shared/iface.inc" -->
|
||||
<%
|
||||
FCLTHeader.Requires({ plugins: ["jQuery"] })
|
||||
|
||||
__Logging = 0; // Is te laat...
|
||||
Application("otap_environment") == "O" || user.checkAutorisation("WEB_FACFAC");
|
||||
var sql = getFParam("sql", getQParam("sql", ""));
|
||||
|
||||
// Als er exact <20><>n SELECT, FROM en WHERE is doen we een beetje formatting
|
||||
if ( sql.indexOf("\n") == -1 &&
|
||||
(sql.match(/SELECT/ig) || []).length == 1 &&
|
||||
(sql.match(/FROM/ig) || []).length == 1 &&
|
||||
(sql.match(/WHERE/ig) || []).length == 1)
|
||||
{
|
||||
sql = sql.replace(/ FROM/i, "\nFROM");
|
||||
sql = sql.replace(/ WHERE/i, "\nWHERE");
|
||||
sql = sql.replace(/ ORDER BY/i, "\nORDER BY");
|
||||
sql = sql.replace(/ GROUP BY/i, "\nGROUP BY");
|
||||
sql = sql.replace(/ AND/ig, "\n AND");
|
||||
sql = sql.replace(/ , /ig, ", ");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
//Onze SQL-statement zo maar naar een cloud-service sturen mag vast niet van ISO-27001
|
||||
if (sql && sql != "opener")
|
||||
{
|
||||
SXH_PROXY_SET_PROXY = 2
|
||||
var url="http://www.dpriver.com/cgi-bin/ppserver";
|
||||
var http_request = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0");
|
||||
//http_request.setProxy(SXH_PROXY_SET_PROXY, "127.0.0.1:8888")
|
||||
|
||||
http_request.open("POST", url, false);
|
||||
http_request.setRequestHeader("Content-Type", "application/xml; charset=UTF-8")
|
||||
//6470-1140-4758-5296 demo
|
||||
//4149-9094-8133-2031 online
|
||||
// demo mei 2017 <clientid>dpriver-9094-8133-2031</clientid>
|
||||
var req = "<sqlpp_request><clientid>dpriver-9094-8133-2031</clientid><dbvendor>oracle</dbvendor><outputfmt>html2</outputfmt><inputsql>";
|
||||
req += Server.HTMLEncode(sql);
|
||||
req += '</inputsql><formatoptions><keywordcs>Uppercase</keywordcs><identifiercs>Lowercase</identifiercs>'
|
||||
+ '<functioncs>Uppercase</functioncs><lnbrwithcomma>after</lnbrwithcomma><liststyle>stack</liststyle>'
|
||||
+ '<salign>sleft</salign><quotechar>"</quotechar><maxlenincm>80</maxlenincm>'
|
||||
+ '<andorunderwhere>yes</andorunderwhere></formatoptions></sqlpp_request>';
|
||||
http_request.send(req);
|
||||
|
||||
var xslDoc = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
xslDoc.loadXML(http_request.responseText);
|
||||
retvalue = xslDoc.selectSingleNode("sqlpp_result/retvalue");
|
||||
retmessage = xslDoc.selectSingleNode("sqlpp_result/retmessage");
|
||||
if (retvalue.text != "0")
|
||||
{
|
||||
// retmessage.text: AS(1,130) expected token:JOIN
|
||||
RegCode = retmessage.text.match(/^(\w*)\(1\,(\d+)/); // Zoek: AS(1,130) expected token:JOIN
|
||||
if (RegCode && RegCode.length > 2)
|
||||
{
|
||||
var ll = RegCode[1].length;
|
||||
var pos = parseInt(RegCode[2], 10);
|
||||
sql = sql.substr(0, pos-1) + "<span style='background-color:red'>"+RegCode[1]+"</span>" + sql.substr(pos-1+ll);
|
||||
}
|
||||
|
||||
Response.Write("<i>"+retmessage.text+"</i>");
|
||||
Response.Write("<br>" + sql); // origineel terug
|
||||
}
|
||||
else
|
||||
{
|
||||
formatted_sql = xslDoc.selectSingleNode("sqlpp_result/formattedsql");
|
||||
Response.Write(formatted_sql.text);
|
||||
}
|
||||
}
|
||||
*/
|
||||
%>
|
||||
<html>
|
||||
<head>
|
||||
<% FCLTHeader.Generate({outputmode: 0}) %>
|
||||
<script>
|
||||
<% if (sql == "opener") {
|
||||
sql = "";
|
||||
%>
|
||||
$(function () {
|
||||
if (window.opener && window.opener.genericsql)
|
||||
{
|
||||
$("#sql").val(window.opener.genericsql);
|
||||
$("form").submit();
|
||||
}
|
||||
});
|
||||
<% } %>
|
||||
|
||||
function fliptable(evt)
|
||||
{
|
||||
FcltMgr.stopPropagation(evt);
|
||||
$("table#sqldatatable").each(function() {
|
||||
var $this = $(this);
|
||||
var newrows = [];
|
||||
$this.find("tr").each(function(){
|
||||
var i = 0;
|
||||
$(this).find("td,th").each(function()
|
||||
{
|
||||
if ($(this).closest("thead").hasClass("tableFloatingHeader"))
|
||||
return;
|
||||
i++;
|
||||
if(newrows[i] === undefined) { newrows[i] = $("<tr></tr>"); }
|
||||
this.align = 'left'; // de data
|
||||
if (this.tagName == 'TH')
|
||||
this.style = 'text-align:right'; // de headers
|
||||
newrows[i].append($(this));
|
||||
});
|
||||
});
|
||||
$this.find("tr").remove();
|
||||
$.each(newrows, function(){
|
||||
$this.append(this);
|
||||
});
|
||||
});
|
||||
$("table#sqldatatable").width('auto');
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
%>
|
||||
<html>
|
||||
<head>
|
||||
<% FCLTHeader.Generate({outputmode: 0}); %>
|
||||
<style>
|
||||
table.rstable td {
|
||||
border-left: 1px solid #bbb;
|
||||
}
|
||||
body {
|
||||
padding: 5px;
|
||||
}
|
||||
body#searchbody td {
|
||||
line-height:1.2em!important;
|
||||
line-height:1.2em!important;
|
||||
}
|
||||
.message {
|
||||
background-color: orange;
|
||||
color: black;
|
||||
padding: 2px 5px 4px 5px;
|
||||
height: 20px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
function doSubmit()
|
||||
{
|
||||
doFormat();
|
||||
document.forms.u2.submit();
|
||||
}
|
||||
|
||||
function doFormat()
|
||||
{
|
||||
var sql = $("#sql").val();
|
||||
// Als er exact 1 SELECT, FROM en WHERE is doen we een beetje formatting
|
||||
if ( sql.indexOf("\n") == -1 &&
|
||||
(sql.match(/SELECT/ig) || []).length == 1 &&
|
||||
(sql.match(/FROM/ig) || []).length == 1 &&
|
||||
(sql.match(/WHERE/ig) || []).length <= 1
|
||||
)
|
||||
{
|
||||
sql = "_"+sql.trim();
|
||||
sql = sql.replace(/_SELECT/i, "SELECT");
|
||||
sql = sql.replace(/ FROM/i, "\nFROM");
|
||||
sql = sql.replace(/ WHERE/i, "\nWHERE");
|
||||
sql = sql.replace(/ ORDER BY/i, "\nORDER BY");
|
||||
sql = sql.replace(/ GROUP BY/i, "\nGROUP BY");
|
||||
sql = sql.replace(/ AND/ig, "\n AND");
|
||||
sql = sql.replace(/ , /ig, ", ");
|
||||
}
|
||||
$("#sql").val(sql);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body id="searchbody">
|
||||
<body id="searchbody">
|
||||
<div id="search">
|
||||
<form method='post'>
|
||||
<textarea name='sql' id='sql' style='width:800px;height:200px' spellcheck="false"><%=safe.textarea(sql)%></textarea>
|
||||
<button type='submit'>Execute</button>
|
||||
<form id="u2" name="u2" method="get" action="mgt_genericsql_list.asp" target="workFrame">
|
||||
<% BLOCK_START("searchtable", L("lcl_menu_fac_anysql"));
|
||||
RWTEXTAREATR("sql", "fld", "", sql, {html: "style='width:800px;height:200px' spellcheck='false'"});
|
||||
BLOCK_END();
|
||||
var buttons = [ {title: L("lcl_usrrap_uitvoeren"), action: "doSubmit()", id: "bSearch" } ];
|
||||
CreateButtons(buttons, { entersubmit: true });
|
||||
%>
|
||||
</form>
|
||||
</div>
|
||||
<%
|
||||
if (!sql)
|
||||
Response.End;
|
||||
|
||||
try
|
||||
{
|
||||
var hiresTimer = new ActiveXObject("SLNKDWF.About");
|
||||
var tm_start = hiresTimer.usTimer;
|
||||
var oRs = Oracle.RealConnection.Execute("SELECT * FROM ({0})".format(sql)); // de wrapper beschermt tegen INSERT, DELETE en UPDATE
|
||||
var tm = (hiresTimer.usTimer - tm_start) / 1000;;
|
||||
Response.Write(tm.toFixed(1) + "ms")
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
Response.Write(" <i style='color:red' class='fa fa-warning fa-lg'></i> " + e.description);
|
||||
Response.End;
|
||||
}
|
||||
var rst = new ResultsetTable({ sql: "dummy",
|
||||
pRs: oRs, // oRs is al eerder bepaald
|
||||
ID: "sqldatatable",
|
||||
showAll: true, //showall,
|
||||
outputmode: 0,
|
||||
title: "SQL <button onclick='fliptable(event)'>Flip</button>",
|
||||
noPrint: true,
|
||||
noExcel: true,
|
||||
buttons: [] // print en excel komen vanzelf
|
||||
});
|
||||
function fnfnmyFloat(kolom)
|
||||
{
|
||||
return function (oRs)
|
||||
{
|
||||
var v = oRs(kolom).Value;
|
||||
return safe.displayfloat(v, 2, true); // true voor trimZeros, we weten helemaal niet of die 2 zo bedoeld was
|
||||
}
|
||||
}
|
||||
|
||||
for (i= 0; i < oRs.Fields.Count; i++)
|
||||
{
|
||||
var kolomnaam = oRs.Fields(i).Name.toLowerCase();
|
||||
var colpar = {caption: kolomnaam,
|
||||
content: kolomnaam,
|
||||
datatype: null,
|
||||
align: null
|
||||
}
|
||||
var kolomtype = oRs.Fields(i).Type;
|
||||
if (kolomtype == adInteger || kolomtype == adDecimal)
|
||||
{
|
||||
colpar.datatype = 'number';
|
||||
}
|
||||
else if (kolomtype == adCurrency || kolomtype == adNumeric || kolomtype == adVarNumeric || kolomtype == adDouble)
|
||||
{
|
||||
colpar.align = "right"
|
||||
colpar.content = fnfnmyFloat(kolomnaam);
|
||||
}
|
||||
else if (kolomtype == adDBTimeStamp)
|
||||
{
|
||||
colpar.datatype = 'datetime'; // ??
|
||||
}
|
||||
rst.addColumn(new Column(colpar));
|
||||
}
|
||||
|
||||
var cnt = rst.processResultset();
|
||||
if (cnt == 1)
|
||||
{
|
||||
%><script>fliptable()</script><%
|
||||
}
|
||||
%>
|
||||
</body>
|
||||
<div id="result">
|
||||
<iframe width="100%" height="100%"
|
||||
src="../Shared/empty.asp"
|
||||
name="workFrame" id="workFrame"
|
||||
onload="FcltMgr.iframeLoaded(this)"
|
||||
frameborder="0" scrolling="no">
|
||||
</iframe>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user