sexta-feira, 27 de dezembro de 2002

0

Função de Checagem de CNPJ


A função checkCNPJ() faz a checagem do CNPJ. Retorna true se estiver ok, ou false, caso contrário.

 

   function getNumber( number , len )
   {
      var result = '';
      var num, i;

 

      for ( i = 0 ; i < number.length ; i++ )
      {
         try
         {
            num = parseInt( number.substring( i, i + 1 ) );
            result += num;
         }
         catch (exception)
         { }
      }
      if ( result.length != len )
      {
         // Complet with zeros
         result = '000000000000000' + result;
         var newLen = result.length;
         result = result.substring ( newLen - len , newLen );
      }
      return result;
   }
  
   function check1( value )
   {
      var count = 1;
      var len = value.length;
      var first;
      if ( len > 1 )
      {
         first = value.charAt( 0 );
      }
      else
      {
         return false;
      }
      for ( var i = 1; i < value.length ; i++ )
      {
         if ( value.charAt( i ) == first )
         {
            count++;
         }
      }

 

      if ( count == len )
      {
         return false;
      }
     
      return true;
   }
  
 
   function checkCNPJ( cnpj )
   {
      var cnpjCalc;
      var cnpjAdd;
      var i;
      var cnpjDigit;
  
      cnpj = getNumber( cnpj , 14 );
     
      check1( cnpj );

 

      // Get only numeric digits
      cnpjCalc = cnpj.substring( 0 , 12 );
     
      // First part of digit verification
      cnpjAdd = 0;
      for( i = 0 ; i < 4 ; i++ )
      {
         cnpjAdd += parseInt( cnpjCalc.substring( i , i + 1 ) ) * (5 - i);
      }

 

      for( i = 0 ; i < 8 ; i++ )
      {
         cnpjAdd += parseInt( cnpjCalc.substring( i + 4 , i + 4 + 1 ) ) * (9 - i);
      }
     
      // Fisrt digit
      cnpjDigit = 11 - (cnpjAdd % 11);
      
      if ( cnpjDigit == 10 || cnpjDigit == 11 )
      {
         cnpjCalc += '0';
      }
      else
      {
         cnpjCalc += cnpjDigit;
      }
     
      // Second part of digit verification
      cnpjAdd = 0;
      for ( i = 0 ; i < 5 ; i++ )
      {
         cnpjAdd += parseInt( cnpjCalc.substring( i , i + 1 ) ) * (6 - i);
      }
      for ( i = 0 ; i < 8 ; i++ )
      {
         cnpjAdd += parseInt( cnpjCalc.substring( i + 5, i + 5 + 1 ) ) * (9 - i);
      }
     
      // Second digit
      cnpjDigit = 11 - (cnpjAdd % 11);
      if ( cnpjDigit == 10 || cnpjDigit == 11 )
      {
         cnpjCalc += '0';
      }
      else
      {
         cnpjCalc += cnpjDigit;
      }
     
      return ( cnpj == cnpjCalc );
   }

 

--
Francisco Pinto Araújo Júnior
Diretor de Tecnologia - Softexport Informática
Msc. Ciência da Computação
SCPJ2
Fone/Fax: +55 85 458 1947
pinto@softexport.com.br
www.softexport.com.br


Esta matéria foi postada originalmente no ASP4Developers por Francisco Pinto Araujo Junior (site), que na época era "Analista de Sistemas". Hoje, vai saber...

0

Checagem de CPF

A função checkCPF() faz a checagem do CPF. Retorna true se estiver ok, ou false, caso contrário.

 


 


function checkCPF(strNumber)
{
   var result = true;
   var digit;
   var calc;

 

   strNumber = getNumber(strNumber);
   if (strNumber.length < 4) {
      result = false;
   }

 

   digit = parseInt(strNumber.substring(strNumber.length-2, strNumber.length));
   number = strNumber.substring(0 , strNumber.length - 2);

 

   calc = parseInt(getCPFDigit(number));

 

   if ( digit != calc )
   {
      result = false;
   }
   return result;
}

function getNumber(strNumber)
{
   var number;
   var strRetNumber="";

 

   for (var i=0 ; i < strNumber.length ; i++)
   {
      number = parseInt(strNumber.charAt(i));
      if ( number )
      {
         strRetNumber += strNumber.charAt(i)
      }
      else
      {
         if ( number == 0 )
         {
            strRetNumber += strNumber.charAt(i)
         }
      }
   }
   return strRetNumber;
}

 

function getCPFDigit(strNumber)
{
   var i;
   var digit1;
   var digit2;
   var total;
   var result;
  
   strNumber = '000000000' + getNumber(strNumber)
   strNumber = strNumber.substring(strNumber.length - 9, strNumber.length)

 

   total=0
   for (i = 1 ; i < 10; i++)
      total = total + strNumber.substring(i - 1 , i) * (11 - i);

 

   digit1 = total * 10 % 11;
   if (digit1 == 10)
   {
      digit1 = 0;
   }

 

   aux = digit1.toString(10);
   strNumber = strNumber + aux.substring(aux.length - 1 , aux.length);

 

   total=0;

 

   for (i = 1 ; i < 11 ; i++)
      total = total + strNumber.substring(i - 1 , i) * (12 - i);

 

   digit2 = total * 10 % 11;
   if (digit2 == 10)
   {
      digit2 = 0;
   }

 

   aux = digit1 * 10 + digit2;
   caux = aux.toString(10);
   result = caux.substring(caux.length - 2 , caux.length);

 

   return result;
}

 


--
Francisco Pinto Araújo Júnior
Diretor de Tecnologia - Softexport Informática
Msc. Ciência da Computação
SCPJ2
Fone/Fax: +55 85 458 1947
pinto@softexport.com.br
www.softexport.com.br


Esta matéria foi postada originalmente no ASP4Developers por Francisco Pinto Araujo Junior (site), que na época era "Analista de Sistemas". Hoje, vai saber...

quinta-feira, 26 de dezembro de 2002

0

Zero a Esquerda (vários modelos e situções)

Abaixo segue algumas situações e modelos onde se aplicar o zero a esquerda, outras podem ser consultadas neste endereço abaixo:
http://www.freecode.com.br/forum/viewtopic.php?t=21

<%
Function ZerosEsquerda(pModo, pFinal)
Dim intCont, intResultado
 If (pFinal - Len(pModo)) < 0 Then
  intResultado = ""
 Else
  intResultado = ""
  For intCont = 1 To (pFinal - Len(pModo))
   intResultado = intResultado + "0"
  Next
  intResultado = intResultado + pModo
 End If
ZerosEsquerda = intResultado
End Function


Response.Write ZerosEsquerda("16", 2)
' por Rafael Trindade
'
rafael@freecode.com.br
%>


'----------------------------------
<%
Function FormatoZeros(num,zeros)
dim aux,i
  aux = 1
 for i = 1 to zeros
  aux = aux * 10
 next
 FormatoZeros = Mid(aux+num,2,zeros+1)
End Function
' por KDU
%>


'----------------------------------
<%
num = 12345


Function Completa(str,n)
 if Len(str) < n then
  For i = 1 to n - Len(str)
   gera = gera & 0
  next
   gera = gera & str
 else
  gera = str
 end if
Completa = gera
End Function
response.write Completa(num,10)
' por RockLoko
'
rock.loco@bol.com.br
%>


'----------------------------------
<%
Dim Num1, Num2
Randomize()
Num1 = Int((999999 * Rnd) + 1)


If Len(Num1) < 6 Then
 Num2 = 6 - Len(Num1)
    For I = 1 to Num2
  Num1 = 0 & Num1
 Next
End If
' por Jonh Petrucci - Clessio
%>


'----------------------------------
<%
Dim myArray, valores
valores = "1,15,216,1548,54872,8787974"
MyArray = Split(valores,",")


Function Zeros(str)
   Dim x, acrZeros
   if isNull(str) Then Exit Function
   For x = 0 To Ubound(str)
      IF Len(str(x)) > Len(maior) Then
         maior = str(x)
      End IF
   Next
   For x = 0 To Ubound(str)
      acrZeros = string(Len(maior) - Len(str(x)), "0") & str(x)
      response.write acrZeros &"<br>"
   Next
End Function


response.write Zeros(MyArray)
' por Márcio Lima (Guardião)
'
guardiao@freecode.com.br
%>


'----------------------------------
<%
Function adZero(sText, sQuant)
 if isNull(sText) Then Exit Function
    adZero = string(sQuant - len(sText), "0") & sText
End Function


'Usando:
Response.Write adZero("5789", 9)
'Resultado:
' 000005789
' por Marcelo Santos (MPSDesign)
'
marcelo@mpsdesign.com.br
%>



Esta matéria foi postada originalmente no ASP4Developers por Marcio Lima (Guardião) (site), que na época era "Programador ASP e VBA, apaixonado por Design, futurismo e ficção.
". Hoje, vai saber...

quinta-feira, 19 de dezembro de 2002

0

Alternando a cor das linhas de uma tabela

Existem muitas formas de alternar a cor das linhas de uma tabela que recebe o resultado de uma consulta. Essa é uma forma que ocupa pouco código.


<%  i = 0 
  do while not rs.eof
     if i mod 2<>0 then
          cor = "#FFFFFF"
     else
          cor = "#e1e1e1"
     end if %>


<tr bgcolor="<%=cor%>">


<%
i = i+1
rs.movenext : loop
%>



Esta matéria foi postada originalmente no ASP4Developers por Mateus Castriani (site), que na época era "Programador ASP, PHP, C#, C++ e webdesigner. Guitarrista nas horas vagas, segue o lema: Mulher, Futebol e Rock 'n Roll .". Hoje, vai saber...

quarta-feira, 18 de dezembro de 2002

0

Menu Java Script

Essa é uma solução simples para fazer um menu em java script através de vetores. O exemplo é bem simples e estático, mas pode ser útil para construir menus dinâmicos.


<table>
<script language="JavaScript" type="text/javascript">
 var opcao=new Array();
 var url=new Array();
  
  opcao[0]="Opção 1";
  opcao[1]="Opção 2";
      
  url[0]="url1.asp";
  url[1]="url2.asp";
  
  for(var i=0;i<opcao.length;i++){
     document.write ("<tr>");
              document.write ("<td bgcolor='#bbbbbb'><a href="+url[i]+">"+opcao[i]+"</a></td>");
              document.write ("</tr>");
  }
</script> 
</table>



Esta matéria foi postada originalmente no ASP4Developers por Mateus Castriani (site), que na época era "Programador ASP, PHP, C#, C++ e webdesigner. Guitarrista nas horas vagas, segue o lema: Mulher, Futebol e Rock 'n Roll .". Hoje, vai saber...

terça-feira, 17 de dezembro de 2002

0

Trabalhando com conexões a bancos de dados


INTRODUÇÃO
Ai vão algumas dicas de como se trabalhar com conexões com o banco de dados, sem causar problemas ao usuário ou derrubar a performance da aplicação/banco de dados.

CONTEÚDO
Já ouvi várias discussões sobre qual a melhor maneira de se trabalhar com conexões. É claro que existem alguns meios que farão com que você perca um pouco da performance, outras criarão risco em relação a disponibilidade da aplicação.

Gostaria de colocar neste artigo, minhas experiências e os prós e contras de algumas formas de se trabalhar com a conexão com o banco de dados.

UMA CONEXÃO PARA TODAS AS PÁGINAS

O que seria uma conexão para todos usuários?
Creio que muita gente trabalha desta maneira, onde você cria apenas um objeto de conexão dentro do objeto Application e o utiliza em todas páginas. Normalmente o objeto de conexão é instanciado é criado no código do arquivo Global.asa.

Prós
Facilita a manutenção do código, por exemplo, quando mudamos um banco de dados Access de diretório ou trocamos a senha do banco de dados, ao invés de mudarmos esta senha em vários locais.

Contras
Em alguns casos (Access especificamente) o banco de dados limita a quantidade de acessos a determinada conexão com o banco de dados, caso no seu site exista uma grande quantidade de visitas simultâneas, existirá uma grande possibilidade dele ficar indisponível para alguns usuários devido a um erro de conexão com o banco de dados.
Certamente será necessário um tratamento em todas as páginas que verifique a conexão com o banco de dados, caso ela tenha caído (o que pode ocorrer com mais facilidade com alguns tipos de banco) a conexão deverá ser aberta novamente.


UMA CONEXÃO PARA CADA ACESSO

Algo muito normal entre os programadores ASP é criar uma conexão dentro do objeto Session, do mesmo modo que uma conexão para todas as páginas que é criada dentro da rotina Application_OnStart dentro do Global.asa, esse modo de trabalhar é colocado dentro da rotina Session_OnStart.

Prós
Facilita a manutenção do código, por exemplo, quando mudamos um banco de dados Access de diretório ou trocamos a senha do banco de dados. Ao invés de mudarmos esta senha em vários locais.
Evitamos problemas com quantidade de acesso simultâneos na mesma conexão.
Caso a conexão caia, perderemos apenas a conexão daquela sessão (perdendo apenas um usuário) e não vários quando como criamos apenas uma conexão.

Contras
Utilização excessiva da memória do servidor WEB, pois diferente da conexão instanciada dentro da coleção contents do objeto application, para cada sessão no seu website será criada uma conexão, e depois que o usuário sai do website ou fecha seu browser, por padrão, a sessão irá expirar depois de 20 minutos de inatividae, causando um excesso de conexões abertas e objetos instanciados na memória do servidor.


UMA CONEXÃO PARA CADA PÁGINA/ACESSO
Todas as páginas abrirão a conexão com o banco de dados. Ou é colocado no início do código de todas as páginas a conexão com o banco de dados, o que dificulta a manutenção do código, o mais normal nessa forma de desenvolver, é criar um arquivo onde a conexão é aberta e outro arquivo que irá fechar a conexão com o banco de dados e depois colocamos um server include ( <!-- #include file="openconn.asp" -->).
Eu normalmente trabalho desta forma sempre, pois considero a melhor, mas essa é só a minha opinião e creio que existam formas melhores para se trabalhar e várias situações que possam alterar a forma com que trabalhamos.

Prós
Evitamos todos os contras dos outros métodos acima, inclusive o consumo da memória do servidor WEB pois o objeto é criado somente por alguns momentos e depois você fecha a conexão e destrói o objeto (set conn = Nothing).

Contras
A quantidade de conexões com o banco de dados aumenta e pode haver uma perda de performance, pois toda vez que o usuário solicita uma página a conexão será aberta antes.
Caso a conexão com o banco de dados não seja fechada no final das páginas, várias conexões ficarão abertas por um certo tempo.

Este é apenas o meu ponto de vista sobre algumas formas de se trabalhar com as conexões utilizadas nas suas páginas ASP.



Esta matéria foi postada originalmente no ASP4Developers por André Guergolet (site), que na época era "Desenvolvedor de aplicativos voltados a WEB à 3 anos. Atualmente trabalha com aplicativos de monitoração de redes utilizando .NET e outros recursos.". Hoje, vai saber...

quarta-feira, 27 de novembro de 2002

0

Pare de concatenar strings SQL! (Versão VBScript)

Gostei tanto da função enviada pelo Elcio Luiz Ferreira (em JScript) que resolvi refazê-la em VBScript:


<%
'Autor: Fabio A Lopes
'Email: fabio@encode.com.br

Function ExpSQL(sql)
  Dim rg, mts, mt, varnom, varval, varsql
  Set rg = New RegExp
  rg.Pattern = "[=\s]@([\d\w]*)"
  rg.IgnoreCase = True
  rg.Global = True
  Set mts = rg.Execute(sql)
  For Each mt in mts
    varsql = trim(replace(mt.Value,"=",""))
    varnom = replace(varsql,"@","")
    varval = eval(varnom)
    If VarType(varval) = 8 Then varval = "'" & varval & "'"
    sql = replace(sql,varsql,varval,1,1,1)
  Next
  ExpSQL = sql
  Set mts = nothing
  Set rg = nothing
End Function
%>


Como usar:


<%
nome=request.QueryString("nome")
codigo=request.QueryString("codigo")
preco=request.QueryString("preco")

sql=ExpSQL("update produto set nome=@nome, preco=@preco where codigo=@codigo")
conn.Execute(sql)
%>


Esta matéria foi postada originalmente no ASP4Developers por Fabio A Lopes (site), que na época era "analista programador... viciado em internet". Hoje, vai saber...

quarta-feira, 20 de novembro de 2002

0

Importar .Txt

Ola pessoal, sou novo aqui no site, e quero contribuir com algo que quebrei a cabeça um bom tempo até conseguir fazer! Espero poder ajudar alguém com esse código! Abraços a todos


 


<%
'Selecionando todos os registros da tabela, no nosso caso vou importar os Clientes
executar = "select * from clientes"
set rs = server.createobject("ADODB.Recordset")
rs.open executar, conn, 3, 3


'Bom no nosso caso eu preciso deletar todos os registros antes de importa-los novamente
'Se você não precisar pode tirar essa parte
sql = "delete from clientes"
conn.execute(sql)


'Aqui eu crio o objeto, defino onde está o .txt
Set fs = Server.CreateObject("Scripting.FileSystemObject")
caminho = Server.Mappath("txt/clientes.txt")
Set txt = fs.OpenTextFile(caminho, 1,0)


'É aqui que eu leio o txt e gravo no banco
while (not txt.AtEndOfStream) and response.isclientconnected()
 linha_txt = txt.readline
 arrayx = split(linha_txt,"|") 'No meu .txt o caracter que separa cada campo é um |, se no seu for outro é so colocar aqui
  
 'Abro um novo registro e coloco os dados do txt na tabela, cara array é um campo ou uma coluna do txt
 'Se o seu .txt tem por exemplo Codigo | Nome
 'fica assim
 'rs.addnew
 'if arrayx(0) <> "" then rs("codigo") = array(0)
 'if arrayx(1) <> "" then rs("nome") = array(1)
 'rs.update
 'Você vai modificar de acordo com o .txt
 rs.addnew
  if arrayx(0) <> "" then rs("codigo") = arrayx(0)
  if arrayx(1) <> "" then rs("razao") = arrayx(1)
  if arrayx(2) <> "" then rs("nome") = arrayx(2)
  if arrayx(3) <> "" then rs("municipio") = arrayx(3)
  if arrayx(4) <> "" then rs("uf") = arrayx(4)
  if arrayx(5) <> "" then rs("codatividade") = arrayx(5)
  if arrayx(6) <> "" then rs("atividade") = arrayx(6)
  
 rs.update
wend 


txt.close


set txt = nothing
set fs = nothing


conn.close
set conn = nothing
%>



Esta matéria foi postada originalmente no ASP4Developers por Márcio Fábio Althmann (site), que na época era "Programador ASP, adoro trabalhar com Flash, principalmente combinar as duas tecnologias.
E amo Heavy Metal! hehe". Hoje, vai saber...

domingo, 17 de novembro de 2002

0

Montando uma classe de TreeView com ASP e XML

Uma das tarefas mais "chatas", na parte de layout, é a exibição de dados em treeviews, uma lista de dados hierarquizados. Neste tutorial, mostraremos como criar um classe em VBScript, para adicionar e remover elementos de um treeview. Posteriormente, os dados da treeview, em XML, serão exibidos via XSL, com a rotina de navegação sendo feita via JavaScript.

Construção da Classe TreeView

Um recurso muito pouco usado no VBScript, mas muito poderoso, é a possibilidade de criarmos classes, que é uma boa para encapsularmos trechos de códigos, evitando repetições desnecessárias e aumentando a reutilização do código. Nesta primeira parte, iremos construir uma pequena classe, que será responsável pela adição/remoção de itens do nosso treeview. Começamos pela declaração da classe e das variáveis de instância:

<%

Class TreeView

 Private XMLDoc
 Private XSLDoc
 Private workNode
 Private InsertPoint

 '... inserir as demais rotinas aqui ...'

End Class

%>

Nada de complicado: declamos a classe TreeView e definimos algumas variáveis. Note apenas que, com o prefixo Private, essas variáveis são acessíveis apenas dentro do código da classe.

Private Sub Class_Initialize()
   set XMLDoc = Server.CreateObject( "MSXML2.DOMDocument" )
   XMLDoc.async = false
   XMLDoc.appendChild XMLDoc.CreateElement( "root" )
End Sub

Private Sub Class_Terminate
   set XMLDoc = nothing
   set XSLDoc = nothing
End Sub

Aqui, nos aprofundamos mais um pouco. A rotina Class_Initialize() é chamada sempre que criamos uma nova instância desta classe, e é responsável pela criação do objeto XML que conterá os dados do treeview. Como o objeto inicialmente é vazio, criamos o elemento "root", que armazenará os demais elementos. A rotina Class_Terminate() é executada quando essa classe é destruída, isto é, quando setando o objeto que a armazena como nothing. Isso assegura que a classe irá liberar a memória alocada para os objetos criados internamente à classe e constitui um bom hábito de programação.

Public Sub XSLData( cPath )
   set XSLDoc   = Server.CreateObject("MSXML2.DOMDocument")
   XSLDoc.async = false
   XSLDoc.load ( cPath )>
   If XSLDoc.parseError <> 0 then
      Response.Write XSLDoc.parseError.srcText & "<br />" & _
                     XSLDoc.parseError.reason & " Linha " & _
                     XSLDoc.parseError.line & " Col " & Object.parseError.linepos
      Response.End
   End If
End Sub

Aqui criamos nosso primeiro método, que pode (e será!) chamado externamente. Para quem acompanhou nossos demais tutoriais, provavelmente verá que esta rotina é muito parecida com a LoadXMLData. De fato, é a mesma rotina, onde apenas mudamos o nome da variável que receberá o objeto XML com os dados do arquivo XSL, cujo local no disco que passamos como parâmetro. Esse arquivo XSL será detalhado na próxima parte do tutorial.

Com os métodos básicos criados, passamos então para as rotinas necessárias para a inserção de elementos no objeto XML.

Public Sub AddItem( NodeName, ItemName, Title, Description )
   set workNode = XMLDoc.selectSingleNode( "//node[ @name = " & FormatString( ItemName ) & " ]" )
   if workNode is nothing then
      set workNode = XMLDoc.createElement( "node" ) with workNode
           .setAttribute "name" , ItemName
           .setAttribute "title" , Title
           .setAttribute "description", Description
      end with
      set InsertPoint = XMLDoc.selectSingleNode( "//node[ @name = " & FormatString( NodeName ) & " ]" )
      'Novo node principal ou não encontrou pai
      if len( NodeName & "" ) = 0 or ( InsertPoint is nothing ) then set InsertPoint = XMLDoc.selectSingleNode( "//root" )
      InsertPoint.appendChild workNode
   end if
End Sub


Essa será a rotina responsável por acrescentar elementos na estrutura. O parâmetro ItemName, informa qual será o nome único do node que estamos inserindo. Caso já hava um node com o mesmo nome, não faremos nada, pois ocorreu um erro na lógica da implementação da classe, por parte do programador que está usando a classe. Caso ainda não exista um node com o atributo name, criamos um novo elemento. Resta saber onde inseri-lo.

Esta tarefa é feita pelo trecho em negrito. Caso não encontre o node informado no parâmetro NodeName, ou se o mesmo for vazio, iremos inseri-lo no node principal, do contrário, colocaremos dentro do node informado. Essa rotina é a responsável pela hierarquização dos itens do treeview e é fundamental para o funcionamento da classe.

Public Function ExistItem( ItemName )
   set workNode = XMLDoc.selectSingleNode( "//node[ @name = " & FormatString( ItemName ) & " ]" )
   ExistItem = not ( workNode is nothing )
End Function
Public Sub DelItem( ItemName )
   set workNode = XMLDoc.selectSingleNode( "//node[ @name = " & FormatString( ItemName ) & " ]" )
   if not ( workNode is nothing ) then workNode.parentNode.removeChild workNode
End Sub


Esses dois métodos são responsáveis pela verificação se um determinado item do treeview existe e por excluir um node da árvore, respectivamente. Como são métodos públicos, podem ser acessados externamente ao código da classe.

Public Default Function BuildTree()
   BuildTree = XMLDoc.transformNode( XSLDoc )
End Function
Private Function FormatString( texto )
   FormatString = chr(39) & replace( replace( texto, chr(39), chr(39) & chr(39) ), "\", "\\" ) & chr(39)
End Function

Public Function DumpIt()
   DumpIt = XMLDoc.XML
End Function


Com esses três últimos métodos, terminamos a implementação da classe. O primeiro é responsável pela transformação do XML em HTML e baseia-se no arquivo XSL que iremos discutir na próxima parte deste tutorial. O FormatString apenas repete as aspas simples em um nome de node passado, cuidando para que o caracter "\" não apareça sozinho, pois ele seria interpretado como indicador de uma caracter literal, implicando em problemas, caso fossemos mostrar uma árvore de diretórios, usando o nome e path do arquivo como nome do item (uma vez que é único). O método DumpIt é usado apenas para depurarmos o conteúdo do objeto XML, apenas retornando seu conteúdo.

Assim, criamos a classe VBScript do ASP que irá gerenciar a árvore de itens, para posterior exibição. Ainda falta a rotina em JavaScript que irá funcionar em client-side, e que irá mostrar/esconder os itens do treeview, caso um nó seja selecionado:

<!--
function treeview( obj ){
 var dAll = document.all.tags("LI");
 for( var i=0; i < dAll.length; i++ ){
    if( dAll[ i ].id.substr( 0, obj.id.length + 1 ) == ( obj.id + '.' ) ){
        dAll[ i ].style.display == '' ? dAll[ i ].style.display = "none": dAll[ i ].style.display = '';
    }
 }
 obj.src.indexOf( 'DirOpened.gif' ) > -1 ? obj.src = 'imagens/DirClosed.gif': obj.src = 'imagens/DirOpened.gif';
}
// -->


Este código deve ser salvo em um arquivo chamado treeview.js e será usado na terceira parte do tutorial. Basicamente, ele troca a imagem do node selecionado (de um ícone que representa uma pasta aberta para um representativo de pasta fechada) e altera a propriedade display dos elementos filhos do mesmo.

Acabamos aqui a construção da classe. Segue um pequeno resumo do que vimos:



  • Aprendemos a criar classes em VBScript e a limpar os objetos usados quando a instância da classe é destruída.

  • Criamos um documento XML vazio e adicionamos um node "root" ao mesmo, para receber os demais itens do treeview.

  • Criamos as rotinas responsáveis pela manutenção da árvore de itens que será transformada no treeview.

  • Montamos uma pequena rotina em JavaScript, que o browser client irá executar quando o usuário clicar em um item que possua subitens.
Criando a folha de estilo XSL

Na primeira parte deste tutorial, criamos o código VBScript para implementar a classe TreeView no ASP. Nesta parte, iremos criar a folha de estilo (XSL), que será responsável por transformar o documento XML criado em HTML. Veremos que podemos trabalhar muito bem com estruturas de dados irregulares usando os recursos de recursividade do XSL.

Para criamos o efeito de "árvore", usaremos o elemento <UL> do HTML, para gerarmos a árvore hierarquica de itens. Neste exemplo, mantemos os caracteres indicativos de lista, apenas para visualizarmos melhor os itens. Esses caracteres podem ser retirados facilmente, acessando a propriedade CSS list-style dos elementos <UL> e setando-as para none.

Segue o cabeçalho padrão do XSL e o primeiro template:

<?xml version='1.0' encoding="iso-8859-1" ?>
 sl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" omit-xml-declaration="yes"/>

 <xsl:template match="/">
   <ul><xsl:apply-templates /></ul>
 </xsl:template>


Sem mistério: Criamos um template que se aplica ao node principal. Uma vez acessado, ele cria o primeiro elemento <UL> e depois pesquisa por outros templates que dêem conta de processar os demais nodes.

 <xsl:template match="node">

  <xsl:element name="li">

   <xsl:attribute name="id">id<xsl:number level="multiple" /></xsl:attribute>

   <xsl:element name="img">
    <xsl:attribute name="width" >15</xsl:attribute>
    <xsl:attribute name="height">15</xsl:attribute>
    <xsl:attribute name="id">id<xsl:number level="multiple" /></xsl:attribute>
    <xsl:attribute name="alt"><xsl:value-of select="@description" /></xsl:attribute>

    
<xsl:if test="count( ./node ) = 0">
     <xsl:attribute name="src">Imagens/File.gif</xsl:attribute>
    </xsl:if>

    <xsl:if test="count( ./node ) != 0">
     <xsl:attribute name="src">Imagens/DirOpened.gif</xsl:attribute>
     <xsl:attribute name="style">cursor:hand</xsl:attribute>
     <xsl:attribute name="onclick">javascript:treeview( this ) </xsl:attribute>
    </xsl:if>


   </xsl:element>

   <xsl:value-of disable-output-escaping="yes" select="@title"/>

  </xsl:element>

  
<xsl:if test="count( ./node ) != 0">
   <ul><xsl:apply-templates /></ul>
  </xsl:if>


 </xsl:template>

</xsl:stylesheet>

Este template irá ser aplicado aos nodes "node", criando novos elementos <LI> com o conteúdo do atributo title. Mas há algumas sutilezas no código que precisam de explicação:


  • O atributo id, tanto do elemento <LI> quanto do <IMG> são montados de forma a gerarem valores únicos. O elemento xsl:number retorna o nível de profundidade na recursão do template, de forma a gerar valores como 1, 1.1, 1.2, 1.2.1 e assim por diante. Esse aspecto do xsl:number é crucial para o funcionamento a contendo da treeview.

  • Setamos o atributo ALT da tag <IMG> como sendo o valor passado para o atributo description. Mantendo o cursor do mouse sobre a imagem, será aberta uma pequena caixa de texto, exibindo o conteúdo da mesma. Tem apenas valor cosmético, mas pode se tornar um recurso bastante útil, caso seja bem utilizada.

  • Para que o a função treeview (JavaScript) seja usada apenas nos casos em que é necessária e para mostrarmos as imagens corretas, criamos as duas estruturas de ifs em negrito. Caso o elemento atual possua elementos filhos ( count( ./node) != 0 ), criamos o atributo onclick na imagem, de forma a processar o evento do clique do mouse, exibindo/escondendo os elementos subordinados ao item clicado.

  • Atenção especial para o elemento xsl:value-of: O atributo disable-output-escaping="yes" informa ao processador XSLT que o conteúdo do atributo title deve ser mostrado integralmente, sem a substituição de, por exemplo, caracteres "<" por "&lt;", que é comportamento padrão. Isso possibilita passar código HTML neste atributo, que é especialmente útil para a criação de links, formatação de estilo, etc.

  • Para terminar, chamamos o elemento xsl:apply-templates, caso haja elementos subordinados ao que está sendo processado. Inicialmente, esta condição nao precisaria ser colocada, mas optamos por ter um documento HTML mais enxuto, sem tags <UL> vazias. Note que um novo elemento <UL> é criado antes de chamarmos a xsl:apply-templates novamente, o que, visualmente, implica em criarmos um novo grupo de itens, deslocado para a direita.


O código desta parte deve ser salvo no arquivo treeview.xsl e mantido no diretório onde os demais arquivos estão armazenados.


Bom, já aprendemos como criar classes no VBScript e como processar estruturas de dados irregulares em XSL, mediante o uso da recursividade. Agora, iremos exibir a estrutura de diretórios do servidor na classe TreeView e faremos alguns comentários finais.

Uma demo das funcionalidades da TreeViewClass

Até o momento, nossa aplicação já possui três arquivos, a saber:  



  • treeview.asp: que contém as definições da classe TreeView;
     
  • treeview.xsl: responsável pela transformação do documento XML, gerado pela classe TreeView em HTML a ser interpretado pelo browser;
      
  • treeview.js: código JavaScript, responsável por exibir/esconder elementos do treeview;
Com estes arquivos em mãos, podemos passar para a codificação do index.asp:

<% Option Explicit %>
<!--#include file="treeview.asp" -->
<html>
<head>
<title>TreeViewClass Demo #2: Lista de arquivos do servidor</title>
<script type="text/javascript" src="treeview.js"></script>
</head>
<body>


Um pequeno comentário: na linha em negrito, incluimos o arquivo treeview.js, eliminando a necessidade de copiar o código em todos os arquivos que utilizem a classe TreeView.

<%

dim oTreeView, FSO, rootFolder
set oTreeView = New TreeView
set FSO = Server.CreateObject( "Scripting.FileSystemObject" )
rootFolder = Request.ServerVariables( "APPL_PHYSICAL_PATH" )


Aqui fazemos o fundamental: criamos uma instância da classe TreeView e do objeto FSO do ASP, que irá permitir o acesso à árvore de diretórios do servidor. Definimos como o primeiro diretório a ser pesquisado, o diretório físico apontado pelo diretório virtual, criado no PWS/IIS. Note que em alguns provedores, que este diretório pode não ser o mesmo do seu site, o que pode implicar em problemas, caso a estrutura de diretórios seja muito grande. Caso o script apresente problemas, como, por exemplo, timeout, experimente exibir o valor desta variável e certificar-se que a mesma aponta para o diretório correto.

With oTreeView
     .XSLData( server.mappath( "treeview.xsl" ) )
     LoadFolders( rootFolder ) 'Carga recursiva dos arquivos/dirs, a partir do diretório atual
     Response.Write .BuildTree()
End With
set oTreeView = nothing
set FSO = nothing

Este trecho apenas carrega o documento XSL que criamos e inicia a rotina LoadFolders, que carregará, recursivamente, o conteúdo dos diretórios. Ao término da mesma, exibimos o produto da transformação do documento XML em HTML e, terminado o processamento da página ASP, o controle passará ao browser, que chamará a função treeview(), quando esta for necessária.

Note que, após terminarmos as operações com a classe TreeView, nós a destruimos, juntamente com outros objetos não mais necessários. Isso permite que a memória alocada para os objetos envolvidos nas operações com o documento XML seja liberada. Este ponto é especialmente pertinente caso seu servidor tenha um número de acessos simultâneos significativo.

Sub LoadFolders( cPath )
   Dim oFolder, i
   set oFolder = FSO.GetFolder( cPath )
   ' Adiciona os arquivos no path
   for each i in oFolder.Files
       oTreeView.AddItem cPath, i.path & i.name, i.name, i.path
   next
   for each i in oFolder.SubFolders
       ' Inclui SubDirs e processa-os recursivamente
       oTreeView.AddItem cPath, i.path, i.name, i.path
       LoadFolders( i.path )
   next
   set oFolder = nothing
End Sub

%>
</body>
</html>

Esta rotina é a responsável pela navegação entre os subdiretórios. Com o path passado por parâmetro, uma coleção GetFolder do objeto Scripting.FileSystemObject é criada (e destruída ao final - note). No primeiro loop for..next, para cada arquivo da coleção Files, criamos um item na TreeView. Os valores que usamos são:



  • cPath: o path atual, com sendo o node onde os arquivos serão alocados.

  • i.path & i.name: o nome único do node (é impossível estar duplicado a combinação de path e nome de arquivo)

  • i.name: no terceiro parâmetro, informa o que será exibido na tag <LI> do treeview.

  • i.path: será usado como atributo da imagem representativa de arquivo, o caminho completo do mesmo.
O mesmo vale para o segundo loop for..next, mas este é destinado à navegação entre os diretórios. Para cada um deles, é criado um novo node e a rotina LoadFolders é chamada novamente, apontando para o caminho do mesmo. Como dito anteriormente, esta rotina pode ultrapassar o tempo máximo de processamento do script, implicando em término prematuro da mesma, caso o número de arquivos ou diretórios seja muito grande. Mas não há de ser o caso...

Pronto para os testes? Ótimo! Rode o index.asp criado e clicando ícones de pastas, os itens subordinados a esta serão exibidos/escondidos. Mantendo o mouse sobre as imagens, irá aparecer o tooltip com o caminho completo do arquivo. Exatamante como queríamos. :-)

Até a próxima!

Faça o download do material deste artigo.

Esta matéria foi postada originalmente no ASP4Developers por Rubens N. Farias (site), que na época era "pós-graduado em análise de sistemas orientados a objetos, MCP, MCSD, MCAD, MCSD.NET e consultor em TI, além de idealizador do projeto ASP4Developers. Desenvolve sistemas sob medida, focados na satisfação do usuário, com qualidade e custo realista.". Hoje, vai saber...

sexta-feira, 8 de novembro de 2002

0

Relatórios com porcentagem Facil Facil!!!

Caros amigos, quem nunca teve problema para fazer relatorio com porcentagem fazendo um SQL só e sem trabalhar no ASP.

Ai vai: Vamos pensar aqui um pouco!!!
o SQL tem como gerar tabela temporario no select então vejamos... Se eu fizer dois SQLs em um só? Não consigo trazer o total geral e um total por seguimento ? Sim eu consigo... então vamos fazer isso separadamente.

Vamos usar por exemplo um concurso:

--selecionando o total geral de candidatos inscritos:
SELECT count(*) As TotalGeral from tabCandidato

resultado:
TotalGeral 
-----------
103

--selecionando o total por faculdade
SELECT Count(tC.IDTFACULDADE) as numFacul,
  tF.nomInstituicao, tF.sigUF
  FROM tabCandidato tC, tabFaculdade tF
 WHERE tC.idtFaculdade = tF.IdtFaculdade
 GROUP BY tC.IDTFACULDADE, nomInstituicao, sigUF


Resultado:
numFacul    nomInstituicao  sigUF
40              CENTRO UNIVERSITÁRIO DE BRASÍLIA -  DF
22              INSTITUTO DE CIÊNCIAS SOCIAIS - DF
15              UNIVERSIDADE CATÓLICA DE BRASILIA - DF


--se juntarmos os dois vamos ter ?
SELECT
 TotalGeral,
 numFacul,
 nomInstituicao,
 sigUF,
 ((100*numFacul)/TotalGeral) porcentagem
FROM
 ( SELECT Count(tC.IDTFACULDADE) as numFacul,
  tF.nomInstituicao, tF.sigUF
  FROM tabCandidato tC, tabFaculdade tF
 WHERE tC.idtFaculdade = tF.IdtFaculdade
 GROUP BY tC.IDTFACULDADE, nomInstituicao, sigUF ) tabRel, 
 ( SELECT count(*) As TotalGeral from tabCandidato) tabTotalGeral
 ORDER BY Porcentagem


Usando a regra de 3, vamos que o totalGeral é 100% o numFacul é o numero de pessoas por facul, então temos que (100*numFacul)/totalGeral = porcentagem (Pronto)!


Bem, qualquer coisa, só falar!!!
[]'s



Esta matéria foi postada originalmente no ASP4Developers por Allan Torres (site), que na época era "Analista de sistemas, trabalho com ASP, Oracle, PHP, C, Ferramentas Case e estudo Eng. Elétrica. Sempre as ordens! ]:)". Hoje, vai saber...

terça-feira, 29 de outubro de 2002

1

Criando funções com parâmetros opcionais em javascript

Estou postando esta dica atendendo à dúvida de um internauta. Como criar funções em javascript que recebam parâmetros opcionais? Para isso vamos precisar do operador typeof. O typeof retorna uma string com o tipo de uma variável. Pode retornar "number", "string", "boolean", "object", "function" ou "undefined". Quando uma variável não recebeu valor, seu tipo será undefined.


Assim, suponhamos a seguinte função, que multiplica dois números:

function Teste(x,y){
return x * y
}

Queremos agora tornar o segundo argumento opcional, de modo que, se a função for chamada apenas com o valor de x, ele seja multiplicado por si próprio:

function Teste(x,y){
if(typeof(y)=="undefined")y=x
return x * y
}

Ou, simplificando:

function Teste(x,y){
return x * (typeof(y)!="undefined"?y:x)
}

Assim, se chamarmos:

Teste(3,5)

Teremos 15 como resultado. E se chamarmos:

Teste(3)

O resultado será 9.


O mesmo truque pode ser usado quando você espera um tipo específico de dado ou deseja converter os dados antes de usar. Assim, você pode fazer:

function TrataDados(n){
if(typeof(n)=="number"){
//O tratamento para número.
}
if(typeof(n)=="string"){
//O tratamento para texto.
}
...
}

Esse recurso pode ajudar, e muito, a escrever código reutilizável.



Esta matéria foi postada originalmente no ASP4Developers por Elcio Luiz Ferreira (site), que na época era " analista-programador apaixonado por javascript, ex-professor, músico amador, ciclista amador, teólogo amador, filósofo amador, escritor amador e comediante amador.". Hoje, vai saber...

terça-feira, 15 de outubro de 2002

1

Aumento de performance na inserção de dados

O método Execute do objeto Connection, presente no ADO, tem três argumentos: CommandText, RecordsAffected e Options. O primeiro argumento, como todos certamente já sabem, é a string contendo a instrução SQL a ser executada (ou um nome de tabela - no caso, o método irá gerar o SELECT * FROM NOME_TABELA automaticamente). O segundo argumento é uma variável que receberá o número de registros afetados pela operação. O terceiro argumento, define o modo como a instrução SQL deverá ser interpretada.


O valor 128 (0x80), que é representado pela constante adExecuteNoRecords, indica que a operação não retornará nenhum registro (ou seja, é uma operação de inserção por exemplo). Segundo a referência do ADO, definir este parâmetro pode aumentar a performance. Veja um exemplo abaixo (em JScript):


sqlSTRING = "INSERT INTO TABELA(CAMPO) VALUES(VALOR)";
objConn.Execute(sqlSTRING, null, 128);


Agradeço ao amigo Thiago Machado por ter me mostrado essa possibilidade, para que eu posteriormente pudesse pesquisar o recurso com mais profundidade. Foi o que fiz! :)



Esta matéria foi postada originalmente no ASP4Developers por Jonas Galvez (site), que na época era "Consultor e desenvolvedor especializado em tecnologias Macromedia. Já publicou um livro sobre Flash 5 (http://www.editoraerica.com.br) e atualmente está finalizando novas obras. Ele também dedica-se à projetos e consultorias em seu tempo livre. Também é programador em ASP/.NET e cria experimentos sempre que pode, buscando compartilhar informações com a comunidade.". Hoje, vai saber...

terça-feira, 8 de outubro de 2002

1

Uma dica de performance (.NET)

Com certeza muitos de nós ficamos pasmos de ver a flexibilidade oferecida pelo Visual Studio.NET. São labels, buttons e uma série de WebControls que podem ser utilizados em seus webforms.


Mas isso pode causar um problema muito simples, que foi o meu caso:


Estava desenvolvendo uma aplicação utilizando C#, no ínicio parecia um casamento, minha aplicação foi desenvolvida com rapidez e seu tempo de execução era aceitável até o momento que decidi acessar o relatório utilizando um modem...pior ainda, chamei uma página que montava um relatório enorme, com tudo que tinha direito.


O que eu fazia, fascinado com a possibilidade de utilizar um label..criei um e o utilizava normalmente, mas isso gera um tráfego CLIENT->SERVIDOR imenso dependendo do que você envia ao servidor.


Se fosse um texto pequeno e simples tudo bem, mas era um texto enorme. Como o .NET mantem o estado dos componentes de sua página, ele tem que enviar de alguma maneira para poder tratar junto com uma série de informações.


Resumindo, o campo hidden "__ViewState" carregava além de todo meu texto criptografado, ainda enviava as informações padrões e o conteúdo de outros objetos de minha página.


No fim acabei fazendo da maneira antiga para o texto enorme:


<% Response.Write( meuhtml ); %>


A velocidade de download diminui e a aplicação podemos dizer que chegou mais rápido no cliente.


Parece besteira, mas é bom prestar atenção ;)



Esta matéria foi postada originalmente no ASP4Developers por André Guergolet (site), que na época era "Desenvolvedor de aplicativos voltados a WEB à 3 anos. Atualmente trabalha com aplicativos de monitoração de redes utilizando .NET e outros recursos.". Hoje, vai saber...

quarta-feira, 2 de outubro de 2002

0

Formatação de dados em formulários HTML


<html>
<head>
<title> Textbox formatado... </title>
  <script language="JavaScript">
    /***
    * Descrição.: formata um campo do formulário de
    * acordo com a máscara informada...
    * Parâmetros: - objForm (o Objeto Form)
    * - strField (string contendo o nome
    * do textbox)
    * - sMask (mascara que define o
    * formato que o dado será apresentado,
    * usando o algarismo "9" para
    * definir números e o símbolo "!" para
    * qualquer caracter...
    * - evtKeyPress (evento)
    *
    * Uso.......: <input type="textbox"
    * name="xxx".....
    * onkeypress="return txtBoxFormat(document.rcfDownload, 'str_cep', '99999-999', event);">
    * Observação: As máscaras podem ser representadas
    * como os exemplos abaixo:
    * CEP -> 99999-999
    * CPF -> 999.999.999-99
    * CNPJ -> 99.999.999/9999-99
    * C/C -> 999999-!
    * Tel -> (99) 9999-9999
    ***/
    function txtBoxFormat(objForm, strField, sMask, evtKeyPress) {
      var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;

      if(document.all) { // Internet Explorer
        nTecla = evtKeyPress.keyCode; }
      else if(document.layers) { // Nestcape
        nTecla = evtKeyPress.which;
      }

      sValue = objForm[strField].value;

      // Limpa todos os caracteres de formatação que
      // já estiverem no campo.
      sValue = sValue.toString().replace( "-", "" );
      sValue = sValue.toString().replace( "-", "" );
      sValue = sValue.toString().replace( ".", "" );
      sValue = sValue.toString().replace( ".", "" );
      sValue = sValue.toString().replace( "/", "" );
      sValue = sValue.toString().replace( "/", "" );
      sValue = sValue.toString().replace( "(", "" );
      sValue = sValue.toString().replace( "(", "" );
      sValue = sValue.toString().replace( ")", "" );
      sValue = sValue.toString().replace( ")", "" );
      sValue = sValue.toString().replace( " ", "" );
      sValue = sValue.toString().replace( " ", "" );
      fldLen = sValue.length;
      mskLen = sMask.length;

      i = 0;
      nCount = 0;
      sCod = "";
      mskLen = fldLen;

      while (i <= mskLen) {
        bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/"))
        bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

        if (bolMask) {
          sCod += sMask.charAt(i);
          mskLen++; }
        else {
          sCod += sValue.charAt(nCount);
          nCount++;
        }

        i++;
      }

      objForm[strField].value = sCod;

      if (nTecla != 8) { // backspace
        if (sMask.charAt(i-1) == "9") { // apenas números...
          return ((nTecla > 47) && (nTecla < 58)); } // números de 0 a 9
        else { // qualquer caracter...
          return true;
        } }
      else {
        return true;
      }
    }
  </script>
</head>
<body>
<form name="myForm">
<table border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td>cep &nbsp;</td>
    <td>
      <input type="text"
             name="str_cep"
             maxlength="09"
             size="10"
             onkeypress="return txtBoxFormat(document.myForm, 'str_cep', '99999-999', event);">
    </td>
  </tr>
  <tr>
    <td>cpf &nbsp;</td>
    <td>
      <input type="text"
             name="str_cpf"
             maxlength="14"
             size="20"
             onkeypress="return txtBoxFormat(document.myForm, 'str_cpf', '999.999.999-99', event);">
    </td>
  </tr>
  <tr>
    <td>tel &nbsp;</td>
    <td>
      <input type="text"
             name="str_tel"
             maxlength="14"
             size="20"
             onkeypress="return txtBoxFormat(document.myForm, 'str_tel', '(99) 9999-9999', event);">
    </td>
  </tr>
  <tr>
  <td>conta &nbsp;</td>
  <td>
    <input type="text"
           name="str_cc"
           maxlength="6"
           size="10"
           onkeypress="return txtBoxFormat(document.myForm, 'str_cc', '9999-!', event);">
    </td>
  </tr>
</table>
</form>
</body>
</html>



Esta matéria foi postada originalmente no ASP4Developers por Douglas da Cunha Coelho Sobrinho (site), que na época era ""Webmaster" do Corpo de Bombeiros Militar do Espírito Santo, Programador-aprendiz autodidata ASP e VB, JavaScript e Clipper (Pasmem!).". Hoje, vai saber...

0

Problemas com Navegação Inteligente (SmartNavigation)

Como já sabemos, existe um recurso chamado SmartNavigation para o ASP.Net


Este recurso, inibe (em navegadores IE 5+) a famosa piscada de tela ao realizarmos o postback no formulário. A navegação inteligente faz com que somente os campos sejam atualizados, e o restante permaneça. A principio este recurso é muito útil, mas, quando utilizado em conjunto com o comando Me.Page.RegisterClientScriptBlock para se carregar uma janela do tipo pop-up, ele irá fazer com que a janela seja carregada atrás da janela que o abriu. Para corrigir esta falha, basta apenas desabilitar a navegação inteligente para as páginas que precisarem abrir pop-up's via Me.Page.RegisterClientScriptBlock


Bem, é isso. Espero ter ajudado


Até a próxima



Esta matéria foi postada originalmente no ASP4Developers por Guilherme Bacellar Moralez (site), que na época era "Consultor e Desenvolvedor Web, especializado em ASP, ASP.NET e MySql.
Gosta de se definir como Professor Pardal, pois, cada pepino que lhe aparece... Tem que inventar umas soluções mirabolantes. Talvez vocês encontrem alguns de seus códigos neste site.". Hoje, vai saber...

terça-feira, 1 de outubro de 2002

0

Como executar scripts em Javascript dentro do .NET

Olá galera, tudo bem?


Até pareçe engraçado, mais a Microsoft pisou na bola quando o assunto é executar um script em JS dentro do .NET, principalmente se for em VB seu código. Mas antes que todos se desesperem, existe uma forma:


Me.Page.RegisterClientScriptBlock("<Nome Qualquer do Script>", "<script>")


Dentro do Script, não esqueça de colocar <script> bla bla bla </script>


É isso ai galera, mais uma dica para mais um problema super cabeludo. Espero ter ajudado.


Até mais.



Esta matéria foi postada originalmente no ASP4Developers por Guilherme Bacellar Moralez (site), que na época era "Consultor e Desenvolvedor Web, especializado em ASP, ASP.NET e MySql.
Gosta de se definir como Professor Pardal, pois, cada pepino que lhe aparece... Tem que inventar umas soluções mirabolantes. Talvez vocês encontrem alguns de seus códigos neste site.". Hoje, vai saber...

sábado, 28 de setembro de 2002

0

Super Trim em ASP

pelo fato a função trim, só retirar os espaços que estão antes ou após a string, desenvolvi esta função que retira os espaços no meio da string, sem alterar seu conteúdo.

Neste utilizando uma outra função interessante também que inser um novo Elemento a uma Array já criada.

Bom proveito!

<%
'--------------------------------------------------
' RETIRA ESPAÇOS ADICIONAIS DE UMA STRING
' Autor: Márcio J. Lima (Guardião)
' Email:
listas@guardiaodaweb.com.br
' Data de criação: 28-09-2002 - SP / Brasil
'--------------------------------------------------
 reDim a(0)
 sub insere(byref matriz, elemento)
   blnExiste = false
   for i=0 to Ubound(matriz)
    if matriz(i) = elemento then
     blnExiste = true
    End if
   next
   If not blnExiste Then
    redim preserve matriz(Ubound(matriz)+1)
    matriz(ubound(matriz)) = elemento
   End if
 end sub


Function RemoveEspacos(str)
 y = Split(str, " ")
 For x = LBound(y) To UBound(y)
  IF Trim(y(x)) <> " " Then Call insere(a,y(x))
 Next
 m = Join(a)
 RemoveEspacos = Trim(m)
End Function


'strEspacos = " 123   456  78   9  "
strEspacos = " Meu Nome é      Andrei "
response.write RemoveEspacos(strEspacos)
%>



Esta matéria foi postada originalmente no ASP4Developers por Marcio Lima (Guardião) (site), que na época era "Programador ASP e VBA, apaixonado por Design, futurismo e ficção.
". Hoje, vai saber...

sábado, 21 de setembro de 2002

0

Retorna Um Valor Do Banco de Dados

Function pegadado(tabela, campoderetorno, campocomparativo, valorcomparativo)
 Set objconex = Server.CreateObject("ADODB.Connection")
 ObjConex.Open sua string de conexao 


strsql = "SELECT " & campoderetorno & " FROM " & Tabela & " WHERE " & campocomparativo & " = '" & valorcomparativo & "'"
 Set RecSet = objconex.execute(strsql)
 if(RecSet.EOF) then
  pegadado = ""
 else
  pegadado = RecSet.Fields(campoderetorno)
 End If
End Function


Exemplo: pegadado("usuarios", "nome_usuarios", "email_usuarios", "dnaiel@passos.eti.br")
Isso lhe retornaria o valor guardando na tabela usuariso no campo nome_usuarios onde o email do usuario fosse = a daniel@passos.eti.br



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Apenas Numericos

<SCRIPT LANGUAGE="JavaScript">


function apenasnumericos(caracter) {


 if(document.all) { // Internet Explorer
  var tecla = event.keyCode;
 }
 else {
  if(document.layers) { // Nestcape
   var tecla = caracter.which;
  }
 }


 if(tecla > 47 && tecla < 58) { // numeros de 0 a 9
  return true;
 }
 else {
  if (tecla != 8) { // backspace
   return false;
  }
  else {
   return true;
  }
 }


}


</SCRIPT>


<BODY ONLOAD=javascript:document.form1.xxx.focus();>
<form name="form1">
Apenas Numeros: <input type="text" name="xxx" onKeyPress="return apenasnumericos(event);">
</FORM>



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Codigo ASCII

<BODY ONLOAD=javascript:document.ascii.codigo.focus()>


<DIV ALIGN=center> <FONT FACE=arial SIZE=-1> <BR>


<FORM NAME=ascii>
Pressione a Tecla Que Deseja Saber o Codigo ASCII:
<INPUT TYPE=text NAME=codigo SIZE=1 onKeyPress='return codigoascii(event)'>
</FORM>


OBS: Este Script <B> NÃO </B> Captura As Teclas: <BR>
De Funções: F1 / F2 / F3 / F4 / F5 / F6 / F7 / F8 / F9 / F10 / F11 / F12 <BR>
De Controle : TAB / CAPS LOCK / SHIFT / CTRL / ALT / BACKSPACE <BR>
Insert / Delete / Home / End / PG UP / PG DN <BR>
As Setas: CIMA / BAIXO / DIRETA / ESQUERDA



<SCRIPT LANGUAGE=JavaScript>


function codigoascii(teclapressionada) {


 if(document.all) { // Internet Explorer
  var ascii = event.keyCode;
 }
 else {
  if(document.layers) { // Nestcape
   var ascii = caracter.which;
  }
 }


 if((ascii != 13) && (ascii != 32)) { tecla = String.fromCharCode(ascii); } // Atribui a tecla pressionada //
 else {
  if(ascii == 13) { tecla = "[ENTER]"; } // Escreve [ENTER] ai inves de pular linha //
  if(ascii == 32) { tecla = "[ESPAÇO]"; } // Escreve [ESPAÇO] ai inves de pular linha //
 }
 
 alert("O Codigo ASCII Referente A Tecla " + tecla + " é " + ascii);


 return false;


}


</SCRIPT>



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Valida Email

<DIV ALIGN=center><FONT FACE=arial SIZE=-1>


<FORM NAME=formemail>
Email: <INPUT TYPE=text NAME=email VALUE="" SIZE=30 MAXLENGTH=50> <P>
<INPUT TYPE=button VALUE="Testar Email" OnClick=testaemail(this.form)>
</FORM>


<SCRIPT LANGUAGE=Javascript>


// Isso fica dentro da rotina que testa todo o formulario //
function testaemail(form) {
 if(validaemail(form.email.value)) {
  alert("Formato Valido!");
 }
 else {
  form.email.select();
  alert("Formato Invalido!");
 }
}


// Testa um email no formato teste@testando. + com.br (3.2) ou + .com (3) ou + .br (2) //
// NÃO podem comecar com numeros. Antes da @ podem contar numeros letras, pontos e undescore //
// O Dominio pode conter caracteres e numeros porem os seus sufixos apenas caracteres //


function validaemail(email) {
  var objRegExp  = /^[A-Za-z]([\w\.]*)@([A-Za-z0-9\.]*)\.(([A-Za-z]{3}\.[A-Za-z]{2}$)|([A-Za-z]{3}$)|([a-z]{2}$))/i ;
  return objRegExp.test(email);
}


</SCRIPT>



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Inibi Caracteres Especiais

<SCRIPT LANGUAGE=JavaScript>


// Procura pro caracteres invalido como: ' , " < > //
function semcaracteresespeciais(caracter) {


 if(document.all) { // Internet Explorer
  var tecla = event.keyCode;
 }
 else {
  if(document.layers) { // Nestcape
   var tecla = caracter.which;
  }
 }


 if((tecla == 35) || (tecla == 34) || (tecla == 39) || (tecla == 60) || (tecla == 62)) {
  alert("Você não usar preencher os seguintes caracteres: #, \", ', <, > ");
  return false;
 }
 else { return true; }


}


</SCRIPT>
<BODY ONLOAD=javascript:document.form1.xxx.focus();>
<form name="form1">
Inibi Caracteres #, \", ', <, > <input type="text" name="xxx" onKeyPress="return semcaracteresespeciais(event);">
</FORM>



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

quinta-feira, 19 de setembro de 2002

0

VARIAS CONEXÕES

====================
ODBC DNS Connections
=====================


DNS
Conn.Open "DSN=SampleDB;Uid=Admin;Pwd=;"
 
File DNS
Conn.Open "FILEDSN=\\path\\mydb.dsn;Uid=Admin;Pwd=;"
 


ODBC DNS-Less Connections
ODBC Driver for AS/400
Conn.Open "Driver={Client Access ODBC Driver (32-bit)}; System=myAS400;Uid=myUsername;Pwd=myPassword;"


 
ODBC Driver for dBASE
Conn.Open "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=\\somepath;"
rs.Open "SELECT * FROM USER.DBF", Conn


 
ODBC Driver for MS Access
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
                 "Dbq=\\path\\mydb.mdb;Uid=Admin;Pwd=;"


Using a Workgroup (System database)
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
                "Dbq=\\path\\mydb.mdb;SystemDB=\\somepath\\mydb.mdw;", "admin",""
 
ODBC Driver for MS Excel
Conn.Open "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;" & _
                 "Dbq=\\somepath\\Sheet1.xls;DefaultDir=\\somepath;"



ODBC Driver for MySQL (MyODBC)
Conn.Open "Driver={mySQL};Server=MyServerName;Option=16834;Database=mydb;"
 
ODBC Driver for Oracle
Conn.Open "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;" & _
                 "Uid=myUsername;Pwd=myPassword;"


 
ODBC Driver for Paradox
Conn.Open "Driver={Microsoft Paradox Driver (*.db)};DriverID=538;Fil=Paradox 5.X;" & _
                 "DefaultDir=c:\\dbpath\\;Dbq=c:\\dbpath\\;CollatingSequence=ASCII;"


 
ODBC Driver for SQL Server
Conn.Open "Driver={SQL Server};Server=MyServerName;Database=myDatabaseName;" & _
                 "Uid=myUsername;Pwd=myPassword


For trusted connection
Conn.Open "Driver={SQL Server};Server=MyServerName;Database=myDatabaseName;" & _
                 "Trusted_Connection=yes;"


To Prompt user for username and password
Conn.Properties("Prompt") = adPromptAlways
Conn.Open "Driver={SQL Server}; Server=ServerName; DataBase=DatabaseName;"


 
ODBC Driver for Sybase
Sybase System 11 ODBC Driver
Conn.Open "Driver={SYBASE SYSTEM 11}; Srvr=myServerName;" & _
                 "Uid=myUsername; Pwd=myPassword;"


Intersolv 3.10 Sybase ODBC Driver
Conn.Open "Driver={INTERSOLV 3.10 32-BIT Sybase}; Srvr=myServerName;" & _
                 "Uid=myUsername; Pwd=myPassword;"


 
ODBC Driver for Sybase SQL Anywhere
Conn.Open "ODBC; Driver=Sybase SQL Anywhere 5.0;" & _
                 "DefaultDir=c:\\dbpath\\; Dbf=c:\\sqlany50\\mydb.db;" & _
                 "Uid=myUsername; Pwd=myPassword; Dsn="""";"


 
ODBC Driver for Text
Conn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
                 "Dbq=\\somepath\\; Extensions=asc,csv,tab,txt; Persist Security Info=False"
rs.Open "SELECT * FROM CUSTOMER.CSV", Conn


 
ODBC Driver for Visual FoxPro
With a database container
Conn.Open "Driver={Microsoft Visual FoxPro Driver}; SourceType=DBC;" & _
                 "SourceDB=\\somepath\\mySourceDb.dbc; Exclusive=No;"


Without a database container (Free Table Directory)
Conn.Open "Driver={Microsoft Visual FoxPro Driver}; SourceType=DBF;" & _
                 "SourceDB=\\somepath\\mySourceDbFolder; Exclusive=No;"


============================
OLE DB Provider Connections
============================


OLE DB Provider for AS/400
Conn.Open "Provider=IBMDA400; Data source=myAS400;" & _
                 "User Id=myUsername; Password=myPassword;"


 
 OLE DB Provider for Active Directory Service
Conn.Open "Provider=ADSDSOObject; User Id=myUsername; Password=myPassword;"
 
 OLE DB Provider for DB2
Conn.Open = "Provider=DB2OLEDB;" & _
                    "Network Transport Library=TCPIP; Network Address=MyServer;" & _
                    "Package Collection=MyPackage; Host CCSID=1142; Initial Catalog=MyDB;" & _
                    "User ID=MyUsername; Password=MyPassword;"


 
 OLE DB Provider for Index Server
Conn.Open "Provider=msidxs; Data source=MyCatalog;"
 
 OLE DB Provider for Internet Publishing
Conn.Open "Provider=MSDAIPP.DSO; Data Source=http://mywebsite/myDir;" & _
                 "User Id=myUsername; Password=myPassword;"


 
 OLE DB Provider for Microsoft Jet
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\somepath\\myDb.mdb;" & _
                 "User Id=admin; Password=;"


Using a Workgroup (System database)
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\somepath\\mydb.mdb;" & _
                 "Jet OLEDB:System Database=MySystem.mdw;", "admin", ""


MDB has a database password
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\somepath\\mydb.mdb;" & _
                 "Jet OLEDB:Database Password=MyDbPassword;", "admin", ""


Open Excel
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\somepath\\Sheet1.xls;" & _
                 "Extended Properties=""Excel 8.0;HDR=Yes;"";"
 
 OLE DB Provider for ODBC Databases
MS Access (Jet)
Conn.Open "Provider=MSDASQL; Driver={Microsoft Access Driver (*.mdb)};" & _
                 "Dbq=\\somepath\\mydb.mdb; Uid=myUsername; Pwd=myPassword;"


SQL Server
Conn.Open "Provider=MSDASQL; Driver={SQL Server};" & _
                 "Server=myServerName; Database=myDatabaseName;" & _
                 "Uid=myUsername; Pwd=myPassword;"


 
OLE DB Provider for Oracle
from Microsoft
Conn.Open "Provider=msdaora; Data Source=MyOracleDB;" & _
                 "User Id=myUsername; Password=myPassword;"


from Oracle
Conn.Open "Provider=OraOLEDB.Oracle; Data Source=MyOracleDB;" & _
                 "User Id=myUsername; Password=myPassword;"


For a Trusted Connection
Conn.Open "Provider=OraOLEDB.Oracle; Data Source=MyOracleDB; User Id=/; Password=;"
Conn.Open "Provider=OraOLEDB.Oracle; Data Source=MyOracleDB; OSAuthent=1;"


 
 OLE DB Provider for Simple Provider
Conn.Open "Provider=MSDAOSP; Data Source=MSXML2.DSOControl.2.6;"
rs.Open "http://WebServer/VirtualRoot/MyXMLFile.xml", Conn


 
 OLE DB Provider for SQL Server
Conn.Open "Provider=sqloledb; Data Source=ServerName; Initial Catalog=DatabaseName;" & _
                 "User Id=myUsername; Password=myPassword;"


For a Trusted Connection
Conn.Open "Provider=sqloledb; Data Source=ServerName; Initial Catalog=DatabaseName;" & _
                 "Integrated Security=SSPI;"


Connect to a "Named Instance" (SQL Server 2000)
Conn.Open "Provider=sqloledb; Data Source=ServerName\\Inst2; Initial Catalog=DatabaseName;" & _
                 "User Id=myUsername; Password=myPassword;"


Prompt for username and password
Conn.Provider = "sqloledb"
Conn.Properties("Prompt") = adPromptAlways
Conn.Open "Data Source=ServerName; Initial Catalog=DatabaseName;"


To connect via an IP address
Conn.Open "Provider=sqloledb; Network Library=DBMSSOCN;" & _
                 "Data Source=xxx.xxx.xxx.xxx,1433; Initial Catalog=DatabaseName;" & _
                 "User ID=myUsername; Password=myPassword;"


 


==================================
Remote OLE DB Provider Connections
==================================


 MS Remote - Access (Jet)
ODBC DSN
Conn.Open "Provider=MS Remote; Remote Server=http://ServerName; Remote Provider=MSDASQL; DSN=AdvWorks; Uid=myUsername; Pwd=myPassword;"


OLE DB Provider
Conn.Open "Provider=MS Remote; Remote Server=http://ServerName; Remote Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\path\\mydb.mdb;", "admin", "" 


 MS Remote - SQL Server


ODBC DSN
Conn.Open "Provider=MS Remote; Remote Server=http://server; Remote Provider=MSDASQL; DSN=DatabaseName; Uid=Username; Pwd=Password;"


OLE DB Provider
Conn.Open "Provider=MS Remote; Remote Server=http://ServerName; Remote Provider=SQLOLEDB; Data Source=ServerName; Initial Catalog=DatabaseName; User ID=Username; Password=Password;" 


=================================
.NET Managed Provider Connections
=================================


 SQL Client .NET Managed Provider (System.Data.SqlClient)
Dim Conn As SqlClient.SqlConnection
Dim ConnStr As String


ConnStr = "Data Source=(local); Initial Catalog=NorthWind; Integrated Security=SSPI; Pooling=True; Min Pool Size=10; Max Pool Size=50; Connection Lifetime=30; Connection Reset=True; Enlist=True;"
Conn = New SqlClient.SqlConnection(ConnStr)
Conn.Open() 
 OLE DB .NET Managed Provider (System.Data.OleDb)
Dim Conn As OleDb.OleDbConnection
Dim ConnStr As String


ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=nwind.mdb; User ID=Admin; Password=;"
Conn = New OleDb.OleDbConnection(ConnStr)
Conn.Open() 



Esta matéria foi postada originalmente no ASP4Developers por Hélio Fernandes da Costa (site), que na época era "Analista de Intranet Grupo Santander Banespa

Programador do site ASPBRASIL

Instrutor SOS Computadores

Diretor sócio da http://www.redeye.com.br". Hoje, vai saber...

quarta-feira, 11 de setembro de 2002

0

Como apagar todos os cookies de uma máquina!

<%
response.buffer=true
Dim objCookie
'será feito um loop pela coleçào de cookies
Response.Write "Deletando cookies...<BR>"
For Each objCookie In Request.Cookies
'Irá deletar os cookies marcando uma data para expirar
'A data antiga é proposital para obrigar o browser a deletar direto
Response.Cookies(objCookie).Expires = "September 7, 1998"
Next
Response.Write "Finalizado. Todos cookies foram apagados"
%>


Extraído de Imasters.com.br



Esta matéria foi postada originalmente no ASP4Developers por Thiago Machado Souza (site), que na época era "Programador Desbravador, buscando quebrar todas as fronteiras além do horizonte da arte de programar !
www.thiagomachado.com.br". Hoje, vai saber...

0

Redireciona para uma pagina de suporte quando a conexão com o Banco não foi estabelecida!

Por Yongg Choi - Extraído de Imasters.com.br


Quando você conecta em um banco de dados pelo ASP, você não tem certeza se a conexão estará disponível sempre a todos. Desta forma, com o uso deste código, o usuário será redirecionado para uma página de aviso ou outra que você desejar, quando ocorrer o erro abaixo:


Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][SQL Server]SQL Server has been paused. No new connections will be allowed. /LocalTaeyo/QAboard/S.asp, line 11


NOTA: Este exemplo marca a página msg.asp como a de aviso. Então, crie uma com este nome e insira um aviso de instabilidade no servidor de banco de dados.


<%
on error resume next


Set DbCon = Server.CreateObject("ADODB.Connection")
'faça sua string de conexao aqui normalmente
DbCon.Open ("DSN=***;uid=***;pwd=***;")


If Dbcon.Errors.Count > 0 then
if Err.number = "-2147467259" then
'msg.asp : faça este pagina de aviso!
Response.Redirect "msg.asp" 'On Error Connecting
else
Response.Redirect "GoAhead.asp"
end if


else


Response.Redirect "GoAhead.asp"


end if
%>



Esta matéria foi postada originalmente no ASP4Developers por Thiago Machado Souza (site), que na época era "Programador Desbravador, buscando quebrar todas as fronteiras além do horizonte da arte de programar !
www.thiagomachado.com.br". Hoje, vai saber...