CD BufaloInfo
Este treinamento fornece conceitos sobre como acessar bancos de dados utilizando ASP. É ensinado como fazer consultas a bancos de dados e como criar uma loja virtual.
Valor : R$ 100,00 ou 5 X de R$ 21,00


Alguns Algorítimos em ASP

Ramalho, na época do Clipper, chamava esse tipo de codificação de hard code (era hard code ou hard core, alguém se lembra?). Com o advento da interface gráfica essa necessidade de codificação desapareceu e mesmo quem tem pouco ou nenhum conhecimento de algorítimos de programação passou a poder criar programas.

Porém com o advento do desenvolvimento para Web os algorítimos complexos voltaram. Vejamos alguns exemplos :

Imagine que eu tenha um banco de dados com 200 campos. Preciso montar um SQL para fazer a inserção dos dados. Montar a tela, sem dúvida é uma coisa que terá que ser feita na mão. Mas na montagem da tela eu poderia assegurar que os INPUTS tivessem o mesmo nome do campo na base de dados, acrescidos de "txt" (isso é só um exemplo). Se eu posso assegurar isso, então o seguinte código pode ser útil :

dim x
dim sql
sql=""
for each x in request.form

sql=sql & request.form(x) & ","

next
sql=right(sql,len(sql)-1) 'Isso é para tirar a última , que irá sobrar no final deste algorítimo.

Assim sendo, com 7 linhas de código teria inserido 200 campos dentro de uma string SQL. Uma linha a mais fecharia o código :

sql="insert into tabela values (" & sql & ")"

Você com certeza notou que só estou inserindo campos numéricos. Para inserir campos de diversos tipos a coisa complicaria um pouquinho, mas não muito. Eu poderia utilizar um vetor que tivesse um tamanho igual ao número de campos do formulário. E como eu saberia o índice do vetor no qual eu estou ? Fácil : numeraria os campos dos formulários. Utilizaria o próprio nome dos campos para fazer uma numeração de 3 dígitos que poderia ser utilizada da seguinte forma :

dim x
dim sql
dim ind
sql=""
for each x in request.form

ind=cint(right(x,3)) 'Peguei o indice do vetor
if Vetor(ind)=1 then

sql=sql & request.form(x) & ","

else

sql=sql & "'" & request.form(x) & "',"

end if

next
sql=right(sql,len(sql)-1) 'Idem
sql="insert into tabela values (" & sql & ")"

Observe que o código assume que 1 é um campo numérico e 2 é não numérico. Não é necessário testar nenhum tipo a mais, basta saber se é ou não necessário inserir apóstrofo na instrução SQL. O código não contém a criação do vetor, pq é muito simples. Para arrematar : Você deve estar imaginando que isso nunca irá funcionar porque você não pode garantir que a ordem dos campos na base de dados é a mesma ordem dos campos no request.form. Veja novamente :

dim x
dim sql
dim sql2
dim ind
sql=""
sql2=""
for each x in request.form

sql2=sql2 & left(right(x,len(x)-3),len(right(x,len(x)-3))-3 & ","
ind=cint(right(x,3)) 'Peguei o indice do vetor
if Vetor(ind)=1 then

sql=sql & request.form(x) & ","

else

sql=sql & "'" & request.form(x) & "',"

end if

next
sql=right(sql,len(sql)-1) 'Idem
sql2=right(sql2,len(sql2)-1)
sql="insert into tabela (" & sql2 & ") values (" & sql & ")"

A instrução INSERT permite especificar uma lista de campos, assim sendo, prevalece a ordem estabelecida na lista de campos. Então ao mesmo tempo que é montada a lista de dados é montada uma lista com o nome dos campos para a inserção na instrução INSERT. Assim sendo, com estas poucas linhas de código todos os campos estariam devidamente gravados na base de dados.

Obs. : A grande expressão utilizada na definição do SQL2 tem como objetivo eliminar o "txt" inicial e os 3 dígitos representativos do vetor para obter apenas o nome do campo para a instrução INSERT. Essa expressão poderia ser dividida em várias linhas para ficar mais inteligível, mas da forma em que está fica mais desafiadora.

Mais um problema : E se houvessem campos adicionais no formulário com outras finalidades, que não devessem ser inseridos na base de dados ? Fácil ! Não insira o inicio "txt" no nome do campo! Assim sendo basta acrescentar um IF ao código :

dim x
dim sql
dim sql2
dim ind
sql=""
sql2=""
for each x in request.form

if left(x,3)="txt" then

sql2=sql2 & left(right(x,len(x)-3),len(right(x,len(x)-3))-3 & ","
ind=cint(right(x,3)) 'Peguei o indice do vetor
if Vetor(ind)=1 then

sql=sql & request.form(x) & ","

else

sql=sql & "'" & request.form(x) & "',"

end if

end if

next
sql=right(sql,len(sql)-1) 'Idem
sql2=right(sql2,len(sql2)-1)
sql="insert into tabela (" & sql2 & ") values (" & sql & ")"

Só para completar : Esse código poderia ser criado na forma de uma função (function/end function), ser gravado em um arquivo a parte e ser inserido através de INCLUDE em todo código que necessitasse de gravacao em banco de dados.

 

Dennes Torres
MCSD,MCSE,MCDBA