RMVC 0 Denunciar post Postado Novembro 16, 2009 Boas, Estou a criar um ecrã que permite ao utilizador inserir vários dados. Mas quero que eles possam validar vários itens (gravar no dataSource) antes de gravar na tabela. Para isso criei esta função: Function TFSubTipoAutos.CalculaNumeroTipo(ValueTipo: integer):integer; var cal: TMSQuery; p: string; begin result:=0; cal := TMSQuery.Create(nil); cal.Connection := dGrvisa.dbGrvisa; cal.SQL.Clear; cal.SQL.Add('Select max(SubTipo) as Maximo'); cal.SQL.Add('From t055_095 (nolock)'); cal.SQL.Add(' where tipo =&ValueTipo'); cal.MacroByName('ValueTipo').AsInteger := ValueTipo; cal.Open; if not cal.IsEmpty then result := cal.fieldbyName('Maximo').AsInteger; inc(result); cal.Close; cal.Free; cSubTipo.Enabled := False; end; Que chamo posteriormente no procedure procedure TFSubTipoAutos.cTipoAutosExit(Sender: TObject); var mDesignacaoTipo: string; begin if trim(cTipoAutos.Text)= EmptyStr then exit; mDesignacaoTipo := ProcuraTipoAutos(StrtoInt(cTipoAutos.text)); if mDesignacaoTipo <> EmptyStr then dTipoAutos.Text := mDesignacaoTipo else begin MensagemErro(Self,rodape,'Tipo de Autos inválido',0,12,'i'); cTipoAutos.Text := EmptyStr; dTipoAutos.Text := EmptyStr; exit; end; cSubTipo.Text:=IntToStr(CalculaNumeroTipo(StrToInt(cTipoAutos.text))); dSubTipo.setfocus; end; O meu problema é como faço que seja incrementado um valor sempre que se valida sem que seja necessário gravar.De resto está tudo a funcionar ok. Exemplo: artigo 1 tipo= 4 subtipo=1 designação: xxx validar artigo 2 tipo= 4 ( escolho o mesmo tipo que o anterior) subtipo=2 ( este valor devia aparecer automaticamente) designação: xxx validar gravar ( gravou os dois artigos) Agradeço toda ajuda e esclarecimentos que possam disponibilizar. Cumps. Compartilhar este post Link para o post Compartilhar em outros sites
RMVC 0 Denunciar post Postado Novembro 16, 2009 Para tentar resolver a minha questão, criei a seguinte função Function TFSubTipoAutos.EncontraValor(ValueSubTipo: integer):integer; var i:integer; Encontrou: Boolean; begin result:=1; i:=ValueSubTipo; Encontrou:=False; while not Encontrou do begin if not qAutos.Locate('Tipo; SubTipo', varArrayOf ([cTipoAutos.Text,i]), [loCaseInsensitive]) Then begin If i=1 then begin encontrou:= true; end else inc(i); end else Encontrou:=True; end; result:=i; end; Mas existe aqui algo que não está a funcionar... Podem dar uma ajuda? Compartilhar este post Link para o post Compartilhar em outros sites
RMVC 0 Denunciar post Postado Novembro 16, 2009 Bem problema resolvido...era um not a mais!! if qAutos.Locate('Tipo; SubTipo', varArrayOf ([cTipoAutos.Text,i]), Cumps Compartilhar este post Link para o post Compartilhar em outros sites