28/01/2013 Development / asp3

Em um dos sistemas que venho trabalhando, transformei as imagens que são feito uploads em formato binário e na hora de fazer a leitura, criei um handler que transforma os binários em imagem.

Porem, percebi que isso está deixando o sistema lento e para fazer um testículo, transformei novamente todas as imagens que eram destaque para o formato jpg novamente.

Eis o código

//*************************************

<%
Server.ScriptTimeout = 9000
sql = "select * from tabMedia where booDestaque = 1"
openConnection()
set rs = server.createobject("adodb.recordset")
rs.open sql,conexao,3,3
Dim caminho : caminho = server.MapPath("uploadsFiles/")
while rs.eof = false

'***********************************************************************************************************
'***********************************************************************************************************
Dim objFSO
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Dim objTextStream
Set objTextStream = objFSO.CreateTextFile(caminho & "/" & rs("idMedia") & ".jpg", True)
'Display the contents of the text file
objTextStream.WriteLine BinaryToString(rs("binario"))
'Close the file and clean up
objTextStream.Close
Set objTextStream = Nothing
Set objFSO = Nothing


rs.movenext
wend

 

 '*********************************************************************************************
 'Transforma Binario em String
 '*********************************************************************************************
    Function BinaryToString(Binary)
      Const adTypeText = 2
      Const adTypeBinary = 1
     
      Dim BinaryStream
      Set BinaryStream = Server.CreateObject("ADODB.Stream")
     
        BinaryStream.Type = adTypeBinary
        BinaryStream.Open
        BinaryStream.Write Binary
        BinaryStream.Position = 0
        BinaryStream.Type = adTypeText
        BinaryStream.CharSet = "ISO-8859-1"
       
        'Save binary data To disk
        'BinaryStream.SaveToFile FileName, adSaveCreateOverWrite
     
      BinaryToString = BinaryStream.ReadText
    End Function

 

Espero que sirva!

 

02/09/2012 Development / asp3

Essa funçãozinha retorna a data e hora da modificação do arquivo. Isso é usada pra controle de cache! No caso, usei uma expressão regular pra trazer apenas os números, sem a barra da data / e os 2 : das horas/min/seg

<%
function getDateLastModified(file)

Set objER            = New RegExp
    objER.IgnoreCase    = True
    objER.Global        = True
    objER.Pattern        = "\D+"

dim fs,f
set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile(file)
getDateLastModified = objER.Replace(f.DateLastModified, "")
Set objER            = Nothing
set f=nothing
set fs=nothing
end function
%>

 

23/03/2012 Development / asp3

Salve, salve pra quem estiver lendo esse post! Vou falar um pouco sobre a experiência que estou tendo atualmente na criação de grids.

No projeto de reformulação do SIO eu comecei a mexer nessa parte de grids, que inicialmente era feita através de uma classe em Asp que simplismente retorna uma tabela com todos os dados e metodos que eu queria que o meu grid tivesse, ou seja, era uma verdadeira meleca, e até então eu achava a coisa ais linda da terra :-|

Com funcionava?

Set tbl = new WMTable()
tbl.ColNames = Array("Lj.", "Ref","Vagas")
tbl.ColAlign = Array("left", "left", "left")
tbl.ColWidth = Array("60", "60", "80")
tbl.ColFields = Array("txtLoja","referencia","txtCategoria")
tbl.ColText Array("  :txtLoja:","  :referencia:","  :txtCategoria:")
tbl.ImageAsc = "img/sort_asc.gif”
tbl.ImageDesc = "img/sort_desc.gif”
tbl.ControlID = "cod"
tbl.ConnectionString = Application("conexao")
tbl.Source = SQL
tbl.Paginate = True
tbl.PageSize = 100
tbl.JsFunction = "wmTable(':qString:');"
tbl.Create("tblImovel")
Set tbl = Nothing

e ele retorna uma tabela e eu simplismente dava $(algumacoisa).html(retorno)...óoooooooooooooh que blz! Esse retorno era em base 77kb!

Até que funcionava mesmo, só que nos padrões de desenvolvimento e, sobretudo em relação a desempenho, performance isso não é legal né! O certo é só retorna os  dados e pronto!

Então vamos partir pra outro modelo, que tal ExtJS!!!!

Achei uma classe na internet chamada ASPJSON, que você passa um objeto conexao e um sql e ele retorna a parada toda em json.


Fields : [
{ name: 'foto', type: 'string' },
{ name: 'destaque', type: 'string' },
{ name: 'lancamento', type: 'string' },
{ name: 'publicar', type: 'string' },
{ name: 'n_vagas', type: 'string' },
{ name: 'quartos', type: 'string' },
{ name: 'cidade', type: 'string' }],
columns:
[{ header: 'Loja', dataIndex: 'txtLoja' },
{ header: 'Ref', dataIndex: 'referencia' },
{header: 'Tipo', dataIndex: 'txtCategoria' },
{ header: 'Cidade', dataIndex: 'cidade' } ]

Supomos que a gente queira gerar um grid de grid({'url' : 'minhaUrl.asp', 'fields' : fields, 'columns' : columns, 'renderTo' : document.body});

Função que grã o grid

grid = function(options) {

    var store = new Ext.data.JsonStore({
        url: options.url,
        autoLoad: true,
        fields: options.fields
    });

    var grid = Ext.getCmp('griPanel_' + options.renderTo);
    if (grid) {
        grid.store
        grid.getView().refresh();
    }

    var grid = new Ext.grid.GridPanel({
        //renderTo: options.renderTo,
        region: center,
        store: store,
        id:'griPanel_' + options.renderTo,
        columns: options.columns,
        container: options.renderTo,

        bbar: new Ext.PagingToolbar({
            pageSize: 25,
            store: store,
            displayInfo: true,
            displayMsg: 'Visualizando {0} - {1} de {2}',
            emptyMsg: "Nenhum registro"
            //plugins: new Ext.ux.SlidingPager(),
            /*items: [
            '-', {
            pressed: true,
            enableToggle: true,
            //text: 'Show Preview',
            //cls: 'x-btn-text-icon details',
            toggleHandler: function(btn, pressed) {
            var view = grid.getView();
            view.showPreview = pressed;
            view.refresh();
            }
            }]*/
        })

    })

    var el = Ext.get(options.renderTo);
    var panel = new Ext.Panel({
        renderTo: options.renderTo,
        border: false,
        plugins: [new Ext.ux.plugins.FitToParent(el)],
        layout: 'fit',
        items: grid
    });
};

...Melzinho na chupeta!!!! Esse retorno é em base 10kb

Apesar de eu gostar bastante desse modelo, eu ainda acho que ExtJs é muito lento, porém é bonito pra caramba, mas tem que saber usar as paradas, encaixar as caixas e isso é complicadinho.

Então um modelo que eu particularmente venho usando é o MVC...A gente cria o modelo dos dados do grid e depois faz um merge com json, ou seja, você modelo a sua tabela do seu jeito que você quiser totalmente.

Então pra isso vamos utilizar o jQuery.tmpl() ou jQuery Template

Laudo.prototype.grid = function(args) {

    var that = this;
    var instanceId = that.instanceId;
    var template = ["<tr>",
                        "<td>${txtLoja}</td>",
                        "<td>${referencia}</td>",
                        "<td>${txtCategoria}</td>",
                        "<td>${cod}</td>",
                        "<td>${endereco}</td>",
                        "<td>${bairro}</td>",
                        "<td>${valor}</td>",
                        "<td>${number}</td>",
                        "<td>${foto2}</td>",
                        "<td>${fotoss}</td>",
                        "<td>${foto}</td>",
                        "<td>${destaque}</td>",
                        "<td>${lancamento}</td>",
                        "<td>${publicar}</td>",
                        "<td>${n_vagas}</td>",
                        "<td>${quartos}</td>",
                        "<td>${cidade}</td>",
                    "</tr>"].join("");

    var theader = ["<table>",
                        "<thead>",
                            "<tr>",
                                "<td>Loja</td>",
                                "<td>Ref</td>",
                                "<td>Tipo</td>",
                                "<td>Cód</td>",
                                "<td>Endereço</td>",
                                "<td>Bairro</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                                "<td>Loja</td>",
                            "</tr>",
                        "</thead>",
                        "<tbody></tbody>",
                    "</table>"].join("");

   _.Execute({ 'acao': 'gridLaudo', 'data': args, 'callback': function(resp) {

            var data = eval('(' + resp + ')'); //eu sei que isso é feio mas é só exemplo mesmo ;-)
            var tbody = $("#gridLaudo_" + instanceId).html(theader);
            jQuery.tmpl(template, data).appendTo("#gridLaudo_" + instanceId + " tbody");
        }
    });
Esse retorno é em base 7kb!

Espero que sirva!


 

13/10/2010 Development / asp3

Devolve um valor a indicar qual o tipo de variável que estamos a usar.
MeuCheck = VarType(300) ' Devolve 2.
MeuCheck = VarType(#10/19/62#) ' Devolve 7.
MeuCheck = VarType("VBScript") ' Devolve 8.

Os valores acima devolvidos são representativos de :
0 -> Empty (uninitialized)
1 -> Null (no valid data)
2 -> Integer
3 -> Long integer
4 -> Single-precision floating-point number
5 -> Double-precision floating-point number
6 -> Currency
7 -> Date
8 -> String
9 -> Automation object
10 -> Error
11 -> Boolean
12 -> Variant (used only with arrays of Variants)
13 -> A data-access object
17 -> Byte
8192 -> Array

Ainda temos os casos de adicao de tipos. Exemplo:

VbByte(17)+VbArray(8192) = 8209

8192 + 2 = 8194

Fiz esse post, porque estava fazendo uma aplicacao que guardava dados Binarios em uma Session e quando eu fazia response.BinaryWrite estava dando xabu!!! Pra voce saber se existe dados binarios dentro de uma variavel, eu fiz o seguinte if(varType(Session("meuId"))) = 8209 :-)...Plaaaay!

Espero que sirva de ajuda!

 

16/09/2010 Development / asp3

O problema: Um cliente solicitou que determinados arquivos nao poderiam ser baixados pelo usuario diretamente atraves da URL do browser. Ex: Um documento Word, o usuario clica com o botao direito no link e Salvar como. 

O desafio: Criar um mecanismo que bloqueasse o download, mas ao mesmo tempo, o usuario tivesse acesso ao conteudo.

A solucao: Assim que o administrador do sistema faz o upload do arquivo para a aplicacao, o arquivo fica salvo no banco de dados em formato binario, e o arquivo original eh excluido do servidor. Quando solicitado o conteudo, o script leh o formato binario e atraves do content-type setado, o registro eh visualizado.

Mas dae, tuh fica pensando, grande merda, hehehehe...o binario esta no temporario da maquina do cara, ou no caso de uma imagem, soh dar um print na tela neh...CLARO, exatamente! Mas o fato eh que os arquivos estavam sendo linkados em outra pagina, de outro site, e agora os arquivos tem nome randomicos, ou seja, naum existem, soh acessando a pagina mesmo ;-)

Segue o script abaixo!

'*************************************************************
'TRANFORMANDO O ARQUIVO NO FORMATO BINARIO
'DECLARANDO VARIAVEIS
Dim ObjStr
Dim ds_addr_imagem
Dim varBuffer
Dim Ors
Dim oConn

'CRIANDO O OBJETO "STREAM"
Set ObjStr = Server.CreateObject("ADODB.Stream")

'INDICANDO O ENDEREÇO DA IMAGEM
ds_addr_imagem = Server.MapPath("17910-rs.jpg")

'INDICA O TIPO DE DADO QUE O OBJETO DEVERÁ LER
ObjStr.Type = 1'‘AdBinary – Binário

'ABRE O OBJETO
ObjStr.Open

'LE INFORMAÇÕES DO ARQUIVO
ObjStr.LoadFromFile ds_addr_imagem

'DECARREGA INFORMAÇÕES NA VARIAVEL
varBuffer = ObjStr.Read

'DESTROI O OBJETO "STREAM"
objStr.Close
Set ObjStr = nothing

'*************************************************************
'MOSTRANDO O ARQUIVO COM OUTRO NOME
Response.Buffer = True
Response.ContentType = "image/gif"
Response.AddHeader "Content-Disposition", "inline; filename =" & getRandom() & ".gif"
Response.CacheControl = "public"

Response.BinaryWrite varBuffer 

Espero que ajude!

 

13/06/2010 Development / asp3

Depois de bater muito a cabeça tentando fazer em .net, utilizando WebService, decidi fazer em asp normal mesmo.

Function CalculaSedex(Local,Peso)

if Local = "" or Peso = "" or Peso = 0 then
    
CalculaSedex = 0
    
exit function
end if

'CONSTANTES
Dim url, nCdServico, sCepOrigem, sCepDestino, nVlPeso, CdFormato, nVlComprimento, nVlAltura, nVlLargura, sCdMaoPropria, sCdAvisoRecebimento, nVlDiametro, nVlDeclarado, StrRetorno

nCdServico = "41106"
sCepOrigem = "22631020"
sCepDestino = Local
nVlPeso = Peso
CdFormato = 1
'Formato caixa/pacote, 2 Formato rolo/prisma
nVlComprimento = 0
nVlAltura = 0
nVlLargura = 0
sCdMaoPropria =
"N"
sCdAvisoRecebimento = "N"
nVlDiametro = 0
nVlDeclarado = 0
StrRetorno =
"xml"
url = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?
nCdEmpresa=99&
sDsSenha=99&
sCepOrigem="
&sCepOrigem&"&
sCepDestino="
&sCepDestino&"&
nVlPeso="
&Peso&"&
nCdFormato=1&
nVlComprimento=16&
nVlAltura=2&
nVlLargura=12&
sCdMaoPropria=N&
nVlValorDeclarado=0&
sCdAvisoRecebimento=N&
nCdServico="
&nCdServico&"&
nVlDiametro=0&StrRetorno=xml"

Set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
Set xmlResult = Server.CreateObject("MSXML2.DomDocument.3.0")

xmlHttp.open "GET", url, true
xmlHttp.Send()
xmlHttp.waitForResponse 4
xmlHttp.waitForResponse 200
xmlResult.loadXML(xmlHttp.ResponseText)

if xmlHttp.ResponseText <> "" or resultado <> "-2" then
     valor = xmlResult.SelectNodes("//Valor").item(0).Text
end if

set xmlHttp = nothing
set xmlResult = nothing

'RETORNO
CalculaSedex = valor

End Function

Caso queira saber todos os parâmetros de retorno // response.write xmlHttp.ResponseText

 

22/07/2009 Development / asp3

Quem já trabalha com expressão regular, meus parabéns!!!!

Segue uma funçãozinha que eu fiz pra poupar os replaces vindo do Banco.

<%
    Dim palavra
    palavra = "<a href='pagina.asp?id=:id:'>:empresa:</a>"
   
    Function MyReplace(ByVal str)
        Set regEx = New RegExp
        regEx.Pattern = ":[^:]+:"
        regEx.IgnoreCase = True
        regEx.Global = True                               
       
        Retorno    = RegEx.Replace(str, "teste")
       
        MyReplace = Retorno
       
        Set regEx = Nothing
    End Function
    
    response.write MyReplace(palavra) 'Modo de usar ;-)
%>

25/09/2008 Development / asp3

Projeto: FH
Classe : Controles


' Importe as referencias
' ******************************************************
' * Microsoft Scripting Runtime
' * Microsoft Active Server Pages


' Cole o código abaixo
' ******************************************************
Private oAttributes
    Private sQuery
    Private objCombo
   
    Private Sub Class_Initialize()
        Set oAttributes = CreateObject("Scripting.Dictionary")
    End Sub

    Public Property Let setAttribute(attributeName, attributeValue)
        oAttributes.Add attributeName, attributeValue
    End Property
   
    Public Property Let SQL(query)
        sQuery = query
    End Property

    Public Function Create()
       
        objCombo = "<select"
       
        For Each sKey In oAttributes
            objCombo = objCombo & Space(1) & sKey & "=""" & oAttributes(sKey) & """"
        Next
        objCombo = objCombo & ">" & vbCrLf
       
        objCombo = objCombo & "<option>" & sQuery & "</option>"
       
        objCombo = objCombo & "</select>"
       
        Create = objCombo
       
    End Function

 

Clique em File e depois Make FH.dll
Procure salvar esta dll na pasta System32 e depois registre-a.
Pronto!!!!

Agora na página.asp

<%
Set oCombo = Server.CreateObject("FH.Controles")
oCombo.setAttribute("class") = "cssCombo"
oCombo.setAttribute("onchange") = "suaFunction()"
response.write oCombo.Create
%>

24/09/2008 Development / asp3

Segue um exemplo de como chamar desenvolver uma classe para gerar uma combo. Esse exemplo também pode ser aplicado em uma dll, assim basta somente invocar a dll passando os parametros e atributos.

<%
Class FHCombo
 
 Private oAttributes
 Private sQuery
 
 Private Sub Class_Initialize()
  Set oAttributes = Server.CreateObject("Scripting.Dictionary")
 End Sub 

 Public Property Let setAttribute( attributeName, attributeValue )
  oAttributes.Add attributeName, attributeValue
 End Property
 

 Public Property Let SQL( query )
  sQuery = query
 End Property


 Public Sub Create
  
  response.write "<select"
  
  For Each sKey In oAttributes
   Response.Write Space(1) & sKey & "="""& oAttributes(sKey) &""""
  Next
  response.Write ">" & vbCrLf
  
  response.write "<option>" & sQuery & "</option>"
  
  response.write "</select>"
  
 End Sub

End Class


Set cb = new FHCombo
cb.setAttribute("class") = "cssCombo"
cb.setAttribute("onchange") = "alerta()"
cb.SQL = "Select * from dados"
cb.Create
%>

10/05/2008 Development / asp3

Essa é uma função pra quem quer fazer um menu estilo arvore, bem rapidinho sem ter que ficar pensando mto.

O banco fica da seguinte maneira

idMenu - autonumeração
txtCategoria - text
codSubcategoria - Numero (Aqui vem a referencia do idMenu)

  sub geraMenu(cod)
    set rs = Server.CreateObject("Adodb.RecordSet")
    SQL = "Select * from tabMenu where codSubCategoria = "&cod
    rs.open sql, conexao,3,3
   
    while rs.eof = false
        response.write rs("txtCategoria") & "<br>"
        geraMenu(rs("idMenu"))
    rs.movenext
    wend
   
    rs.close
    set rs = nothing
  end sub
 
  call geraMenu(0)