0

Excel retorna valores como NULL Usando OpenRecordset DAO

Posted by Fabio's Blog on 16:55
Ao se conectar a uma planilha do Excel usando o método DAO OpenRecordset, alguns valores em uma coluna do Excel podem ser retornados como nulo quando o valor subjacente não é um nulo. Isso normalmente ocorre quando tipos de dados numéricos e de texto são misturados dentro da mesma coluna do Excel.

Esse problema é causado por uma limitação do driver ISAM do Excel que, uma vez que determina o tipo de dados de uma coluna do Excel, ele irá retornar um valor nulo para qualquer valor que não é do tipo de dados do driver ISAM. O driver do Excel ISAM determina o tipo de dados de uma coluna do Excel, examinando os valores reais nos primeiros registros e, em seguida, escolhe um tipo de dados que representa a maioria dos valores em sua amostragem.

Você pode adicionar a opção IMEX = 1; Por exemplo:

    Set db = OpenDatabase ("C: \ Temp \ Book1.xls", _ False, True, "Excel 8.0; HDR = NO; IMEX = 1;")


Ambiente IMEX = 1 indica o driver para usar o modo de importação. Neste estado, a configuração do Registro ImportMixedTypes = texto vai ser notado. Este dado força a conversão dos dados em texto. Para que isso funcione de forma confiável, você também pode ter de alterar a configuração do registro, TypeGuessRows = 8. O driver ISAM por padrão olha para as primeiras oito linhas e de que a amostragem determina o tipo de dados. Se esta linha de amostragem é tudo numérico, em seguida, definindo IMEX = 1 não irá converter o tipo de dados padrão para texto, ele permanecerá numérico.

Você deve ter cuidado para que IMEX = 1 não ser usado indiscriminadamente. Este é o modo de importação, portanto, os resultados podem ser imprevisíveis se você tentar inserir ou atualizar de dados nesse modo.

Espero que tenha sido útil.

0

Session State timeout C#

Posted by Fabio's Blog on 13:28
Existem alguns sistemas que precisam de um timeout maior do estado da sessão, por exemplo alguns sistemas que os usuário deixam a janela aberta para efetuar outras rotinas e somente depois terminarem a tarefa no sistema, algumas vezes precisamos modificar o timeout de sessão dos nossos sistemas, o timeout padrão é de 20 minutos. Para configurarmos o timeout de sessão é só inserir a linha abaixo no web.config do nosso sistema dentro da tag <system.web>.

    
...
< system.web >
< sessionState timeout="60" >
...


No exemplo acima configurei minha aplicação com um timeout de sessão de 60 minutos.

Espero que tenha sido útil.

0

Erro de divisão por zero (Error divide by zero) C#

Posted by Fabio's Blog on 10:49
Erro de divisão por zero é muito comum na nossa área, ainda mais quando temos que fazer importações, ou efetuar cálculo através de dados digitados pelo usuários, abaixo a rotina para não haver esse incoveniente para o usuário ao preencher uma tela do sistema.


int a = 0;
int b = 10;
int c = 0;

try
{
    a = b / c;
}
catch (Exception e)
{
    Console.WriteLine("A run-time error occurred.");
}
finally
{
    Console.ReadLine();
}



Espero que tenha sido útil.

0

Inserir espaços em branco ou zeros para códigos

Posted by Fabio's Blog on 12:55
Muitas vezes precisamos estabelecer em nosso códigos um certo número de casas para um campo, principalmente quando trabalhamos com geração de arquivo texto, muito utilizado para fazer importação de dados entre sistemas, abaixo coloco um código que gera esse tipo de resultado, segue:

// Insere espaços em branco
public string Space(int nx)
{
    string strret = "";
    for (int i = 1; i <= nx; i++)
        strret = strret + " ";

    return strret;
}

// Insere Zeros em uma string
public string Zero(int nx)
{
    string strret = "";
    for (int i = 1; i <= nx; i++)
        strret = strret + "0";

    return strret;
}

E a chamada para concatenar ou simplesmente preencher o campo:

string v_cd_prod = Zero(9 - v_cd_prod.Length);


No exemplo acima a variável v_cd_prod será carregada com 9 zeros.

Espero que tenha sido útil.


1

VERIFICA PERIODO ENTRE DATAS - JAVASCRIPT

Posted by Fabio's Blog on 09:02
Esta função verifica um prazo entre datas na linguagem Javascript:


 // Declara as variáveis
var dtMin, dtMax
var strData, strPrzMin, strPrzMax
var aryData

// captura a data inicial
strDataIni = '<%= mid(now,1,2) & "/" & mid(now,4,2) & "/" & mid(now, 7,4)%>';
// captura a data final - No exemplo utilizaei um TextBox para digitar esta data
strDataFim = document.Form1.txtDataVencimento.value;
// Estipulo aqui um prazo mínimo
strPrzMin = 30;
// Estipulo aqui um prazo máximo
strPrzMax = 180;

// Efetua aqui o cálculo da diferença entre as datas inicial e final
var fim = new Date(strDataFim.split('/')[2], strDataFim.split('/')[1], strDataFim.split('/')[0]);
var inicial= new Date(strDataIni.split('/')[2], strDataIni.split('/')[1], strDataIni.split('/')[0]);
diferenca = ((Date.UTC((fim.getYear()),fim.getMonth(),fim.getDate(),0,0,0)-Date.UTC((inicial.getYear()),inicial.getMonth(),inicial.getDate(),0,0,0)) / 1000 / 60 / 60/ 24) -1;

// Verifico a diferença entre o prazo mínimo e máximo
if (diferenca < strPrzMin)
{
    alert('O prazo mínimo para a Data de Vencimento é de 30 Dias');
    document.Form1.txtDataVencimento.focus();
    return;
}

if (diferenca > strPrzMax)
{
    alert('O prazo máximo para a Data de Vencimento é de 180 Dias');
    document.Form1.txtDataVencimento.focus();
    return;
}

Espero que tenha sido útil.

0

SQL Server. Habilitando SQL Authentication e o usuário 'sa'

Posted by Fabio's Blog on 15:24
Um problema comum quando se utiliza o SQL Server é quando não é possível entrar com usuários SQL Server, exemplo o super usuário “sa”, pois durante a instalação foi configurado para Windows Authentication.
Como mencionado em um post no Fórum do MSDN: “Criei a instância, criei senha para meu login, mais quando vou entrar pela autenticação do SQL SERVER, ele dá erro, já pela da autenticação do Windows ele dá certo…”
Visto que não é possível ficar reinstalando o SQL Server, somente para trocar a autenticação de Windows Authentication para “Mixed” Authentication, segue neste post a solução para este problema.
Primeiramente é necessário entrar no SQL Server utilizando o SQL Server Management Studio. Conforme a figura abaixo, estou conectando em uma instância do SQL Server 2008 Express utilizando a autenticação Windows Authentication, mas este exemplo funciona perfeitamente no SQL Server 2005 e nas edições superiores.


Após conectar, clicando com o botão direito do mouse sobre a instância do SQL Server na janela Object Explorer (Atalho F8 ou Menu “View\Object Explorer”), item Properties.

Nesta nova janela, na aba (“página”) Security, altere “Server authentication” para “SQL Server and Windows Authentication mode”.

Feito isso, uma janelinha informará que para esta alteração ter efeito, será necessário que o serviço do SQL Server deve ser reiniciado. Mas isso pode ser feito depois, quando for terminada a configuração dos usuários do SQL Server, então deixe para depois.


Continuando na janela Object Explorer, expandindo a instância, “folder” Security\Logins, pode ser criado novos usuários do SQL Server ou seguindo o objetivo inicial deste tópico, habilitar o usuário “sa”.
Conforme a figura abaixo, botão direito sobre o login “sa”, menu Properties.


Na nova janela, altere o password do usuário, também é possível alterar o “idioma” e o banco de dados padrão deste usuário nesta janela, entre outras funcionalidades.



Na aba (“página”) Status, clique na opção “Grant” em “Permission to connect to database engine” e “Enable” em “Login”.



Outra maneira pratica de habilitar o usuário “sa” é por meio de script, exemplo:

ALTER LOGIN sa ENABLE;

GO

ALTER LOGIN sa WITH PASSWORD = 'P@ssw0rdM0del0';

GO

Então, agora resta reiniciar o SQL Server. Para não ter que entrar nos Serviços do Windows ou SQL Server Configuration Manager ou qualquer variante como arquivos .bat ou SQL Server Surface Area.

Uma dica é clicar com o botão direito na instância do SQL Server na janela Object Explorer e “Restart”.


Clique em Yes nesta próxima janelinha, para dizer que você TEM CERTEZA QUE QUER REINICIAR O SERVIÇO…



Agora é só conectar com o usuário “sa” para testar.







Espero que tenha sido útil.

0

Waitfor Delay, waitfor time SQL Server

Posted by Fabio's Blog on 14:36
Quando temos problemas de performance com algumas aplicações a maior dificuldade é fazermos acontecer o erro em nosso ambiente.
 
O comando waitfor do SQL Server é muito útil para este tipo de teste, pois utilizamos o waitfor delay ou o waitfor time na procedure e efetuamos o teste de timeout, etc.

Abaixo o comando:


-- Utilizado para esperar pelo tempo passado como parâmetro
-- No exemplo abaixo ele passa pelo waitfor depois de 5 segundos
waitfor delay '00:00:05'

-- Utilizado para esperar até que a hora seja alcançada
-- No exemplo abaixo ele passa pelo waitfor as quatorze horas e trinta e oito minutos
waitfor time '14:38'

Espero que tenha sido útil.

0

Métodos IndexOf e IndexOfAny de uma string

Posted by Fabio's Blog on 09:23
Esses métodos são muito úteis quando precisamos procurar um ou vários caracteres dentro de uma string, por exemplo, em uma string você têm que saber se existe o número 1, você usa o IndexOf para fazer esta verificação, e o retorno será a posição do primeiro caracter que o método encontrar.

Segue o exemplo do IndexOf.

string v_str = "www.fabiorente.blogspot.com";
if (v_str.IndexOf('.') > -1)
{
// Caracter '.' encontrado
}
else
{
// Caracter '.' não encontrado
}

Segue o exemplo do IndexOfAny.

string v_str = "www.fabiorente.blogspot.com";
char[] chars = { '0', '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' };
if (v_str.IndexOfAny(chars) > -1)
{
// Existe Número
}
else
{
// Não Existe Número
}

Espero que tenha sido útil.

2

Abrindo uma aplicação e passando parâmetros cm C# - Windows Forms

Posted by Fabio's Blog on 12:44
Dica para quando existe a necessidade de abrir uma aplicação pelo c# e passar os parâmetros necessários para esta aplicação.

Utilização das Classes Process e ProcessStartInfo.

        

Process p = new Process();
p.EnableRaisingEvents = false;
p.StartInfo.WorkingDirectory = @"C:\Program Files\";
p.StartInfo.CreateNoWindow = false;
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Program Files\Calc.exe", @"C:\Program Files\ww.txt");
System.Diagnostics.Process.Start(startInfo);

Espero que tenha sido útil.

0

Data Inicial e Final de uma semana a partir da data atual

Posted by Fabio's Blog on 08:37
Dica de SQL para calcular a Data Inicial e Final de uma semana a partir da data atual.

--inicial
select convert(varchar,year(convert(varchar,getdate()-(datepart(dw,getdate())-1),20))) + '-' + right('00'+convert(varchar,month(convert(varchar,getdate()-(datepart(dw,getdate())-1),20))),2) + '-' + right('00'+convert(varchar,day(convert(varchar,getdate()-(datepart(dw,getdate())-1),20))),2) + '-' + ' 00:00'
--final
select convert(varchar,year( convert(varchar,getdate()+7-atepart(dw,getdate())),20))) + '-' +right('00'+convert(varchar,month( convert(varchar,getdate()+(7-datepart(dw,getdate())),20))),2) + '-' + right('00'+convert(varchar,day( convert(varchar,getdate()+(7-datepart(dw,getdate())),20))),2) + '-' + ' 23:59'

Espero que tenha sido útil.

0

Definindo valores para uma coluna Identity

Posted by Fabio's Blog on 10:17

Frequentemente tenho que fazer carregamento de dados para fazer testes ou alguma alteração no sistema, e carregamos dados próximos os dados de produção, ai encontramos tabelas com coluna de IDENTITY e nos deparamos com o erro abaixo:


Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'TB_AGRI_CART_CLIE_STAT' when IDENTITY_INSERT is set to OFF.

Este erro ocorre por causa da coluna identity, não podemos especificar um valor para esta coluna, quem especifica é o próprio SQL, mas, para este caso podemos utilizar o comando IDENTITY_INSERT que "libera" a inclusão de dados para esta coluna. Segue abaixo:


O comando Identity_Insert

A solução é bem simples. Quando você precisar inserir alguma linha e forçar o valor da coluna Identity, utilize os comandos:

Antes de inserir, execute o comando:

SET IDENTITY_INSERT nome_da_tabela ON

 

Depois de inserido, retorne o autoidentity novamente:

SET IDENTITY_INSERT nome_da_tabela OFF

Um exemplo prático

Copie todo o conteúdo do código abaixo, no Query Analyzer e execute instrução por instrução para entender o funcionamento. Para evitar a necessidade de criar uma nova tabela em algum banco de dados, note que fiz uso de uma tabela temporária para o exemplo. 

Exemplo

-- O simbolo # antes do nome da tabela, indica que ela é uma Tabela Temporária

create table #testing
(
ID int not null IDENTITY, -- Coluna do tipo Identity
nome varchar(20) null
)

-- Insira algumas linhas apenas para teste:
-- Note que a coluna ID não são informadas, mesmo que Not Null.

-- Isso porque a diretiva IDENTITY se encarrega de preencher o valor
Insert #testing values ('Fábio')
Insert #testing values ('Luiz')

-- Veja os valores na tabela:
Select * from #testing

-- Tente inserir um valor de Identity:
Insert #testing (ID, nome) values (10, 'Moroni') -- Retorna Erro...

-- Execute o comando IDENTITY_INSERT ON:
Set IDENTITY_INSERT #testing ON

-- Agora tente inserir novamente:
Insert #testing (ID, nome) values (10, 'Moroni') -- Sem Erro...

-- Veja agora os valores na tabela (inclusive o último item):
Select * from #testing

-- Execute o comando IDENTITY_INSERT OFF:
Set IDENTITY_INSERT #testing OFF

-- Agora tente inserir novamente um valor na coluna ID:
Insert #testing (ID, nome) values (20, 'Moroni') -- Retorna Erro...

-- Vamos excluir a tabela criada
drop table #testing

Conclusão

Este recurso é muito útil em determinadas situações (normalmente quando dados precisam ser corrigidos no banco de dados), porém não deve de maneira nenhuma ser utilizado em um processo de produção. Faça uso deste recurso como uma ferramenta de desenvolvimento.


Espero que tenha sido útil.

0

Formatação de Datas em SQL Server

Posted by Fabio's Blog on 14:45
Formatação de Datas em SQL Server.

Segue abaixo:

SELECT CONVERT(VARCHAR(12),GETDATE(),101) AS '101',
CONVERT(VARCHAR(12),GETDATE(),102) AS '102',
CONVERT(VARCHAR(12),GETDATE(),103) AS '103',
CONVERT(VARCHAR(12),GETDATE(),104) AS '104',
CONVERT(VARCHAR(12),GETDATE(),105) AS '105',
CONVERT(VARCHAR(12),GETDATE(),106) AS '106',
CONVERT(VARCHAR(12),GETDATE(),107) AS '107',
CONVERT(VARCHAR(12),GETDATE(),108) AS '108',
CONVERT(VARCHAR(12),GETDATE(),109) AS '109',
CONVERT(VARCHAR(12),GETDATE(),110) AS '110',
CONVERT(VARCHAR(12),GETDATE(),111) AS '111',
CONVERT(VARCHAR(12),GETDATE(),112) AS '112',
CONVERT(VARCHAR(12),GETDATE(),113) AS '113',
CONVERT(VARCHAR(12),GETDATE(),114) AS '114',
CONVERT(VARCHAR(12),GETDATE(),120) AS '120',
CONVERT(VARCHAR(12),GETDATE(),121) AS '121'

Espero que tenha sido útil.

0

Usando javascript para percorrer Repeater

Posted by Fabio's Blog on 08:50
Precisava de uma função em javascript para percorrer um repeater, neste repeater têm caixas de texto, precisava verificar todas e mostrar uma mensagem ao usuário, segue abaixo a função, chamei-a no botão da seguinte maneira.

btn.OnClientClick = "return GetAllTextBox();";

E a função:

function GetAllCheckBox()
{
var count = 0;
var inputs = document.getElementsByTagName('input');
for(var i = 0; i < inputs.length; i++)
{
if(inputs[i].type == 'text' && inputs[i].name.indexOf('tbx_id') != -1)
{
if(inputs[i].checked == true)
{
count++;
break;
}
}
}

if(count == 0)
return false;
return true;
}


Desta maneira se não retornar true ao nosso botão, não é chamado o código do code-behind, e não efetuará o postback.

Espero que tenha sido útil.

0

ComboBox - C#

Posted by Fabio's Blog on 20:06
Controles que utilizaremos: DropDownList, RequiredFieldValidator, Button, Label e ValidationSummary.

Estarei neste post mostrando como criar um combobox em C#, para o meu projeto darei o nome de ComboBox e a página ASPX de Default.aspx.
Vamos utilizar as principais propriedades
destes controles para fazer as validações necessárias.

Primeiro vamos criar o combo na nossa página ASPX, utilizaremos muito código HTML, por isso você têm que ter um bom nível de conhecimento nessa linguagem.

Segue abaixo o código da página ASPX.



<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ComboBox._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>ComboBox</title>

</head>

<body>
<form id="form1" runat="server">
<asp: ScriptManager ID="ScriptManager1" runat="server" />
<div>

<asp:DropDownList id="cbo_mes" runat="server" Width="150"></asp:DropDownList>

<asp:RequiredFieldValidator id="vld_rqd_cbo_mes" runat="server" Display="Dynamic" ControlToValidate="cbo_mes" SetFocusOnError="true">

<IMG id="img_cbo_mes" src="../_imagens/validator.gif" style="cursor: help;" runat="server" />

</asp:RequiredFieldValidator>

<asp:Button ID="btn_sele" runat="server" Text="Selecionar" CausesValidation="true" />
<asp:Label ID="lbl_mes" runat="server"></asp:Label>

</div>

<asp:ValidationSummary ID="vld_sum" runat="server" EnableViewState="False" HeaderText="Atenção:" ShowMessageBox="True" ShowSummary="False" />

</form>

</body>

</html>


Vamos as explicações das principais propriedades:

    As propriedade id e runat serão utilizadas em todos os controles de nossa aplicação
        Propriedade id - Especifica o nome do controle.
        Propriedade runat - Especifica que este controle deve ser tratado do lado servidor.

    Controle asp
:DropDownList - Este é o controle combo box, com ele podemos oferecer ao usuário uma lista de dados, para o usuário fazer o selecionamento de apenas um.   
Propriedade Width - Especifica o tamanho do controle no navegador.

    Controle asp:RequiredFieldValidator - Controle de validação, como ele podemos validar um controle sem ser necessário a inclusão de uma função javascript.
Propriedade Display - Especifica o modo como será tratado o erro.Statico, Dinâmico ou nenhum.
Propriedade ControlToValidate - Especifica o controle que será validado.
Propriedade SetFocusOnError - Propriedade se setada true, depois do erro é setado o foco no controle que está sendo validado.

    Controle IMG - Este controle HTML está dentro da tag do controle asp:RequiredFieldValidator, toda vez que ocorre o erro da validação é mostrado esta imagem.
Propriedade src - Especifica a imagem que será mostrada.
Propriedade style - Estilo que mostra a imagem de interrogação quando passar o mouse.

    Controle asp:Button - Controle que fará a ação para ser processado a validação do nosso combo.
Propriedade Text - Especifica o texto que aparecerá no botão
Propriedade CausesValidation - Especifica se o botão fará a validação dos controle na tela. Se estiver com o valor false não será feito nenhuma validação na tela.

    Controle asp:Label - Controle que será mostrado o valor selecionado no combo quando precionarmos o botão.


    Controle asp:ValidationSummary - Controle que faz a validação e mostra no erro a janela em javascript.
Propriedade EnableViewState - Habilita o ViewState do controle na página ou não.
Propriedade HeaderText - Especifica o título da janela para os campos requeridos.
Propriedade ShowMessageBox - Especifica se o controle mostrará a janela ao ocorrer o erro ou não.
Propriedade ShowSummary - Especifica se o erro será mostrado como sumário ao usuário.

    Aqui é o final da criação da nossa página aspx, o próximo passo será feito em nosso code behind.

    Abaixo como deverá ficar o código.

    

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

namespace ComboBox

{

    public partial class _Default : System.Web.UI.Page

    {

 

        #region Métodos da página

 

        /// <summary>

        /// Page load da página

        /// </summary>

        protected void Page_Load(object sender, EventArgs e)

        {

            if (!IsPostBack)

            {

                this.CarregarCombo();

            }

 

            this.btn_sele.Click += new EventHandler(btn_sele_Click);

 

        }

 

        #endregion Métodos da página

 

        #region Métodos dos controles

 

        /// <summary>

        /// Método do clique do botão

        /// </summary>

        void btn_sele_Click(object sender, EventArgs e)

        {

            this.lbl_mes.Text = this.cbo_mes.SelectedItem.Text;

        }

 

        #endregion Métodos dos controles

 

        #region Métodos

 

        /// <summary>

        /// Função para carregar o combo

        /// </summary>

        private void CarregarCombo()

        {

            // Limpa todos os itens do combo

            this.cbo_mes.Items.Clear();

            // Insere os dados no combo box

            this.cbo_mes.Items.Add(new ListItem("-- Selecione --", ""));

            this.cbo_mes.Items.Add(new ListItem("Janeiro", "1"));

            this.cbo_mes.Items.Add(new ListItem("Fevereiro", "2"));

            this.cbo_mes.Items.Add(new ListItem("Março", "3"));

            this.cbo_mes.Items.Add(new ListItem("Abril", "4"));

            this.cbo_mes.Items.Add(new ListItem("Maio", "5"));

            this.cbo_mes.Items.Add(new ListItem("Junho", "6"));

            this.cbo_mes.Items.Add(new ListItem("Julho", "7"));

            this.cbo_mes.Items.Add(new ListItem("Agosto", "8"));

            this.cbo_mes.Items.Add(new ListItem("Setembro", "9"));

            this.cbo_mes.Items.Add(new ListItem("Outubro", "10"));

            this.cbo_mes.Items.Add(new ListItem("Novembro", "11"));

            this.cbo_mes.Items.Add(new ListItem("Dezembro", "12"));

            this.cbo_mes.SelectedIndex = 0;

        }

 

        #endregion Métodos

 

    }

}



    Abaixo uma imagem de como ficará a tela ao emitir o erro da validação.



    Abaixo um exemplo de como ficará ao passar a validação e carregar o item selecionado no nosso label.


    O código fonte deste exemplo você baixa aqui (Você deve estar logado ao Google).


Espero que tenha sido útil.


0

SQL Server - Efetua a pesquisa dentro das procedures

Posted by Fabio's Blog on 08:19
Select que percorre todas as procs e procurando no text da proc o que você passar como parâmetro.

select
       t2.*
from
        syscomments   t1
        inner join
            sysobjects  t2
        on
            t2.
id    = t1.id
where
    t1.text          like '%String a ser procurada nas procs%'


Espero que seja útil para alguém.

0

Função SQL - FU_FRMT_VALR - Formata valores decimais

Posted by Fabio's Blog on 09:45

Função SQL para formatar valores decimais e não ser preciso formatar na aplicação.



CREATE FUNCTION dbo.FU_FRMT_VALR(@valor decimal(20,2))

returns varchar(30)

as

begin

declare

@valor_char            varchar(30)

,@valor_decm            varchar(30)

,@valor_work            varchar(30)

,@valor_retn            varchar(30)


      select      @valor_char = replace(convert(varchar,@valor),'.',',')

      select      @valor_decm = substring(@valor_char,charindex(',',@valor_char),3)

      select      @valor_char = substring(@valor_char,1,charindex(',',@valor_char)-1)

 

      select @valor_work = ''

      select @valor_retn = ''

      while len(@valor_char) > 3

      begin

            select @valor_work = '.' + right(@valor_char,3)

            select @valor_char = substring(@valor_char,1,len(@valor_char)-3)

            select @valor_retn = @valor_work + @valor_retn

      end

 

      select @valor_retn = @valor_char + @valor_retn + @valor_decm

       return @valor_retn

end

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO


Espero que tenha sido útil.

0

Exemplo de DataReader

Posted by Fabio's Blog on 21:16
Abaixo um exemplo do uso do DataReader, para carregarmos os campos com os valores na nossa base de dados estou postando este exemplo. Os cometários estão explicando linha a linha.

Exemplo de DataReader

//Conexão com Banco de dados

OleDbConnection conn = new OleDbConnection(stringdeconexao);

conn.Open();


//Comando de SELECT

OleDbCommand cmd = new OleDbCommand("Select * from tb_fornecedor", conn);


//Execução

OleDbDataReader dr = cmd.ExecuteReader();

 

// Aqui é o loop do DataReader

while (dr.Read())

{

    // dr[" é o DataReader com o nome do campo no select

    mnuFornecedor.Items[0].ChildItems.Add(new MenuItem(dr["nome"].ToString(), dr["valor"].ToString(), null, dr["navigateurl"].ToString()));

}


Espero que seja útil para alguém.

0

Função SQL - FN_FRMT_INTE - Formata valores inteiros

Posted by Fabio's Blog on 15:05
Função SQL utilizada para formatar valores inteiros, muito utilizado para mostrar em um campo ou em um grid para o usuário trazendo no SELECT o valor já formatado, sem ser preciso fazer isso na aplicação.

CREATE FUNCTION dbo.FN_FRMT_INTE(@valor decimal(20,0))
returns varchar(30)
as
begin
declare
@valor_char            varchar(30)
,@valor_decm            varchar(30)
,@valor_work            varchar(30)
,@valor_retn            varchar(30)


     select      @valor_char = replace(convert(varchar,@valor),'.',',')

     select @valor_work = ''
     select @valor_retn = ''
     while len(@valor_char) > 3
     begin
           select @valor_work = '.' + right(@valor_char,3)
           select @valor_char = substring(@valor_char,1,len(@valor_char)-3)
           select @valor_retn = @valor_work + @valor_retn
     end -- while

     select @valor_retn = @valor_char + @valor_retn

     return @valor_retn
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Espero mesmo que seja útil para alguém.

0

Error Divide by Zero

Posted by Fabio's Blog on 11:11
Erro SQL - Error Divide by Zero

Algumas vezes nos deparamos com alguns erros "chatos" no nosso dia-a-dia, esse erro ocorre quando em nossos SELECTs ou em nossos cursores tentamos dividir um número por 0.

Podemos utilizar um case para cada divisão e assim quando vier o valor 0 alteramos para 1, mas isso consome nossa produtividade, um dos jeitos de não nos deparamos mais com esse erro é como mostrarei abaixo:

Coloque esse código no inicio da procedure

SET ANSI_WARNINGS OFF
SET ARITHABORT OFF
SET ARITHIGNORE ON

E voltar a configuração do SQL no final da procedure

SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET ARITHIGNORE OFF

Esses comandos farão o SQL ignorar tal fato.


Espero que seja útil para alguém.

0

Função SQL - fn_Split

Posted by Fabio's Blog on 00:11

Função muito utilizada para você criar uma tabela de uma string e inserir dados em massa na base de dados consumindo assim mais o banco do que a aplicação.


Exemplo:

    Tenho uma string "fabio|rente|blog|" e mando para o banco para inserir em uma tabela esses valores.

    Esta função criará uma tabela como abaixo:


        Valor    |    Texto

        -----------------

        1         |    fabio

        2         |    rente

        3         |    blog


    Próximo passo é só fazer a inclusão na tabela.


    Segue abaixo a função para o SQL Server.



DROP  FUNCTION fn_Splitco do que


SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS OFF

GO

 

CREATE  FUNCTION fn_Split(@text varchar(8000), @delimiter varchar(20) = ' ')

RETURNS @Strings TABLE

(   

  position int IDENTITY PRIMARY KEY,

  value varchar(8000)  

)

AS

BEGIN

 

DECLARE @index int

SET @index = -1

 

WHILE (LEN(@text) > 0)

  BEGIN 

    SET @index = CHARINDEX(@delimiter , @text) 

    IF (@index = 0) AND (LEN(@text) > 0) 

      BEGIN  

        INSERT INTO @Strings VALUES (@text)

          BREAK 

      END 

    IF (@index > 1) 

      BEGIN  

        INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))  

        SET @text = RIGHT(@text, (LEN(@text) - @index)) 

      END 

    ELSE

      SET @text = RIGHT(@text, (LEN(@text) - @index))

    END

  RETURN

END

 

GO

 

SET QUOTED_IDENTIFIER OFF

GO

 

SET ANSI_NULLS ON

GO



Espero que tenham gostado.

Copyright © 2009 Fabio's Blog All rights reserved. Theme by Laptop Geek. | Bloggerized by FalconHive. Distribuído por Templates