ago 28

Já mostrei aqui como carregar, em tempo de execução, um arquivo de folha de estilo css dinamicamente. Neste post, mostrarei como fazer para carregar um arquivo js também em tempo de execução. Para fazer isto, usaremos um método da classe ClientScriptManager presente no namespace System.Web.UI. O método RegisterClientScriptInclude é o responsável por incluir o arquivo js. Sua sintaxe, de acordo com a documentação da Microsoft, é a seguinte:

Name Description
ClientScriptManager.RegisterClientScriptInclude (String, String) Registers the client script include with the Page object using a key and a URL.
ClientScriptManager.RegisterClientScriptInclude (Type, String, String) Registers the client script include with the Page object using a type, a key, and a URL.

Para a utilização portanto deste método, faz-se necessário chama-lo apartir de um objeto do tipo Page.

Ex:

Page.ClientScript.RegisterClientScriptInclude(

   "jsHighSlide", "highslide.js");

Onde jsHighSlide é nome da chave (key) utilizada para identificar este objeto e highslide.js é o nome de arquivo que será incluído na página. O nome do arquivo pode ser uma url inteira, ou seja incluir http:// …


View this Post in: English French Italian Spanish

ago 27

Se você já utilizou os componentes AJAX da Microsoft, já deve ter tido esse mesmo problema. Quando você utiliza o UpdatePanel por exemplo, como tudo na página é atualizado de forma dinâmica (sem refresh), o ClientScript perde a sua funcionalidade pois depende de um PostBack inteiro da página para que assim execute os scripts. Pesquisando um pouco, encontrei a solução: a classe ScriptManager. A forma de utilização da classe é praticamente a mesma no ClientScript, veja:

Registrando um script sem o AJAX com o ClientScript.

ClientScript.RegisterClientScriptBlock(
   type, key, script, addScriptTags);

Ex.:

Page.ClientScript.RegisterStartupScript(
   Page.GetType(), "Alert", "alert('Olá Mundo')", true);

Registrando o script com AJAX com o ScriptManager

ScriptManager.RegisterStartupScript(
   control, type, key, script, addScriptTags);

Ex.:

ScriptManager.RegisterStartupScript(
   Page, Page.GetType(), "Alert", "alert('Olá Mundo')", true);

A classe ScriptManager está no namespace System.Web.UI, mas é preciso acrescentar  uma referência à dll System.Web.Extensions.dll


View this Post in: English French Italian Spanish

ago 26

Para exemplificar o uso do CASE em uma consulta SQL, estarei mostrando aqui alguns exemplos quem podem ser aplicados à situação a seguir.

Suponha que você tenha uma tabela de pessoas com os campos, cdcliente, cdfornecedor e tppessoa. Onde nesta tabela ou o campo cdcliente estará preenchido ou o campo cdfornecedor.

A idéia será fazer um sql que retorne o nome da pessoa dependendo do tipo.

Uma das soluções seria fazer dois left joins nas tabelas de cliente e fornecedor pegando o nome de cada uma delas. No entanto, neste caso a consulta retornaria dois campos, e isto não é desejado.

Para fazer então que a consulta retorne apenas um campo, utilizaremo o CASE.

Veja:

SELECT nome =
CASE tppessoa
   WHEN 1 THEN (
      SELECT c.nome FROM cliente c WHERE c.cdcliente = p.cdcliente
   )
   WHEN 2 THEN (
      SELECT f.nome FROM fornecedor f
      WHERE f.cdfornecedor = p.cdfornecedor
   )
   ELSE ''
END
FROM pessoa p

Neste exemplo, estamos verificando qual o valor contido no campo tppessoa. Caso for 1, fazemos um select na tabela de cliente buscando o seu nome. E caso for 2 buscamos o nome na tabela de fornecedores. O resultado e armazenado no campo nome, criado na própria consulta. Se nenhuma dos valores (1 ou 2) for verdadeiro o campo irá receber uma string vazia (neste caso).

Outra solução seria:

SELECT nome =
CASE
   WHEN cdfornecedor is not null THEN (
      SELECT c.nome FROM cliente c WHERE c.cdcliente = p.cdcliente
   )
   WHEN cdfornecedor is not null THEN (
      SELECT c.nome FROM cliente c WHERE c.cdcliente = p.cdcliente
   )
END
FROM pessoa p

Neste caso o campo tppessoa nem é necessário contanto que exista na tabela somente o valor de cdcliente ou cdfornecedor, sendo que um dos campos deverá conter valor nulo. Perceba que agora o CASE possui condições distintas, diferente do primeiro exemplo. Utilizando essa mesma idéia poderíamos fazer um select que retornaria a descrição do tipo de pessoa, por exemplo:

SELECT nmtppessoa =
   CASE
      WHEN cddependente is not null THEN 'Cliente'
      WHEN numatricula is not null THEN 'Fornecedor'
   END
FROM pessoa p

O CASE também pode ser usado em uma condição, ou seja dentro do WHERE. Veja um outro exemplo:

SELECT NOME , SALDO , SALDO_POUPANÇA , SALDO_APP , VAL_DEPOSITO
FROM CONTA_CORRENTE
WHERE
   (
   CASE SALDO
      WHEN SALDO < 0 THEN SALDO_POUPANÇA
      WHEN SALDO >= 0 THEN SALDO
      WHEN SALDO > 10000 THEN SALDO_APP
   ) > VAL_DEPOSITO

Neste exemplo, a condição sendo verdadeira, o que será retornado será o valor de um dos campos que logo após será verificado se é maior do que VAL_DEPOSITO, finalizando assim o WHERE da consulta principal.


View this Post in: English French Italian Spanish

ago 25

Muito legal a idéia da Google. Você simplesmente adiciona um contato no gtalk, manda uma mensagem para ele e recebe uma mensagem de volta com o texto traduzido. Experimente.

Para traduzir de português para inglês, utilize o contato:

pt2en@bot.talk.google.com

E para traduzir de inglês para português.

en2pt@bot.talk.google.com


View this Post in: English French Italian Spanish

ago 24

Muitas das vezes precisamos recuperar apenas algumas das diversas linhas retornadas por uma consulta SQL. Por isso, para economizar alguns bytes trafegando pela rede, nada mais fácil do que fazer a consulta só retornar a quantidade de linhas desejadas. Para fazer isso, segue abaixo o comando referente a diversos banco de dados.

SQL SERVER

SELECT TOP n nome_campos FROM nome_tabela

Onde n é o número de linhas desejadas, nome_campos são os campos ou o campo que será retornado e nome_tabela o nome da tabela.

Utilizando este recurso conseguimos também fazer paginação de dados. Por exemplo:

SELECT     TOP 5 nome_campos FROM nome_tabela

WHERE     (campo_chave NOT IN

                   (SELECT TOP 10 campo_chave FROM nome_tabela)

)

Onde 5 é o número de registro por página e 10 é o resultado da multiplicação da quantidade de registros pela página atual. No exemplo, o SQL retornaria os registros da segunda página. Para retornar da terceira bastaria mudar o SQL substituindo o 10 por 15 e assim por diante.

MYSQL

SELECT * FROM TABELA LIMIT n

ou

SELECT * FROM TABELA LIMIT 0, n

No MySQL é ainda mais fácil fazer paginação de dados. Veja.

Ex.:

SELECT * FROM TABELA LIMIT 10, 5

Da mesma maneira que no exemplo do SQL Server, o resultado se aplica a uma paginação de 5 registros por página.
A paginação ocorre então ao mudar o valor 10 para 15, 20, 25 etc… Ou seja multiplicar a núrero da página pela quantidade de registro por página.

FIREBIRD

SELECT FIRST n nome_campos FROM nome_tabela;

Para fazer a paginação e pular os registros utiliza-se a cláusula SKIP.

SELECT FIRST n SKIP x nome_campos FROM nome_tabela;

INTERBASE

No INTERBASE não há o comando FIRST. Usa-se a cláusula ROWS  no lugar.

SELECT nome_campos FROM nome_tabela ROWS n;

Para fazer a paginação e pular os registros utiliza-se a cláusula TO.

SELECT nome_campos FROM nome_tabela ROWS 5 TO 10;

View this Post in: English French Italian Spanish