Mostrando postagens com marcador update. Mostrar todas as postagens
Mostrando postagens com marcador update. Mostrar todas as postagens

sábado, março 30, 2013

Trabalhando com uma tabela de Contadores no MySQL

HI,

Essa dica é fresquinha, acabei de implementar agora.

Estou fazendo um sistema de suporte usando o banco MySQL e para criar o código do protocolo minha intenção é que em cada ano o contador comece do 1.

Exemplo: 201300001, 201300002,  201300...
Quando for 2014 que comece tudo de novo, 201400001, 201400002, ...

Crie uma tabela com dois campo, Ano e Valor.

Incrementar o valor com +1 é tranquilo, mas como garantir que dois usuários não peguem o mesmo valor?

Pensei em bloquear o registro para dar um update e pegar o valor atual. Pesquisando como fazer isso, achei dessa maneira que pensei em fazer e uma muito melhor.

Achei a dica aqui

MySQL How To Select and Update in Single Statement - Increment Counter avoiding Race Condition
http://www.sqlines.com/mysql/how-to/select-update-single-statement-race-condition

Usei essa solução


UPDATE counters
SET value = LAST_INSERT_ID(value) + 1
WHERE id = 1;

SELECT LAST_INSERT_ID();


Mas eu não quis usar pegando o valor atual, e sim ele +1

Ficou assim meu update

DECLARE novo_valor INT;


UPDATE seq_protoco
SET valor = LAST_INSERT_ID(valor + 1)
WHERE ano = 2013;

SELECT LAST_INSERT_ID() INTO novo_valor;




Fiquem na Paz!!!

terça-feira, junho 26, 2012

Update a partir de uma select no Oracle

HI,

Passei a vida toda apenas utilizando o select/insert para popular uma tabela a partir do resultado de uma consulta. Mas ontem precisei além de inserir, também atualizar. Não queria executar a query duas vezes para fazer isso, um select/insert para inserir e um loop em outra query para atualizar.

Sabia que no MySql tem esse recurso de inserir se não existir, e se existir, atualizar. Então fui perguntar ao Google como fazer isso no Oracle. Descobri que existe o comando MERGE, que serviria para o meu propósito.

Comando MERGE
http://psoug.org/reference/merge.html


Agora vou relatar os problema que enfrentei para conseguir executá-lo.

Eu modifiquei a procedure e passou a ocorrer esse erro: ORA-00918: column ambiguously.

Passei um bom tempo para achar esse erro, já que analisando a query não via nenhum problema aparente já que todos os campos estavam precedidos por aliases. Ex:. a.id = b.id.

Pesquisando no google vi que o problema era a repetição de um campo na select. É que antes no select/insert, existiam dois campos que recebiam o mesmo valor: Insert into teste(id, viagens1, viagens2) select id, viagens, viagens from teste2.

Foi aqui que achei a solução para o problema ORA-00918: column ambiguously no MERGE
https://forums.oracle.com/forums/thread.jspa?messageID=10327846


Outro problema que enfrentei foi esse: ORA-30926: unable to get a stable set of rows in the source tables.

No teste para identificar se o registro existe ou não, coloquei apenas 1 campo e minha chave primaria possui 3 campos.

Achei a solução aqui
http://stackoverflow.com/questions/2337271/ora-30926-unable-to-get-a-stable-set-of-rows-in-the-source-tables

Um outro erro que acontece é se colocar um campo da chave primaria no update para ser atualizado.



Fiquem na Paz!!!



segunda-feira, fevereiro 27, 2012

Acessando um componente da Master Page no Asp.Net

HI,

Hoje precisei colocar um recurso em um site que fiz. Atualizar um item no menu que dá acesso a página de mensagens. Tinha que colocar ao lado do texto entre parenteses a quantidade de mensagens não lida.

A lógica que usei foi essa:


  1. Obter a quantidade mensagens não lidas ao fazer o login e colocar em uma variável de sessão.
  2. Colocar na Page_Load do Master Page um código para atualizar o item do menu: lblMenuMensagem.Text = "Mensagens (" + Session["QT_MSG"].ToString() + ")";
  3. Ao acessar uma mensagem, atualizar a variável de sessão e modificar o valor do menu: 
   Label mLabel;
            mLabel = (Label)Page.Master.FindControl("lblMenuMensagem");
            if (mLabel != null)
            {
Session[" QT_MSG "] = ObterQtMsgNaoLida();
                mLabel.Text = "Mensagens (" + Session["QT_MSG"].ToString() + ")";
                
            }

Esse código fica na Page_Load da página LerMensagem.aspx

Páginas que achei no google

Update Label in Master page from Content page. Help please

Passing Information Between Content and Master Pages


Fiquem na Paz!!!

domingo, maio 22, 2011

Definindo a data inicial do DatePickerDialog

HI,

Tinha ido dormir umas quatro da manhã tentando definir a data do Date Picker Dialog com a data que tá gravada na tabela quando se está editando o registro. Achei um exemplo, mas não consegui fazer, devia ser o sono, pois, analisando o mesmo exemplo agora de manhã depois de ter acordado ( a hora? meio dia, hehehe ), consegui botar para funcionar.

Agora quando se está editando, é exibida a data que está gravada.

Fiz com base nesse exemplo


Código que estou utilizando

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
if (definirdata){
String _date[] = mPickDateExpense.getText().toString().split("/");
mYear = Integer.parseInt(_date[2]);
mMonth = Integer.parseInt(_date[1]) - 1; // mes vai de 0 a 11
mDay = Integer.parseInt(_date[0]);
definirdata = false;
}
return new DatePickerDialog(this,
mDateSetListener,
mYear, mMonth, mDay);
}
return null;
}


Fiquem na Paz!!!