Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ilano

Gerando um contador acumulativo

Recommended Posts

Olá pessoal,

 

Tenho o seguinte problema:

 

Possuo as seguintes tabelas com seus respectivos campos:

 

CURSOS

 

  • Código do Curso (Int)
  • Nome (Varchar(100))
  • Carga Horária (Int)
  • Ementa (Text)
  • Área Profissional (Int)

 

CURSO POR UNIDADE

 

  • Código do Curso por Unidade (Int)
  • Código do Curso (Int)
  • Código da Unidade (Int)
  • Ativo (Char(1))
  • Item (Int)

TURMA

 

  • Código da Turma (Int)
  • Data Inicial (Date)
  • Data Final (Date)
  • Código do Curso por Unidade (Int)
  • .....

 

Muito bem, o q estou precisando fazer é, cada vez q eu criar uma turma seja incrementado no campo Item da tabela Curso por Unidade mais um.

 

Qual o objetivo? Tenho o cadastro de cursos, após realizar este cadastro, o código deste curso será inserido automaticamente na tabela Curso por Unidade 40 vezes, isto pq eu tenho 40 municípios q ofertarão este mesmo curso. Até aí tudo bem, pq já tenho o cadastro de unidades e é só usar um loop em minha aplicação para fazer isso. O problema é q ao criar uma turma irei vincular o Código do Curso por Unidade à Turma só q eu preciso gerar o número de vezes q este curso foi ofertado para aquela unidade, daí o campo Item (em destaque) na tabela Cursos por Unidade, então, pergunto a vcs, para isso devo usar triggers ou isso seria inviável? E se for o correto, como posso criá-la, pois nunca trabalhei com triggers.

 

Grato,

 

Ilano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera,

 

Pensando mais um pouco, acredito q essa solução não seja a ideal para o q eu pretendo fazer.

 

A idéia é a seguinte:

 

Quero gerar um código para identificar essa turma, para isso imaginei a seguinte hipótese:

 

O código da Unidade + Código do Curso + Item (Nº de vezes q o curso foi ofertado para a unidade)

 

01.002.000025

01.002.000026

....

 

Este item na verdade seria a quantidade de vezes q um determinado curso seria ofertado para uma determinada Unidade, então, ao criar uma nova turma seria incrementado um valor para o campo item e depois seria jogado para a tabela de Turmas para q eu possa gerar um código para cada turma. Bem imaginei assim:

 

1º) Abro uma turma;

2º) Consulto na tabela CursoUnidade se a Unidade e o Curso finculados à turma já foram cadastrados e incremento +1 no campo Item e salvo a tabela CursoUnidade;

3º) Jogo para a tabela da turma aquele valor incrementado e salvo a tabela da turma.

 

O problema, está quando se trabalha com vários usuários, pois como já disse anteriormente, são vários municípios (áreas de abrangência) para cada Unidade.

 

xxiii.... Será q eu expliquei direitinho??? :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

O q estou precisando fazer é isso:

 

UNIDADES

01 - Unidade de Fortaleza (Sede)

02 - Unidade de Maranguape

...

 

CURSOS

01 - Farmácia Viva

02 - Produtor de Hortaliças

03 - Eletricista Predial

...

 

O código da turma deverá ser gerado pelo Código da Unidade + Código do Curso + Item (Nº de vezes q o curso foi ofertado para a unidade)

 

 

01.001.000001

01.002.000001

01.002.000002

01.003.000001

01.003.000002

01.002.000003

02.001.000001

01.003.000003

01.001.000002

02.001.000002

02.001.000003

02.003.000001

...

 

Vejam q:

 

Na Unidade 01 - Unidade de Fortaleza (Sede) foram ofertados os seguintes cursos:

 

- 01 - Farmácia Viva ----------------------------- Ofertado 2 vezes

- 02 - Produtor de Hortaliças ----------------- Ofertado 3 vezes

- 03 - Eletricista Predial ------------------------ Ofertado 3 vezes

 

Na Unidade 02 - Unidade de Maranguape foram ofertados os seguintes cursos:

 

- 01 - Farmácia Viva ----------------------------- Ofertado 3 vezes

- 02 - Produtor de Hortaliças ----------------- Ofertado 1 vez

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola ilano, beleza?!

 

vamos lá:

a sua duvida especifica:

O código da turma deverá ser gerado pelo Código da Unidade + Código do Curso + Item (Nº de vezes q o curso foi ofertado para a unidade)

você pode concatenar estes dados, desde que sejam do tipo varchar, nvarchar. se nao forem converta eles no select:

 

exemplo:

select tabelaA.campoA+tabelaB.campoB+(convert(varchar(10),tabelaC.campoC)) from tabelaA inner join tabelaB on tabelaA.campochave = tabelaB.campochave inner join tabelaC on tabelaA.campochave = tabelaC.campochave

Pelo que pude perceber na estrutura, você jah tem os dados ;)

 

Espero que lhe ajude.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá jus2ka,

 

Desde já agradeço sua atenção.

 

A concatenação é certa, porém, existe um problema, o fato do campo Item ser acumulativo. Dessa forma todos os cadastros das turmas q forem daquela Unidade e daquele Curso adotarão o mesmo código concorda? Só q eu quero q eles adotem no final daquele número, uma codificação diferente. Vou tentar melhorar minha dúvida:

 

Eu quero q para cada lançamento de Turma eu tenha um código q me diga q aquela turma Pertença à Unidade A do Curso A e que ela foi a Enézima turma criada.

 

01.001.000001 -> Primeira Turma da Unidade de Fortaleza do Curso Farmácia Viva

01.002.000001 -> Primeira Turma da Unidade de Fortaleza do Curso Produtor de Hortaliças

01.002.000002 -> Segunda Turma da Unidade de Fortaleza do Curso Produtor de Hortaliças

...

02.001.000003 -> Terceira Turma da Unidade de Maranguape do Curso Farmácia Viva

 

Pensei em concatenar a Unidade e Curso com um COUNT, porém, receio q isso gere problemas, pois como você sabe o COUNT é uma consulta gerada antes de salvar e como o sistema será trabalhado em modo MultiUsuário temo q tb gere dados inconsistentes, isto é, após salvar seja gerado um número igual ao do usuário B, C, ...

 

Isso realmente está me tirando o sono!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara usa o substring :D

 

ou faz assim:

 

string valor = "01.001.000001";

string[] lista = valor.Split( '.' );

 

dai você vai ter uma lista com 3 posisões, onde:

lista[0] vai ser "01"

lista[1] vai ser "001"

lista[2] vai ser "000001"

 

Daí é soh fazer comparaçoes na lista[0] e lista[1] e usar o max na lista[2], assim você vai saber de qual grupo é e o maior valor da lista[2], dai é só usar MAX(lista[2])+1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.