terça-feira, 30 de janeiro de 2007

Editando texto com JavaScript

Há alguns dias atrás vi um questionamento no forumweb sobre uma forma de fazer um editor de texto (HTML) igual ao do próprio forumweb. Sugeri o uso do RTE - http://www.kevinroth.com/rte/ -, que é um bom editor HTML para ser inserido em páginas WEB, para edição de textos. Hoje vi a resposta dele e ele disse não querer algo tão complexo como o RTE. Então lembrei de um código que vi uma vez... Era um simples "textarea" que possuia alguns botões de edição como negrito, italico, etc. Resolvi então fazer algo parecido pro brother. É uma solução super simples, mas interessante em casos como esse. Segue o código:
<html>
<head>
<script>
function funcao(opcao)
{
var msg, texto, texto_aux, code_1, code_2;
switch (opcao)
{
case "N":
msg = "Digite o texto que ficará em negrito: ";
code_1 = "<b>";
code_2 = "</b>";
break;
case "I":
msg = "Digite o texto que ficará em itálico: ";
code_1 = "<i>";
code_2 = "</i>";
break;
case "S":
msg = "Digite o texto que ficará sublinhado: ";
code_1 = "<u>";
code_2 = "</u>";
break;
}
texto = window.prompt(msg, "");
texto_aux = code_1 + texto + code_2;

document.getElementById("txtCampo").value = document.getElementById("txtCampo").value + texto_aux;

document.getElementById("txtCampo").focus();
}
</script>

</head>
<body>

<img src="img/negrito.jpg" onClick="funcao('N')">
<img src="img/italico.jpg" onClick="funcao('I')">
<img src="img/sublinhado.jpg" onClick="funcao('S')">

<br>

<textarea name="txtCampo" id="txtCampo" cols="40" rows="5"></textarea>

</body>
</html>

Utilizei algumas imagens para dar a ideia de edição. Ao clicar nessas imagens é acionado uma função javascript que abre um "prompt" que solicita ao usuário escrever o texto que deseja colocar em negrito, italico ou sublinhado. Ao inserir o texto a função joga no "textarea" o texto digitado, com as tags HTML para negrito, itálico ou sublinhado.

quarta-feira, 24 de janeiro de 2007

Utilizando cursor no SQL Server

O cursor é um recurso da linguagem T-SQL (Transact SQL - uma especialização da ANSI SQL, própria para o MS SQL Server) muito útil quando é precisa percorrer todo o conjunto de registros de uma query e baseado nesta tomar decisões como: inserir, remover ou atualizar dados em uma tabela, ou até mesmo preencher uma tabela temporaria. Há uma gama de desenvolvedores e DBA que são contra o uso deste recurso. Esses alegam que o uso do cursor sobrecarrega o banco. Eu, particularmente nunca percebi isso. Já realizei alguns testes usando o cursor e não usando e o tempo de resposta foi o mesmo. Talvez por usar pouco não vi diferença. Então é melhor usar somente quando for muito necessário.

Abaixo segue um exemplo do uso do cursor para preencher uma tabela temporaria, atualizar, apagar e inserir dados em outras tabelas. Um cursor precisa ser declarado (passando a query que ele irá percorrer) e posteriormente aberto. Como todo ponteiro, inicialmente aponta pro vazio, então após aberto, é preciso usar o comando fetch next passando as variáveis que armazenarão os dados do cursor. A idéia de cursor lembra a de uma recordset. No final do laço while é necessário usar o fetch next novamente para que o cursor se mova para o proximo registro. Para finalizar é necessário fechar o apontador e depois desaloca-lo da memória.

CREATE TABLE #TEMP_VAL (CODIGO INT, CODIGO VARCHAR(50))
DECLARE @id AS INT, @user AS VARCHAR(50)

DECLARE CUR_ADM CURSOR FOR
SELECT id, username
FROM administrador
WHERE ativo = 1

OPEN CUR_ADM

FETCH NEXT FROM CUR_ADM INTOH NEXT FROM CUR_ADM INTO @id, @user

WHILE @@FETCH_STATUS = 0
BEGIN
IF @user = 'teste'
BEGIN
INSERT #TEMP_VAL
VALUES
(
@id, @user
)

DELETE administrador
WHERE id = @id
END


FETCH NEXT FROM CUR_ADM INTO @id, @user
END

CLOSE CUR_ADM

SELECT * FROM #TEMP_VAL

DROP TABLE #TEMP_VAL

DEALLOCATE CUR_ADM


Utilizei no exemplo também uma tabela temporária para armazenar alguns dados e posteriormente apaguei usando o drop. Tabelas temporárias são criadas colocando o # ou ## na frente de seus respectivos nomes. O uso de 1 # ou 2 # é de acordo com a necessidade da aplicação.