Leobreda.Net
HTML | DHTML | JavaScript | DOM | Ajax | Asp | Asp.net | PHP | Ms. SQL | MySQL
Pesquisa por: boas práticas
15 de novembro de 2008 21:55322 visitas
Com a ascenção e o crescimento no mercado de TI, o webdesigner e o programador são profissionais que lidam diariamente com ferramentas distintas: o Webdesigner cuida do layout e da usabilidade da página, enquanto o programador cuida das funcionalidades e impressão de resultados.
Em muitos lugares, é de costume encontrar estes 3 tipos de profissionais:
E como fazer para um profissional fornecer o que o outro precisa? Devido ao crescimento deste mercado, foi necessário conceder na estrutura de desenvolvimento vários parâmetros, em que o principal deles é a camada de apresentação (onde o usuário final tem acesso às informações).
Nas linguagens de Programação voltadas p/ a Web, já é possível trabalhar em situações na qual o código-fonte fica separado da codificação de algoritmos.
Este é um exemplo para quem tem o costume de trabalhar com o ASP, misturando a programação com o código HTML, tipicamente conhecido como "algoritmo spaghetti".
Cito então um exemplo de um datagrid em ASP, na qual conecto a um banco de dados, e faço imprimir a relação de estados brasileiros:
1. Conexão SQL
sub abreconexao()
Set objConexao = CreateObject("ADODB.Connection")
objConexao.commandTimeout=20
'MySQL Localhost
objConexao.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server=localhost; Database=leobredacom; User=root;Password=root;Option=3;"
objConexao.Open
end sub
sub fechaconexao()
objConexao.Close : Set objconexao = Nothing
end sub
2. Montando o datagrid utilizando o "algoritmo spaghetti".
<head>...</head>
<body>
<table>
<tr>
<td>Código</td>
<td>Nome</td>
</tr>
<% strSQL = "SELECT ESTADO_COD, ESTADO_DESC FROM ESTADOS WHERE PAIS='BRASIL' ORDER BY ESTADO_DESC"
call abreConexao : set objRecordset=CreateObject("ADODB.Recordset") : objRecordset.Open strSQL, objConexao
while NOT objRecordset.EOF%>
<tr>
<td><%=objRecordset("ESTADO_COD")%></td>
<td><%=objRecordset("ESTADO_DESC")%></td>
</tr>
<%objRecordset.MoveNext : wend : objRecordset.Close : set objRecordset=nothing : call fechaConexao%>
</table>
</body>
</html>
Pelo código, a programação se misturou com o HTML, onde não é critério do Programador lidar com HTML, e nem o WebDesigner se interessar o que está no algoritmo. Com a popularidade de editores WYSIWYG, a página será editada, e a consulta poderá ir para o final da página, ou mesmo ser apagada, ocorrendo complicações futuras, brigas entre os dois profissionais (a mais provável), etc.
3. Montando o datagrid SEM utilizar o "algoritmo spaghetti".
<% strSQL = "SELECT ESTADO_COD, ESTADO_DESC FROM ESTADOS WHERE PAIS='BRASIL' ORDER BY ESTADO_DESC"
call abreConexao : set objRecordset=CreateObject("ADODB.Recordset") : objRecordset.cursorLocation=3 : objRecordset.Open strSQL, objConexao
i=0
redim ESTADO(objRecordset.RecordCount-1,1)
while NOT objRecordset.EOF
ESTADO(i,0) = int(objRecordset("ESTADO_COD")) 'Código do Estado
ESTADO(i,1) = objRecordset("ESTADO_DESC") 'Nome do Estado
i=i+1
objRecordset.MoveNext : wend : objRecordset.Close : set objRecordset=Nothing : call fechaConexao%>
<html>
<head>...</head>
<body>
<table>
<tr>
<td>Código</td>
<td>Nome</td>
</tr>
<%for i=0 to uBound(ESTADO)%>
<tr>
<td><%=ESTADO(i,0)%></td>
<td><%=ESTADO(i,1)%></td>
</tr>
<%next%>
</table>
</body>
</html>
Por este código, foi possível separar a programação da página em sí. Costumo adotar este padrão, inserindo TODAS as programações possíveis antes do código HTML. Se for preciso alterar o layout da página, basta o Webdesigner manipular dentro do HTML os valores do vetor ESTADO. Se apagar, basta consultar onde o vetor foi montado linha-a-linha, dizendo o que é cada informação do vetor através do "dicionário de informações" nos comentários...
27 de setembro de 2008 22:00376 visitas
Conforme os POSTs anteriores, estou enviando mais uma dica à respeito de Conexão ao Banco de Dados. Desta vez, estarei falando sobre o comando INSERT e UPDATE.
Atualmente, o comando SELECT é utilizado para ler resultados de um banco de dados. Já o INSERT, é um comando para INSERIR dados neste mesmo banco de dados. E para atualizar os dados, temos o UPDATE.
Seguindo os mesmos caminhos do Include CONEXAO.ASP, informado no post Boas práticas para trabalhar com ASP - Parte II ...
Arquivo conexao.asp
<%
Dim objConexao
Dim objComando
Dim executa
sub abreconexao()
Set objConexao = CreateObject("ADODB.Connection")
objConexao.commandTimeout=20
'MySQL Localhost
objConexao.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=leobredacom; User=root;Password=root;Option=3;"
objConexao.Open
conexao_executa=true
end sub
sub executaconexao(comando)
if conexao_executa=false then
call abreconexao
end if
set objComando = CreateObject("ADODB.Command")
objComando.ActiveConnection = objConexao
objComando.CommandText = comando
objComando.Execute()
Set objComando = Nothing
call fechaconexao
end sub
sub fechaconexao()
objConexao.Close : Set objconexao = Nothing
conexao_executa=false
end sub
%>
O arquivo pagina.asp, fazendo um SELECT, ...
<!--#include file="conexao.asp"-->
Olá, agora são <%=now()%>
<% strSQL = "SELECT ESTADO_DESC FROM TB_ESTADO WHERE PAIS='Brasil' ORDER BY ESTADO_DESC"
call abreConexao : set objRecordset = CreateObject("ADODB.Recordset") : objRecordset.Open strSQL, objConexao
while NOT objRecordset.EOF%>
Estado: <%=ObjRecordset("ESTADO_DESC")%><br />
<% objRecordset.MoveNext : Wend : objRecordset.Close : set objRecordset = Nothing : call fechaConexao%>
... inserindo e atualizando os resultados utilizando a sub executaConexao().
<!--#include file="conexao.asp"-->
<% strSQL = "INSERT INTO TB_ESTADO (PAIS, ESTADO) VALUES ('Brasil', 'São Paulo')"
executaConexao(strSQL)
strSQL = "UPDATE TB_ESTADO SET PAIS='Paraguai' WHERE ESTADO_DESC='Assunción'"
executaConexao(strSQL) %>
A própria sub abreConexao() faz a conexão ao banco de dados, e a execução do INSERT (ou UPDATE, conforme a necessidade).
23 de setembro de 2008 22:00544 visitas
Existem mil maneiras para fazer com que sua aplicação se conecte a um banco de dados, desde as piores, até as mais eficientes.
Uma delas é aquela que você cria os objetos de conexão, informa as strings de conexão, monta a query, lê os resultados e esquece que tem que destruir o objeto (é, infelizmente o Prof. Agnaldo esqueceu de comentar isso quando eu aprendi ASP na Impacta). No final do dia, você tem um computador de última geração com processador em 99% de uso e não sabe o que aconteceu.
No meu caso foi assim: meu primeiro programa foi montar um sistema que consultava uns dados no banco de dados, populava os mesmos numa tabela e fim de papo; quando a gente é iniciante, fica se gabando com aquelas páginas rodando no IIS com dados dinâmicos e esquece aquelas hospedagens gratuitas do tempo do Geocities.
Voltando para o programa, TODAS as páginas eu colocava logo na primeira linha um INCLUDE contendo os dados de conexão com o Banco de dados, e abria logo de cara, mesmo sem necessidade de utilizar Banco de Dados em algumas páginas.
O include CONEXAO.ASP seria este aqui:
Set objConexao = CreateObject("ADODB.Connection")
'MySQL
objConexao.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=leobredacom; User=root;Password=root;Option=3;"
objConexao.Open()
E esta seria uma página
<!--#include file="conexao.asp"-->
Olá, agora são <%=now()%>
Olha a tremenda merda que eu fiz: para escrever "Hello, Wordl!" não precisa de Banco de Dados.
E esta seria uma outra página, agora sim conectando a um banco de dados ;-)
<!--#include file="conexao.asp"-->
Olá, agora são <%=now()%>
<% strSQL = "SELECT ESTADO_DESC FROM TB_ESTADO WHERE PAIS='Brasil' ORDER BY ESTADO_DESC"
set objRecordset = CreateObject("ADODB.Recordset") : objRecordset.Open strSQL, objConexao
while NOT objRecordset.EOF%>
Estado: <%=ObjRecordset("ESTADO_DESC")%><br/>
<% objRecordset.MoveNext : Wend : objRecordset.Close : set objRecordset = Nothing : objConexao.Close : Set objConexao = Nothing
%>
*DICA: Experimente colocar várias instruções na mesma linha E separadas por ":" (dois pontos). Assim não precisa ficar aquele monte de linha com apenas 3 palavras.
O resultado do Recordset acima faria retornar todos os Estados do Brasil. Mas ainda assim:
Estudando um pouco mais, tive a necessidade de descobrir uma maneira mais eficiente (eu não tinha usado a lógica) de contornar este problema.
Então faria assim:
E cada vez que eu preciso de consultar o Banco de Dados, faço esta rotina repetidamente, desta maneira:
O include CONEXAO.ASP
Dim objConexao
sub abreconexao()
Set objConexao = CreateObject("ADODB.Connection")
objConexao.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=leobredacom; User=root;Password=root;Option=3;"
objConexao.Open()
end sub
sub fechaconexao
objConexao.Close : Set objConexao=Nothing
end sub
Já esta página, agora TODA VEZ QUE preciso conectar ao banco de dados, chamo a função abreConexao()
<!--#include file="conexao.asp"-->Olá, agora são <%=now()%>
<% strSQL = "SELECT ESTADO_DESC FROM TB_ESTADO WHERE PAIS='Brasil' ORDER BY ESTADO_DESC"
call abreConexao() : set objRecordset = CreateObject("ADODB.Recordset") : objRecordset.Open strSQL, objConexao
while NOT objRecordset.EOF%>
Estado: <%=ObjRecordset("ESTADO_DESC")%><br/>
<% objRecordset.MoveNext : Wend : objRecordset.Close : set objRecordset = Nothing : call fechaConexao()%>
Este é um método eficiente de conectar ao Banco de dados APENAS quando desejamos.
No próximo POST, estarei incrementando este artigo, na qual é possível montar uma GRID separando o HTML do ASP - ver Spaghetti.