sexta-feira, 29 de junho de 2001

0

Função para formatação de datas

<%


' Função para a formatação de datas de maneira fácil e rápida
' Esta função trabalha em conjunto com a função Strzero (também postada aqui)
' mas pode ser adaptada para trabalhar sem a mesma.
' (valor) é data a ser formatada
' (formato) é o formato a ser utilizado obedecendo a seguinte regra:
' DD - Para Dias
' MM - Para Meses
' YYYY - Para ano
' HH - Para Hora
' MI - Para Minutos
' SS - Para Segundos.


Session.LCID = 1046


Function ConverteData (valor,formato)
if not isDate(valor) then
   Response.Write "Data Inválida ! ... <br>"
   Response.Write "Pressione o botão [Voltar] ou [Back] do seu navegador, corrija a data e tente de novo."
   Response.End
else
   formato = UCase(formato)
   if Trim(formato) = "" then formato = "DD/MM/YYYY HH:MI:SS"
   formato      = Replace(formato,"YYYY",Year(valor))
   formato      = Replace(formato,"MM",Strzero(Month(valor),2))
   formato      = Replace(formato,"DD",Strzero(Day(valor),2))
   formato      = Replace(formato,"HH",Strzero(Hour(valor),2))
   formato      = Replace(formato,"MI",Strzero(Minute(valor),2))
   ConverteData = Replace(formato,"SS",Strzero(Second(valor),2))
end if
End Function


' Exemplos de uso


Response.Write ConverteData(Now,"DD-MM-YYYY HH:MM")
Response.Write ConverteData(Time,"Agora são HH:MM")


%>



Esta matéria foi postada originalmente no ASP4Developers por Adriano Dias (site), que na época era "Gerente de Informática que odeia terno e gravata e que gosta mesmo é de análise e programação. Linuxeiro sem ser radical e ASPeiro por prazer.". Hoje, vai saber...

0

Validar datas com 31 dias e ano Bissexto

 <script language="JavaScript">
 function veredito(mes,dia)
 {
 if ((mes==4 || mes==6 || mes==9 || mes==11) && dia==31)
  {
  alert("Este mês não tem 31 dias!")
  }
 if (mes == 2)
  {
  var ano
  var bissexto = (ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0));
  if (dia>29 || (dia==29 && !bissexto))
   {
   alert("Fevereiro não possue "+dia+" dias.");
      }
  }
 }
 </script>


 <a href="javascript:veredito('2','31');">testar</a>



Esta matéria foi postada originalmente no ASP4Developers por Ismael Nobre (site), que na época era "Analista.
Quer me contratar ?
Cel. 96420687". Hoje, vai saber...

0

Função para preenchimento de zeros à esquerda

' Função que retorna zeros a esquerda no
' formato do velho Clipper
' (val) é o valor de referencia
' (num) é o numero de digitos que será gerado.


Function Strzero(val,num)
 val = Trim(CStr(val))
 Strzero = String(num-len(val),"0") & val
End Function



Esta matéria foi postada originalmente no ASP4Developers por Adriano Dias (site), que na época era "Gerente de Informática que odeia terno e gravata e que gosta mesmo é de análise e programação. Linuxeiro sem ser radical e ASPeiro por prazer.". Hoje, vai saber...

1

Procura por palavras em seu website

- search.html -


<HTML>
<BODY>
<FORM METHOD=POST ACTION=""TextSearch.asp"">
Enter text to search for:
<INPUT TYPE=TEXT NAME=SearchText>
<P>
<INPUT TYPE=SUBMIT VALUE=""Procurar"">
</FORM>
</BODY>
</HTML>



- TextSearch.asp -



<HTML><BODY>
<B>Resultado da procura para <%=Request(""SearchText"")%></B><BR>
<font face=""Arial, Helvetica, sans-serif"" size=""-2"">
<%
Const fsoForReading = 1


Dim strSearchText
strSearchText = Request(""SearchText"")


Dim objFSO
Set objFSO = Server.CreateObject(""Scripting.FileSystemObject"")



Dim objFolder
Set objFolder = objFSO.GetFolder(Server.MapPath(""/detran""))


Dim objFile, objTextStream, strFileContents, bolFileFound
bolFileFound = False


For Each objFile in objFolder.Files
If Response.IsClientConnected then
Set objTextStream = objFSO.OpenTextFile(objFile.Path,fsoForReading)


strFileContents = objTextStream.ReadAll


If InStr(1,strFileContents,strSearchText,1) then
Response.Write ""<LI><A HREF=""""/detran/"" & objFile.Name & _
"""""">"" & objFile.Name & ""</A><BR>""


bolFileFound = True
End If


objTextStream.Close
End If
Next


if Not bolFileFound then Response.Write ""Nenhuma palavra encontrada...""


Set objTextStream = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
%>
</font></BODY></HTML>



Esta matéria foi postada originalmente no ASP4Developers por Rafael Martins de Ascenção (site), que na época era "também conhecido como Iamaz do news do FX. Programador ASP, ColdFusion. ". Hoje, vai saber...

0

Função que retorna o último dia do mês

<%
'--------------------------------------------------------------------
' maxDiaMes
' Função que retorna o último dia do mês
' Criado por Rafael Martins de Ascenção
' Email: iamaz@ig.com.br - ICQ: 118036283
' Colaboraram:
' Adriano Dias (adiasbr@yahoo.com.br)
'--------------------------------------------------------------------


' Nunca esquecendo o Session.LCID
Session.LCID = 1046


function maxDiaMes(mes,ano)
 lDate = DateAdd("m", 1, CDate("01/" & mes & "/" & ano))
 maxDiaMes = Day(DateAdd("d",-1,lDate))
end function


' E para usar, por exemplo para o mês de junho


ultimodia = maxDiaMes(6,2002)
%>



Esta matéria foi postada originalmente no ASP4Developers por Rafael Martins de Ascenção (site), que na época era "também conhecido como Iamaz do news do FX. Programador ASP, ColdFusion. ". Hoje, vai saber...

quinta-feira, 28 de junho de 2001

0

Função que cria sql de acordo com as características da busca

Essa é a versão 0.1 desta função que cria um sql de acordo com as características da busca (e, ou, exata).


Quem for modificar ou documenta-lo melhor, por favor, envie um e-mail para mim com o código para poder atualiza-lo neste site.


Eu irei incluir o nome do autor da atualização no código.


<%
'--------------------------------------------------------------------
' criaConsultaSQL
' Criado por Rafael Martins de Ascenção
' Email: iamaz@ig.com.br - ICQ: 118036283
' --------------------------------------------
' strOri = palavra procurada
' campos = campos da tabela a serem selecionados pela consulta
' tabela = tabela onde será feita a consulta
' condicoes = filtro para o registros selecionados
' tipoBusca = E, OU, EXATA
' camposPesquisa = campos onde será feita a busca
' ordem = campos a classificar os registros
'--------------------------------------------------------------------


function criaConsultaSQL(strOri,campos,tabela,condicoes,tipoBusca,camposPesquisa,ordem)


 dim str,sql,cmpPsq


 str = preparaPalavra(strOri)


 sql = "SELECT " & campos & " FROM " & tabela & " where "
 cmpPsq = split(camposPesquisa,",")
 
 if tipobusca = "EXATA" then


  sql = sql & " ("
  for i=0 to ubound(cmpPsq)
   if i <> 0 then
    sql = sql & " or "
   end if
   sql = sql & cmpPsq(i) & " like '%" & str & "%'"
  next
  sql = sql & ")"


 else
 
  if tipobusca = "E" then
   expr = " and "
  else
   expr = " or "
  end if
  
  strvet = split(str," ")
  
  sql = sql & " (("
  
  for i=0 to ubound(cmpPsq)
   if i <> 0 then
    sql = sql & ") or ("
   end if
   for j=0 to ubound(strvet)
    if j <> 0 then
     sql = sql & expr
    end if
    sql = sql & cmpPsq(i) & " like '%" & strvet(j) & "%'"
   next
  next


  sql = sql & "))"
 end if


 if condicoes <> "" then
  sql = sql & " and " & condicoes
 end if
 sql = sql & " order by " & ordem


 criaConsultaSQL = sql


end function


'E para utilizá-la:


pegaReg.Open criaConsultaSQL(frase, "campo1,campo2,campo3,campo4", "tabela", "campo=1", "E", "campo1,campo2", "campo1,campo2"), conex
%>



Esta matéria foi postada originalmente no ASP4Developers por Rafael Martins de Ascenção (site), que na época era "também conhecido como Iamaz do news do FX. Programador ASP, ColdFusion. ". Hoje, vai saber...

quarta-feira, 27 de junho de 2001

0

Utilizando o Mailer - Componente de envio de e-mail (Freeware)

O Mailer é o componente de envio de e-mail da biblioteca NantuaObjects. O download pode ser feito clicando aqui para acessar o artigo com a versão 1.0 desta biblioteca.
O código abaixo (ASP somente, sem o HTML) exemplifica o envio de e-mail utilizando este objeto.

set varMail = Server.CreateObject("NantuaObjects.Mailer")

with varMail
  .Subtipo = 4 'Corpo em HTML
  .Servidor = "smtp.terra.com.br"
  .UID = "fulano"
  .ParaEmail = "fabio@terra.com.br; jose@uol.com.br"
  .DeEmail = "fulano@terra.com.br"
  .DeNome = "Fulano de Tal"
  .Anexos = Server.MapPath("arquivos/arq1.doc") & ";" & Server.MapPath("arquivos/arq2.xls")
  .Assunto = "Documentos"
  .Corpo = "Aí estão os <b>documentos</b>"
  .Enviar
end with

Cabem aqui algumas observações:
1. O exemplo é simples, mas também simplista, pois é estático. Imagine um banco de dados com 200.000 registros de clientes, todos com e-mail para mala-direta: aí sim você vê uma aplicação prática do componente!
2. O método Enviar é otimizado pois já incorpora o método Conectar. Quando você envia o e-mail, o componente checa se já existe conexão ao servidor: senão existir, ele conecta; se já existir, ele usa a conexão corrente. Por isso, você não deve conectar, enviar e desconectar a cada e-mail pois num looping para vários e-mails num banco de dados, vai haver uma perda enorme em performance se isto for feito. Ao mandar enviar o primeiro e-mail, o componente já conecta-se e no segundo e-mail, ele usa a mesma conexão que o primeiro usou. Os métodos Conectar e Desconectar só devem ser usados quando, depois de enviar algum e-mail, você mude de servidor ou o UID, no mesmo script ASP.
3. Você usa a mesma instância do objeto para enviar vários e-mails. Cada vez que o método Enviar for chamado, as seguintes propriedades são "zeradas", devendo ser setadas novamente no próximo e-mail: ParaEmail, DeEmail, DeNome, ParaCC, ParaBCC, Assunto, Corpo, RespPara, Data e Anexos.
4. Como o objeto roda no servidor, os anexos do e-mail devem estar no mesmo. Isso não é problema se você está enviando uma mala direta, pois os arquivos estão no servidor mesmo (ou ao alcance dele em sua rede interna). Contudo, se você estiver desenvolvendo um sistema de WebMail, então o cliente deste serviço deve, antes de mais nada, fazer um upload dos arquivos para o servidor (quem já enviou arquivos anexados em sistemas de WebMail - IGmail, BOL, entre outros - sabe como é!)


Gostaria muito de receber retorno quanto à eficácia deste componente, pois pretendo seguir desenvolvendo novos componentes Freeware para nossa comunidade.



Esta matéria foi postada originalmente no ASP4Developers por Adriano Nântua, que na época era "Engenheiro de software e analista de sistemas; Desenvolvedor ASP, Delphi, C/C++ e Java/JSP/Servlets; InterBase fan; Linux fan; Alvirrubro inveterado.". Hoje, vai saber...

quinta-feira, 21 de junho de 2001

1

Validando E-mail

Bem aqui veremos como validar campos (e-mails) em seus formulários...


<%


email = trim(request.form("email"))


if instr(email, "@") then


response.write "O e-mail é válido.."


else


response.write "O e-mail foi digitado incorreto"


end if


%>



Esta matéria foi postada originalmente no ASP4Developers por Francisco Hárley Diniz (site), que na época era "Programador ASP, frequenta o canal #asp da Brasnet (rede de irc).". Hoje, vai saber...

0

Por que usar XML ?

Essa é a dúvida mais freqüente para os interessados em aprender esta nova tecnologia. Explanarei, em linhas gerais, a necessidade do uso do XML (eXtended Markup Language) e seu relacionamento com o futuro da Web.


O XML é um formato para a descrição de dados (é uma meta-linguagem e não uma linguagem de programação), que baseia seu formato em um arquivo texto, com estruturas organizadas hierarquicamente. Segundo a descrição do W3C (www.w3c.org), este formato permite troca de dados independente de plataforma e, utilizando o Document Object Model (DOM) nível 1, permite acesso segundo métodos padrões, facilitando a portabilidade dos dados. Mas que para que tipo de problema o XML pode ser uma peça-chave na elaboração de uma solução ?


Uma situação comum a desenvolvedores de aplicações web que envolvem outras empresas parceiras: o compartilhamento de dados. Uma empresa X possui um conjunto de dados que precisam ser disponibilizados para a empresa parceira Y. As formas tradicionais de resolver este tipo de problema seria a transmissão de dados em um formato conhecido pelas duas empresas, de forma que uma entenda o significado dos dados enviados pela outra. Atualmente os dados podem ser transmitidos em arquivos texto de largura fixa, delimitados, etc., mas será necessário incorporar estes dados texto a um banco de dados (podendo ser um SGBD ou em estruturas na memória) para que possamos transformar os dados brutos em informações significativas. Se estivermos falando em dados relacionados (duas tabelas que compartilham uma mesma chave, por exemplo), o problema aumenta um pouco, pois deveremos passar mais de um arquivo e a lógica ficaria mais restrita a estas duas empresas. Se a empresa Z tentar acessar o mesmo set de dados, ela obrigatoriamente terá que buscar a especificação da estrutura do arquivo (layout) junto a uma das outras empresas, o que pode ser trabalhoso.


O XML pode ajudar a resolver este tipo de problema. Os dados armazenados em um arquivo XML usam tags para delimitar estruturas, exatamente como as tags do HTML. Um exemplo de arquivo XML poderia ser:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<pedidos>
<pedido id="1">
<item descrição="1" qtde="100" />
<item descrição="2" qtde="20"/>
</pedido>
<pedido id="2">
<item descrição="1" qtde="25" />
<item descrição="3" qtde="10"/>
<item descrição="4" qtde="50"/>
</pedido>
<descrições>
<descrição id="1">Pacote de papel sulfite</descrição>
<descrição id="2">Pacote de papel carbono</descrição>
<descrição id="3">Caixa de grampos</descrição>
<descrição id="4">Borracha branca</descrição>
</descrições>
</pedidos>

Disponibilizando este arquivo para acesso via HTTP, uma das empresas acima poderia acessar os dados e ter a noção exata de como estes dados estão hierarquizados. Uma aplicação que acesse o DOM do documento XML pode facilmente incorporar estes dados à base de dados existentes na empresa. O requisito necessário seria que todas as empresas tivessem um consenso sobre qual o vocabulário (conjunto de tags e seus significados) usar. O mercado já identificou esta necessidade de padronização é já busca soluções. Um exemplo é ebXML (http://www.ebxml.org/), uma iniciativa de um grupo de grandes empresas de tecnologia para modernizar as atuais transações de EDI (Electronic Data Interchange). 


O que vemos neste exemplo é que um conjunto de dados pode criado usando um padrão conhecido e depois manipulado para atender as necessidades específicas de cada organização. Como os dados são auto-descritivos, não há a necessidade de montar tabelas de layout para transmitir o significado dos dados. E a estrutura hierarquizada permite saber a qual tipo de estrutura os dados nela contidos estão subordinados.


Mas não é só isso. Usando a linguagem XSL (eXtended Stylesheet Language), podemos converter a estrutura deste documento em uma outra, cujo vocabulário usado seja mais significativo. O exemplo abaixo mostra um arquivo XSL que converte o arquivo XML mostrado anteriormente em um documento XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<b>Relação dos pedidos do documento XML</b>
<xsl:apply-templates />
<xsl:value-of select="count( //pedido )"/> pedidos listados
</body>
</html>
</xsl:template>
<xsl:template match="pedido">
<ul>
<li><xsl:value-of select="name()"/> número <xsl:value-of select="@id"/></li>
<ul>
<xsl:apply-templates />
</ul>
</ul>
</xsl:template>
<xsl:template match="item">
<li><xsl:value-of select="//descrição[ @id = current()/@descrição ]" /> (qtde: <xsl:value-of select="@qtde"/>)</li>
</xsl:template>
<xsl:template match="descrição" />
</xsl:stylesheet>

E o resultado da aplicação do XSL no arquivo XML seria:

<html>
<body>
<b>Relação dos pedidos do documento XML</b>
<ul>
<li>pedido número 1</li>
<ul>
<li>Pacote de papel sulfite (qtde: 100)</li>
<li>Pacote de papel carbono (qtde: 20)</li>
</ul>
</ul>
<ul>
<li>pedido número 2</li>
<ul>
<li>Caixa de grampos (qtde: 10)</li>
<li>Borrachas (qtde: 50)</li>
</ul>
</ul>
2 pedidos listados
</body>
</html>

Que seria exibido em um browser assim:





Relação dos pedidos do documento XML

  • pedido número 1

    • Pacote de papel sulfite (qtde: 100)
    • Pacote de papel carbono (qtde: 20)


  • pedido número 2

    • Caixa de grampos (qtde: 10)
    • Borrachas (qtde: 50)
2 pedidos listados

Desta forma, podemos transformar o vocabulário usado no documento XML original em um outro vocabulário, que possua um significado específico (o HTML para ser compreendido e corretamente renderizado pelo browser).


Presente e futuro


Atualmente, diversas empresas de porte estão fazendo uso do XML para situações específicas. Bancos podem usar os recursos da estruturação de dados para distribuir o processamento dos mesmos, racionalizando o uso dos recursos de processamento envolvidos. Empresas podem acessar dados de parceiros, conforme comentamos acima, de forma a diminuir os custos com a transmissão e compartilhamento de dados. Sites podem oferecer parte seu conteúdo para ser inserido em outros sites, aumentando o número de visitas.


O potencial é bastante amplo. Podemos imaginar um software que teste a segurança de um servidor web, por exemplo. Conforme vão sendo descobertas novas vulnerabilidades nos servidores, um banco de dados centralizado de informações é atualizado, com os dados sendo disponibilizados no formato XML. Este software acessa esses dados e sempre executa os procedimentos mais atuais para descobrir eventuais falhas, sem a necessidade de instalar uma nova versão, auxiliando o trabalho de administradores de sistema. Já existem softwares com estas características em desenvolvimento.


A Microsoft acaba de lançar a versão beta 2 do seu .NET Framework. Desde o beta 1, podemos construir webservices, que são "entidades programáveis que residem em um servidor web e são acessadas via protocolos padrões da Internet". Utilizando estes webservices, podemos montar módulos que seriam incorporados a aplicações criadas por terceiros, sem necessidade de disponibilizar o código fonte ou componentes. Um exemplo seria um webservice que calcula um dígito verificador de um código específico de uma empresa, que pode permitir que terceiros validem informações, de modo a consistirem os dados que estariam sendo alimentados. Podemos também pensar em webservices para retornar números por extenso, cálculo de equações complexas, etc., sem que tenhamos a necessidade de recodificar estes módulos, aumentando a produtividade e diminuindo a redundância de código e a possibilidade de erros de codificação. O ponto chave é que os dados que são transmitidos/recebidos pelos webservices utilizam o padrão XML, tornando universal o acesso à  estas informações.


Com certeza, a adoção do XML como padrão para a troca de dados já é uma realidade e seu uso só tende a aumentar. O profissional que começar a se familiarizar com este novo padrão terá um diferencial em sua formação, que será muito requisitada em breve.



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...

segunda-feira, 18 de junho de 2001

0

ERR: Falha na rotina de logon

Um erro em nossa rotina de logon permitia que usuários não autorizados acessassem o site como se fossem usuários regulares. Nas palavras do colaborador que reportou o erro: "Quem nunca cometeu um erro que atire a primeira pedra..."


O erro já foi corrigido. Quem encontrar mais erros no site, plz, mande-me um email, que ganhará uma bitoca no nariz.



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...

1

Busca indiferente da acentuação

Caso você queira uma busca tipo Cadê? que pesquisa saude e encontra saúde ou pesquisa saúde e encontra saude, inclua esta função no seu código.

 

<%

function preparaPalavra(str)
 preparaPalavra = replace(str,"a","[a,á,à,ã,â,ä]")
 preparaPalavra = replace(preparaPalavra,"e","[e,é,è,ê,ë]")
 preparaPalavra = replace(preparaPalavra,"i","[i,í,ì,î,ï]")
 preparaPalavra = replace(preparaPalavra,"o","[o,ó,ò,õ,ô,ö]")
 preparaPalavra = replace(preparaPalavra,"u","[u,ú,ù,û,ü]")
 preparaPalavra = preparaPalavra
end function

 

' E o seu sql ficaria mais ou menos assim:

 

sql = "select * from tabela where campo like '%" & preparaPalavra(palavraprocurada) & "%'"

%>


Esta matéria foi postada originalmente no ASP4Developers por Rafael Martins de Ascenção (site), que na época era "também conhecido como Iamaz do news do FX. Programador ASP, ColdFusion. ". Hoje, vai saber...

quinta-feira, 7 de junho de 2001

0

Recuperar apenas nome do usuário

O código abaixo recupera apenas o nome do usuário, sem o domínio:


<%
    MyVar=request.servervariables("logon_user")
    MyPos = InstrRev(MyVar, "\", -1, 1)
    variavel=Mid(MyVar,MyPos+1,Len(MyVar))
%>



Esta matéria foi postada originalmente no ASP4Developers por Humberto Araújo Linhares Junay Jr. (site), que na época era "Ainda aprendiz em ASP, mas com grande vontade de trocar experiências bem sucedidas.". Hoje, vai saber...

quarta-feira, 6 de junho de 2001

0

Server.ScriptTimeOut

TimeOut


E ai pessoal, é só uma dica...
Quando vocês quiserem setar o timeout dos ASP sem ter que modificar as
configurações do IIS é só usar a seguinte linha de comando:


<%Server.ScriptTimeOut = 90%>


Onde 90 é o tempo em milisegundos.

Acredito q isso possa ser útil...



Abraços!



Esta matéria foi postada originalmente no ASP4Developers por Mórris Litvak (site), que na época era "programador em ASP há 2 e meio e desenvolve sistemas de sites dinâmicos". Hoje, vai saber...

terça-feira, 5 de junho de 2001

0

Validação de Data

Function FF_VerificaData(Controle)
   
    if trim(Controle.value)="" then exit function
   
    if len(Controle.value)<10 then sl_completadata controle
   
    if not isdate(Controle.value) then
       controle.focus
       msgbox "Data Invalida!",16
    elseif len(Controle.value)=1 or len(Controle.value)=4 then
       controle.focus
       msgbox "Data Invalida!",16
    elseif cint(mid(Controle.value,4,2)) > 12 then 
       controle.focus
       msgbox "Mês Invalido!",16
    elseif cint(right(Controle.value,4)) < 1900 Then
       controle.focus
       msgbox "Ano Invalido!",16
    End If   
   
End Function

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

Validação Titulo de Eleitor

obs: É necessário tambem a função removemascara() que está no final do artigo !


Function FF_TituloEleitor(Controle)
    Dim WL_DSTITELE
    Dim WL_NRSOMA
    Dim WL_NRRESTO
    Dim i
    Dim VL_Numero(10)
    Dim VL_Digito(2)
   
    FF_TituloEleitor = False


    WL_DSTITELE = RemoveMascara(Controle)


    if trim(WL_DSTITELE)="" then
       FF_TituloEleitor = True
       exit Function
    End if


    WL_DSTITELE = String(12 - Len(WL_DSTITELE), "0") + WL_DSTITELE
   
    'Preenche Vetor com Valores do Número do Título de Eleitor
    For i = 1 To 10
       VL_Numero(i) = Mid(WL_DSTITELE, i, 1)
    Next


    'Verifica Primeiro Dígito
    WL_NRSOMA = (VL_Numero(8) * 2) + (VL_Numero(7) * 3) + (VL_Numero(6) * 4) + (VL_Numero(5) * 5) + (VL_Numero(4) * 6) + (VL_Numero(3) * 7) + (VL_Numero(2) * 8) + (VL_Numero(1) * 9)
    WL_NRRESTO = WL_NRSOMA Mod 11
    'Atribui valor para o primerio dígito
    If WL_NRRESTO = 0 Or WL_NRRESTO = 1 Then
       VL_Digito(1) = 0
    Else
       VL_Digito(1) = 11 - WL_NRRESTO
    End If
   
    'Verifica Segundo Dígito.
    WL_NRSOMA = (VL_Digito(1) * 2) + (VL_Numero(10) * 3) + (VL_Numero(9) * 4)
    WL_NRRESTO = WL_NRSOMA Mod 11
    'Atribui Valor para o segundo dígito.
    If WL_NRRESTO = 0 Or WL_NRRESTO = 1 Then
       VL_Digito(2) = 0
    Else
       VL_Digito(2) = 11 - WL_NRRESTO
    End If
   
    'Retorna Valor do Dígito.
    If Right(WL_DSTITELE, 2) <> VL_Digito(1) & VL_Digito(2) Then
       Controle.focus
       MsgBox "Número do Título de Eleitor Inválido", vbOKOnly + vbInformation
       Exit Function
    End If
    FF_TituloEleitor = True


End Function


Function RemoveMascara(Controle)
Dim wl_string,i


    wl_string=""
    For i = 1 to Len(Controle.value)
        if mid(Controle.Mask,i,1)="9" or mid(Controle.Mask,i,1)="#" then
            wl_string = wl_string & mid(Controle.value,i,1)
        End If
    Next
    RemoveMascara = wl_string


End Function



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

Validação PIS/PASEP

obs: É necessário tambem a função removemascara() que está no final do artigo !


Function FF_PISPASEP(Controle)
    Dim WL_NRPISPASEP
    Dim WL_NRSOMA
    Dim WL_NRRESTO
    Dim i
    Dim VL_Numero(10)
   
    FF_PISPASEP = False
   
    WL_NRPISPASEP = RemoveMascara(Controle)


    if trim(WL_NRPISPASEP)="" then
       FF_PISPASEP = True
       exit Function
    End if


    WL_NRPISPASEP = String(11 - Len(WL_NRPISPASEP), "0") + WL_NRPISPASEP
   
    'Preenche Vetor com Valores do Número do CPF
    For i = 1 To 10
        VL_Numero(i) = Mid(WL_NRPISPASEP, i, 1)
    Next


    'Verifica Dígito
    WL_NRSOMA = (VL_Numero(10) * 2) + (VL_Numero(9) * 3) + (VL_Numero(8) * 4) + (VL_Numero(7) * 5) + (VL_Numero(6) * 6) + (VL_Numero(5) * 7) + (VL_Numero(4) * 8) + (VL_Numero(3) * 9) + (VL_Numero(2) * 2) + (VL_Numero(1) * 3)
    WL_NRRESTO = WL_NRSOMA Mod 11
    'Atribui valor para o primerio dígito
    If WL_NRRESTO = 0 Or WL_NRRESTO = 1 Then
       WL_NRRESTO = 0
    Else
       WL_NRRESTO = 11 - WL_NRRESTO
    End If
   
    'Retorna Valor do Dígito.
    If Right(WL_NRPISPASEP, 1) <> WL_NRRESTO Then
       Controle.focus
       If Controle.Mask = "###.#####.##-#" Then 'WF_NRTypeControl = CF_Pis Then
          MsgBox "Número do PIS inválido", vbOKOnly + vbInformation
       Else
          MsgBox "Número do PASEP inválido", vbOKOnly + vbInformation
       End If
       Exit Function
    End If
    FF_PISPASEP = True
   
End Function


Function RemoveMascara(Controle)
Dim wl_string,i


    wl_string=""
    For i = 1 to Len(Controle.value)
        if mid(Controle.Mask,i,1)="9" or mid(Controle.Mask,i,1)="#" then
            wl_string = wl_string & mid(Controle.value,i,1)
        End If
    Next
    RemoveMascara = wl_string


End Function



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

ASP com InterBase

     Nós, desenvolvedores ASP podemos contar agora com mais um grande aliado: o InterBase, a plataforma de Banco de Dados da Borland/Inprise.
    O Interbase é o que se pode chamar de "banco de dados de gente grande", não devendo quase nada em relação ao Oracle ou ao MS SQL Server. Se fôssemos fazer uma pesquisa com notas de 0 a 10 para todos os bancos de dados existentes no mercado, teríamos o Oracle com 10 (se deixasse os "Oracleiros" botavam 11!), o MS SQL Server com 9 e o InterBase com 8,5. Na verdade, o InterBase perde mais por causa de sua pouca popularidade, pois ele possui todos os recursos de um grande BD: domains, stored procedures, views, roles, triggers, generators, exceptions, suporte a UDF (User Defined Functions), além de uma integridade referencial impecável, controle de usuários e permissões, ferramentas de backup/restore, sweep e reparação de BD. Ele ainda apresenta duas grandes vantagens sobre seus concorrentes:

1. É leve. Levíssimo! Para se ter uma idéia, a instalação do server, por exemplo tem 8MB e o Client tem 5MB (aproximadamente). Ele roda leve também, não utilizando muito recurso de memória do sistema se não houver muitos usuários fazendo requisições ao mesmo tempo(o que faz com que qualquer servidor de BD comece a perder performance). Mesmo assim, o InterBase, assim como Oracle e SQL Server tira de letra o tratamento multi-usuário e grandes processamentos de dados.


2. É Free. Grátis. Custo 0. Mais barato que uma injeção na testa. E mais: é OpenSource. Isso foi uma jogada da Inprise/Borland para popularizar seu BD juntamente com o lançamento do Kylix e do Delphi 6. O download dos binários e/ou dos códigos fontes pode ser feito a partir de http://www.borland.com/devsupport/interbase/opensource/


    O Interbase ainda possui uma vantagem sobre o SQL Server: além do Windows, ele possui versões para Linux e para Solaris, com 100% de compatibilidade, ou seja, um BD criado no Windows roda redondinho no Linux e vice-versa.
   
Só havia uma problema: a Borland não desenvolveu drivers ODBC ou OLEDB para acessar o InterBase, tendo em vista que o acesso por Kylix/Delphi/C++Builder/JBuilder é praticamente nativo. O pessoal ASP/VB/Outros ficou de fora. A iniciativa ficou então para terceiros e após pequisar muito encontrei:



  • Drivers ODBC bons e pagos (caro!);

  • Drivers ODBC ruins e freeware;

  • Um driver OLEDB bom e gratuito (SIBProvider) desenvolvido por Márcio Wesley Borges, que pode ser obtido (intalação completa ou DLL somente) em http://www.sibprovider.com. Lá também, você encontra todas as informações necessárias ao seu uso como string de conexão e criação do objeto. Testado e aprovado!

Nossa comunidade agora pode contar com um BD excelente e gratuito!



Esta matéria foi postada originalmente no ASP4Developers por Adriano Nântua, que na época era "Engenheiro de software e analista de sistemas; Desenvolvedor ASP, Delphi, C/C++ e Java/JSP/Servlets; InterBase fan; Linux fan; Alvirrubro inveterado.". Hoje, vai saber...

0

Descarregando DLL's da memória

    Depois de muito fuçar por aí, descobri algo que é muito útil a nós que, além de desenvolvermos páginas ASP, desenvolvemos também objetos e componentes para ASP no formato de DLL's.
    Quando você está desenvolvendo, é normal você estar testando constantemente as mudanças, só que no caso do desenvolvimento de DLL's, isso se tornava bastante difícil, pois depois que a DLL ia para a memória, ela não saía mais de lá, até que houvesse o reboot do sistema, o que acarretava numa grande perda de tempo.
    Bom aí vão alguns comandos que servem para descarregar as DLL's sem precisar rebootar o sistema:


Se você utiliza o PWS:
c:\windows\system\inetsrv\pws.exe /stop /y


Se você utiliza o IIS
net stop iisadmin /y


    Obviamente, você terá, depois, que reiniciar o IIS/PWS. Eu testei o comando para o PWS e funcionou perfeitamente: logo que executei-o, compilei a DLL e ela tinha sido liberada imediatamente. Ainda não tive a oportunidade de testá-la no IIS, mas gostaria que vocês assim o fizessem e me reportassem.



Esta matéria foi postada originalmente no ASP4Developers por Adriano Nântua, que na época era "Engenheiro de software e analista de sistemas; Desenvolvedor ASP, Delphi, C/C++ e Java/JSP/Servlets; InterBase fan; Linux fan; Alvirrubro inveterado.". Hoje, vai saber...