Fórum Extração de Sequencial #12617

05/12/2009

0

Boa Tarde, Estou com dificuldades em extrair o maior numero de um campo em um TClientDataset. O Caso é o seguinte: Em um cadastro de controle de visitas tenho que gerar um seqüencial por vendedor para montar uma chave primaria tipo Integer exemplo: ·         Vendedor 01 o   Primeira Visita: 01001 o   Segunda Visita: 01002 o   Terceira Visita:  01003 ·         Vendedor 02 o   Primeira Visita: 02001 o   Segunda Visita: 02002 o   Terceira Visita:  02003   O que não estou conseguindo é extrair este seqüencial já utilizei o commadtext com o valor
select MAX (CODVIS) from K07CADVIS   este comando funciona no banco mas não funcionou quando passei pelo commandtext, na verdade estou necessitando deste sequencial antes de relizar o post/applyupdates.   O processo seria consultar o ClientDataset extrair o maior sequencial incrementá-lo e inserir no campo Chave Primaria sem perder os dados digitados em tela.   P.s. Este é o meu primeiro chamado, não sei se estou sendo claro suficiente se necessitar de mais esclarecimentos, é só falar   No aguardo, Jorge Farias
Jorge Silva

Jorge Silva

Responder

Posts

07/12/2009

Wesley Yamazack

Olá amigo , bom dia !

  Seja bem vindo ao sistema de consultoria.

  Sua dúvida dependendo do banco de dados pode ser resolvida de maneira bem simples, me diga qual é seu banco de dados ? Oracle? Firebird ? MySQl ? Qual ? Pois com ele podemos gerar uma Sequence, caso ele possua, porém se for um bd Tipo o MySQL não tem sequence dai vamos ter que implementar uma rotina na tua aplicação.

Um abraço

Wesley Y
Responder

Gostei + 0

07/12/2009

Jorge Silva

Bom dia Wesley, Para esta solução não podemos depender do banco devido à finidade da aplicação, pois todo este processo tem que tramitar na camada do TClientDataset não podendo depender nem de consultas ao TSqlDataset, nem Triggers, Nem Generations que vai estar em outra aplicação, respondendo sua pergunta todo este processo tem que ser realizado em memória. Fico no Aguardo, Jorge
Responder

Gostei + 0

08/12/2009

Wesley Yamazack

Olá amigo,
   Gostaria de saber como este ClientDataSet é alimentado, você em algum momento usa um SQLQuery ou DataSetProvider certo ?
   O problema de você usar o MAX, é que se você pegar 2 pessoas fazendo um cadastro ao mesmo tempo, e no momento que uma clica no Novo, e a outra também, eles irão pegar o mesmo ID(Código), e na hora de gravar, o primeiro irá gravar, porém o segundo irá dar erro de P.K. , entendeu esta situação ? Sem contar que varre o ClientDataSet em modo de Insert.
 

Fico no aguardo
Um abraço

Wesley Y
Responder

Gostei + 0

09/12/2009

Jorge Silva

Bom dia Wesley, Imagine que o ClientDataSet ligado somente a um arquivo pelo FileName Por isso que esta consulta tem que ser feita em memória, no momento de fazer o applyupdates, ele tem que pegar ultimo código do vendedor do e incrementar para montar a chave primaria, como cada um só vai ter acesso ao seu código o seqüencial não vai se repetir naquele esquema de chave que informei no primeiro tramite.se não estiver sendo claro me informe.
Responder

Gostei + 0

09/12/2009

Wesley Yamazack

Olá amigo, veja se seria esta ideia que eu montei no exemplo ( http://www.rwsolution.com.br/DevMedia/AutoSequence.rar ), esta seria a sua ideia ?

Um abraço

Wesley Y
Responder

Gostei + 0

11/12/2009

Jorge Silva

Bom Dia Wesley, Já tinha tentado isso, mas o problema é que vão ter outras pessoas digitando ao mesmo tempo eu necessito deste código só no evento de apply (no instante do salvamento)pois outro digitadores podem estar lançando fichas de visitas daquele vendedor. Para o usuário o código só será gerado depois do salvamento, pois o mesmo pode iniciar e não salvar o registro, e dar uma confusão danada, concorda?, Realmente o processo de digitação é meio confuso pois parte vai ser inserido manualmente e parte vai ser importada, por isso as chaves não podem conflitar. A construção da aplicação é assim: Aplicação Servidora – Fica no Servidor (Ligado ao Banco). Aplicação Cliente – Fica nas Estações(Ligado a parte Servidora – Via DataSnap) – Onde serão importados e digitados os dados. Aplicação Remota – Instalada nos Notebooks dos vendedores(Ligados a arquivos .TXT ou .XML fazendo o papel do banco) – esta aplicação similar a Aplicação Cliente que vai gerar arquivos .txt  para serem importados pela Aplicação Cliente. Entendeu o nó ? kkkkkGrande abraço
Responder

Gostei + 0

14/12/2009

Wesley Yamazack

Olá amigo  Bom dia !!!!

   O nó é complicado mesmo,mas acho que temos uma solução... rs !!!

   Bom se voê vai ter um XML e depois importar para o bd, minha duvida é se o XML ao ser importado será apagado, sera ?

     Pois acho que você pode trabalhar com dois campos e depois concatenar, Codigo(AutoIncremento - xx) + CodigoVendedor (YY), então você teria dois campos, e na hora que você fosse importar no ID, você junta os dois xxYY, e este seria teu ID, para cada vendendor, sacou ?

  Fui claro ?  Veja se esta ideia resolveu teu problema meu amigo, estamos aqui para qualquer dúvida.

Um abraço

Wesley Y

Responder

Gostei + 0

14/12/2009

Jorge Silva

Wesley,

O xml não vai ser excluido, na verdade o ideal seria que ao conectar o notebook na rede um comando sincroniza-se as informações sem a necessidade de importação de .TXT.

Concatenar o sequencial com o codigo do vendedor é a ideia, mas o sequencial não pode ser unico para todos os vendores tem que incrementar sómente o ultimo registro daquele vendedor.
Responder

Gostei + 0

15/12/2009

Wesley Yamazack

Olá amigo,
  Então não temos mais problema, pois você cria um campo no XML, do tipo AutoIncremento, e o código do seu vendedor, já que não vai ser apagado você não terá repetição. Exemplo


Note1 :
  Vendedor 1
  Registro 1
  Registro 2
  Registro 3
  Acontece uma importação
  Registro 4
  Registro 5
Note2 :
  Vendedor 2
  Registro 1
  Registro 2
  Acontece uma importação
  Registro 3
  Registro 4
  Registro 5
Note3 :
  Vendedor 3
  Registro 1
  Acontece uma importação Vendedor + Registro = 31
  Registro 2
  Registro 3
  Registro 4
  Registro 5
  Acontece uma importação
Vendedor + Registro = 32
Vendedor + Registro = 33
Vendedor + Registro = 34
Vendedor + Registro = 35

  Entendeu meu ponto de vista ?

Um abraço

Wesley Y
Responder

Gostei + 0

15/12/2009

Jorge Silva

Concordo Wesley,

Agora para que isso funcione o código do vendedor tem que ficar disponivel enquanto o aplicativo estiver aberto, isso seria em uma variavel global ? para que ele coloque o usuario e senha no inicio da aplicação e não coloque mais.
Responder

Gostei + 0

16/12/2009

Wesley Yamazack

Olá amigo, desculpe a demora !
   Você é o cara ! Matou a charada,rs. Você terá um usuário e senha na tela de login, e no FormPrincipal, passe o codigo dele para uma variável, e a qualquer momento que você queira sabre qual vendedor esta logado, você vai e pega do FormPrincipal.Variavel, Sacou ?

  Um abraço

Wesley Y
Responder

Gostei + 0

18/12/2009

Wesley Yamazack

OLá amigo, podemos fechar o chamado ficou mais alguma duvida ?

Abraço

Wesley Y
Responder

Gostei + 0

21/12/2009

Jorge Silva

Desculpe a demora Wesley,

Pode fechar o chamado sim, daqui pra frente tá mais tranquilo.

Muito Obrigado pela atenção e como dizem por aqui: "Qual quer coisa aperreio vocês denovo".

Grande Abraço

Jorge
Responder

Gostei + 0

21/12/2009

Jorge Silva

Desculpa a demora Wesley,

Pode fechar sim, daqui pra frente tá mais tranquilo e como dizem por aqui:"Qualquer coisa aperreio vocês denovo".

Obrigado pela atenção,

Grande abraço.

Jorge
Responder

Gostei + 0

21/12/2009

Wesley Yamazack

Olá amigo, agora tu falou que nem o pessoal da minha terra :"Qualquer coisa [aperreio] vocês denovo".

   Amigo estamos aqui para lhe ajudar em tudo que precisar. Se não abrir nenhum outro chamado até o final do ano, gostaria de lhe desejar um feliz natal e um ano novo cheio de saúde e paz, para ti meu caro.

Um abraço


Wesley Y
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar