2015-08-27 4 views
0

Экспорт данных столбца в формате CSV при выборе столбца в HTML. Этот HTML-код генерируется по следующей программе: sms.asp.Экспорт csv на основе определенного столбца

<%Option Explicit%> 
<% 
Dim strConn, strScriptName 

strScriptName = Request.ServerVariables("Script_Name") 
' RESPONSE.WRITE strScriptName 
strConn = Application("eDSNSMS") 

Dim strSQL, boolQuery 
strSQL="" 

strSQL = Request.QueryString("SQL") 
boolQuery = Request.QueryString("boolQuery") 'apa ini 

Dim objRS, objConn 
set objConn = server.CreateObject("ADODB.Connection") 
set objRS = server.CreateObject("ADODB.RecordSet") 
%> 
<html> 
<head> 
    <title>DB Admin</title> 
    <style type="text/css"> 
     .button{ 
      width:70px; 
      } 
    </style> 
    <script language="Javascript"> 
    function Submit_Query(){ 
     var SQL = SQL_Form.SQL.value; 
     if (SQL=="") return false; 
     window.location="<%=strScriptName%>?boolQuery=True&SQL=" + URLEncoding(SQL); 
    } 
    function Submit_Execute(){ 
     var SQL = SQL_Form.SQL.value; 
     if (SQL=="") return false; 
     if (confirm("Are you sure export to csv file?")){ 
      window.location="csv.asp?SQL=" + SQL; 
     } 
    } 

    function URLEncoding(inputValue) 
    { 
    inputValue=escape(inputValue); 
    re = /\+/gi; 
    return inputValue.replace(re, "%2B"); 
    } 

    var selectedIndex=0; 
    function selectedValue(i){ 
     if (selectedIndex==i){ 
      document.getElementById("Row_" + selectedIndex).bgColor="#e0e0e0"; 
      document.getElementById("Row_" + selectedIndex).style.color="black"; 
      selectedIndex=0; 
      return; 
     } 
     else{ 
      if (selectedIndex!=0){ 
       document.getElementById("Row_" + selectedIndex).bgColor="#e0e0e0"; 
       document.getElementById("Row_" + selectedIndex).style.color="black"; 
      } 
      selectedIndex=i; 
      document.getElementById("Row_" + selectedIndex).bgColor="darkblue"; 
      document.getElementById("Row_" + selectedIndex).style.color="white"; 

     } 
    } 
    </script> 
</head> 
<body topmargin=0 leftmargin=0 rightmargin=0> 
<table width=100% border=0 cellpadding=2 cellspacing=0 bgColor="silver"> 
<tr style="font-weight:bold;font-size:16pt"><td>Database Administration</td></tr> 
</table> 
<% 
On Error Resume Next 

objConn.Open strConn 

objConn.BeginTrans 'apa ini 
MainProgram 


If Err.Number = 0 Then 
    objConn.CommitTrans 
Else 
    objConn.RollbackTrans 
    Response.Write "&nbsp;&nbsp;" & Err.Description 
End If 

%> 
</body> 
</html> 
<% 


If Not objRS Is Nothing Then 
    If objRS.State=1 Then 
     objRS.close 
    End If 
    Set objRS=Nothing 
End If 


If Not objConn Is Nothing Then 
    If objConn.State=1 Then 
     objConn.close 
    End If 
    Set objConn=Nothing 
End If 


Private Sub MainProgram() 
    <form name="SQL_Form" onSubmit="return false;"> 
     <table> 
      <tr> 
       <td style="font-weight:bold">SQL Statement: </td> 
      </tr> 
      <tr > 
       <td><textarea rows=5 cols=70 name="SQL"><%=Server.HTMLEncode(strSQL)%></textarea><br> 
       <input class="button" type=button value="Query" onClick="Submit_Query();">&nbsp; 
       <input class="button" type=button value="Export" onClick="Submit_Execute();">&nbsp; 
       <input type=button style="cursor:hand;width:75px" value="Cancel" onClick="window.location='ConsultantMenu.asp'"></td> 
      <tr> 
     </table> 
    </form> 
    <% 
     If strSQL="" Then 
      Exit Sub 
     End If 


     If boolQuery = "True" Then 
      Dim intTotalRecord, intTotalFields, intRow 
      Dim x,i 
      objRS.CursorLocation = 3 'adUseClient 
      objRS.CursorType = 3  'adOpenStatic 
      objRS.LockType = 1   'adLockReadOnly 
      objRS.Open strSQL, objConn 
      Set objRS.ActiveConnection = Nothing 


      intTotalRecord=objRS.RecordCount 

      If intTotalRecord=0 Then 
       Response.Write "&nbsp;&nbsp;No Record Found." 
      Else 

       Response.Write "&nbsp;&nbsp;" & intTotalRecord & " Record(s) Found." 
       Response.Write "<br><table border=0 cellpadding=1 cellspacing=1 style=""font-size:10pt"">" 

       intTotalFields = objRS.Fields.Count - 1 

       Response.Write "<tr>" 
       For Each x in objRS.Fields 
        Response.Write "<td class=""outrim"">" & x.Name & "</td>" 
       Next 
       Response.Write "</tr>" 

       objRS.MoveFirst 
       intRow=1 
       Do Until objRS.EOF 

        Response.Write "<tr class=""Row_Class"" id=""Row_" & intRow & """ bgColor=""#e0e0e0"" onclick=""selectedValue(" & intRow & ")"">" 
        For i=0 to intTotalFields 
         Response.Write "<td nowrap>" & objRS(i) & "&nbsp;&nbsp;</td>" 
        Next 
        Response.Write "</tr>" 

        intRow=intRow+1 

        objRS.MoveNext 
       Loop 

       Response.Write "</table>" 
      End If 

     Else 
      Dim intTotalAffectRecord 
      objConn.Execute strSQL, intTotalAffectRecord 
      Response.Write "&nbsp;&nbsp;" & intTotalAffectRecord & " Record(s) affected." 
     End If 


End Sub 

%> 

enter image description here

Я хотел, чтобы экспорт пользователю их запрос на выборку в CSV-файлы, когда они нажимают кнопку экспорта, поэтому я создать страницу вызова csv.asp. Но теперь я просто хотел, если пользователь выбирает столбец mtel, тогда работает только оператор if else (mark as 'start here' в качестве комментария). Как я могу это сделать?

Dim strConn, strScriptName,strSQL 

strConn = Application("eDSNSMS") 

strSQL = Request.querystring("SQL") 

sub Write_CSV_From_Recordset(RS) 
    if RS.EOF then 
     exit sub 
    end if 

    dim RX 
    set RX = new RegExp 
     RX.Pattern = "\r|\n|,|""" 

    dim i 
    dim Field 
    dim Separator,strRow 

    do until RS.EOF 
     Separator = "" 
     for i = 0 to RS.Fields.Count - 1 
      Field = RS.Fields(i).Value & "" 
      if RX.Test(Field) then 
       Field = """" & Replace(Field, """", """""") & """" 
      end if 

      'start here 
      If Left(Field, 2) = "01" and InStr(Field, "-") <> 0 Then 
       if Len(Field) = 11 Then 
       Field = "6" & Field 
       Field = """" & Replace(Field, "-", "") & """" 
       else 
       Field = "" 
       end if 
      elseif Left(Field, 2) = "01" and InStr(Field, "-") = 0 then 
       if Len(Field) = 10 Then 
       Field = "6" & Field 
       else 
       Field = "" 
       end if 
      elseif Left(Field, 3) = "011" and InStr(Field, "-") <> 0 then 
       if Len(Field) = 12 Then 
       Field = "6" & Field 
       Field = """" & Replace(Field, "-", "") & """" 
       else 
       Field = "" 
       end if 
      elseif Left(Field, 3) = "011" and InStr(Field, "-") = 0 then 
       if Len(Field) = 11 Then 
       Field = "6" & Field 
       else 
       Field = "" 
       end if 
      elseif Left(Field, 2) <> "01" and IsNumeric(Field) = true then 
       Field = "" 
      elseif Left(Field, 2) <> "01" and InStr(Field, "-") <> 0 then 
       Field = "" 
      end if 
      Response.Write Separator & Field 
      Separator = "," 
     next 
     if (Field <> "") then 
     Response.Write vbNewLine 
     end if 
     RS.MoveNext 
    loop 
end sub 

Dim objRS, objConn 

set objConn = server.CreateObject("ADODB.Connection") 
objConn.ConnectionString = strConn 
objConn.Open 
set objRS = server.CreateObject("ADODB.RecordSet") 
objRS.Open strSQL, strConn, 0, 1 

Write_CSV_From_Recordset objRS 
Response.ContentType = "text/csv" 
Response.AddHeader "Content-Disposition", "attachment;filename=export.csv" 
%> 
+0

Я не совсем понимаю, о чем вы просите, можете ли вы быть более конкретным? – Jonathan

+0

@ Jonathan, потому что система может попросить пользователя ввести любой запрос выбора, который может быть любой таблицей и столбцом .. и кнопка экспорта может экспортировать любую запись, которую хочет пользователь ... но теперь я хочу, чтобы определенные вещи делали, когда пользователь выбирал столбец mtel из таблицы cocust ... – Jan

+0

@ Jonathan так, как я могу код, чтобы знать имя столбца ввода пользователя, такое же, как и mtel ... поэтому может быть запущен оператор if else – Jan

ответ

-1

Вы можете отслеживать выбор столбца различными способами. Вы можете использовать скрытое поле для отслеживания из asp. Когда пользователь выбирает столбец mtel, задайте значение скрытого поля, например, 1. Прочтите это значение в инструкции элементов управления (если это иначе) и примите решение.

Например, при выборе столбца с помощью JavaScript установите скрытое поле isColumnSelected на значение 1.

  • Не забудьте добавить поле hiddend в asp/HTML.

  • Считать значение isColumnSelected поля в осины и принять решение:

+0

, когда я только добавляю '' в csv.asp он выдает эту ошибку ** Ошибка компиляции Microsoft VBScript '800a0400' ** * * Ожидаемый отчет ** Jan

+0

Мне интересно, в каком месте я должен положить '' – Jan

+2

Я думаю, что это не работа в классике ASP? – Jan

0

Проблема у вас с этим подходом является то, что пользователь может извлечь данные, которые они хотят в любом количестве способами, не вы в состоянии защищать его.

Возможно, вашим лучшим выбором было бы проанализировать пункт SELECT и строго ограничить то, что может быть найдено по запросу в первую очередь. Простым методом для этого было бы иметь массив допустимых полей и разрешать только только эти поля присутствуют или удалять поля, которые там не принадлежат.

Я понимаю, что обработка строк в классическом ASP немного более назойлива, чем ASP.NET, но IMHO это сделало бы для лучшего и более безопасного приложения.

Смежные вопросы