Ir para conteúdo

Arquivado

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

FlavioTorres

criação simultanea de registros em tbl Paradox

Recommended Posts

Criei um programa utilizado no gerenciamento da produção.Quando um novo produto é produzido o usuario do posto de trabalho clica em um botão que da baixa no estoque e gera um numero serial para o mesmo.A criação deste serial é feita da seguinte forma: ano corrente + mês corrente + incremento em relação ao último numero criado.Quando o ano ou o mês mudam o incremento é zerado.O problema acontece quando dois operadores criam o produto no sistema ao mesmo tempo.Os dois leem o último registro da tabela ao mesmo tempo e criam dois novos registros com o mesmo numero de serie (o número de serie deve ser único).Segue abaixo descrição dos campos e codigo fonte.Não sei como evitar que dois seriais iguais sejam criados. Campos da Tabela:object TblSerialIncr: TAutoIncField FieldName = 'Incr'endobject TblSerialSAno: TStringField FieldName = 'SAno' Size = 2endobject TblSerialSMes: TStringField FieldName = 'SMes' Size = 2endobject TblSerialContador: TIntegerField FieldName = 'Contador'endobject TblSerialSCodpro: TStringField FieldName = 'SCodpro' Size = 15endobject TblSerialSerial: TStringField FieldName = 'Serial' Size = 15endCodigo fonte em C++DataModule1->TblSerial->Open();DataModule1->TblSerial->Last();SMes = DataModule1->TblSerial->FieldByName ("SMes")->AsString;Contador = DataModule1->TblSerial->FieldByName ("Contador")->AsInteger;data = Date();// No fim do ano - muda o ano, mas a mudança de mes por si só reseta o contador.if (SMes == FormatDateTime("mm", data)) Contador++;else Contador =1;SContador = FormatFloat ("000", Contador);Serial = FormatDateTime("yy", data)+ FormatDateTime("mm", data) + SContador;DataModule1->TblSerial->Append();DataModule1->TblSerial->FieldByName ("SAno")->AsString = FormatDateTime("yy", data);DataModule1->TblSerial->FieldByName ("SMes")->AsString = FormatDateTime("mm", data);DataModule1->TblSerial->FieldByName ("Contador")->AsString = Contador;DataModule1->TblSerial->FieldByName ("Serial")->AsString = Serial;DataModule1->TblSerial->FieldByName ("SCodpro")->AsString = Codpro;DataModule1->TblSerial->Post();return (StrToInt (Serial));Tks FGT

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.