Lazaruz Postado Maio 15, 2020 Denunciar Share Postado Maio 15, 2020 Olá! Ao utilizar Delphi eu assignava true na propriedade Required dos campos de Query e em modo runtime barrava situação de campo em branco automaticamente sem ter de escrever nada nos edits. É um recurso prático e simples. Isto não esta fazendo efeito no Lazaruz 1.6. com ZQuery. alguém saberia se tenho que setar mais algo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 15, 2020 Denunciar Share Postado Maio 15, 2020 Voce leu o Help sobre essa informação ? Specifies whether a nonblank value for a field is required. Delphi syntax: property Required: Boolean; C++ syntax: __property bool Required = {read=FRequired, write=FRequired, default=0}; Description Use Required to find out if a field requires a value or if the field can be blank. If a field is created with the Fields editor, this property is set based on the underlying table. Applications that set Required to true for fields that must have values (for example, a password or part number), but for which the underlying table does not require the field, must write an OnValidate event handler to enforce the property. When the Required property reflects a property of the underlying database table, trying to post a null value causes an exception to be raised. Applications that set the Required property to true when the underlying table does not require the field, should raise an EDatabaseError exception on null values in the OnValidate event handler in order to achieve the same result. Os aplicativos que configuram Required como true para campos que devem ter valores (por exemplo, uma senha ou número de peça), mas para os quais a tabela subjacente não exige o campo, devem gravar um manipulador de eventos OnValidate para impor a propriedade. Evento OnValidate Descrição Escreva um manipulador de eventos OnValidate para validar as alterações feitas nos dados no campo, imediatamente antes de os dados serem gravados no buffer de registro atual. A propriedade EditMask permite a validação dos dados caractere por caractere enquanto está sendo inserido pelo usuário. OnValidate permite que um aplicativo valide os dados como um todo. Quando o valor de um componente de campo é atribuído programaticamente, a validação pelo EditMask é ignorada, pois não há controle com reconhecimento de dados para impor a adesão à máscara. OnValidate permite que um aplicativo valide esses dados antes de serem postados na tabela do banco de dados. Para rejeitar o valor atual do campo do manipulador de eventos OnValidate, crie uma exceção. Ao gravar o valor de um campo no buffer de registro atual, ocorrem as seguintes etapas: 1 O manipulador de eventos OnValidate é chamado para validar os dados. 2 Se o manipulador de eventos OnValidate não gerar uma exceção, os dados serão gravados no buffer de registro atual. 3 Se a gravação dos dados não gerar uma exceção, o manipulador de eventos do OnChange é chamado para permitir uma resposta à alteração. abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lazaruz Postado Maio 18, 2020 Autor Denunciar Share Postado Maio 18, 2020 (editado) Não sei porque esses compiladores mais novos não faz mais como antes. Tem coisas que não da para entender. No D-5 era so mesmo eu assignar o required e vinha MSG padrão, dai era só traduzir o arquivo de mensagens. Bem.... vamos lá.. |Para testar campo mandatório tentei isto, mas não funcionou. procedure ZQueryTIPOValidate(Sender: TField); begin if ZQuery.FieldByName('TIPO').Required then begin if ZQuery.FieldByName('TIPO').IsNull then begin Raise exception.create('CAMPO OBRIGATORIO.'#10); end; end; end; Obs : Não estou utilizando nenhum componente TEdit, e somente edição em DBgrid. Editado Maio 18, 2020 por Lazaruz complemento Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 19, 2020 Denunciar Share Postado Maio 19, 2020 Para que isso funcione, o campo da sua tabela no seu banco de dados, deve estar configurado como Not Null ou então utilize o evento OnColEnter do DbGrid nesse evento, quando voce sair da coluna, voce testa se o campo está vazio. abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lazaruz Postado Maio 19, 2020 Autor Denunciar Share Postado Maio 19, 2020 Voce por acaso não quiz dizer OncolExit, se for isso eu já utilizo alguns assim, mas ColEnter não sei como. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 20, 2020 Denunciar Share Postado Maio 20, 2020 ok... voce pode usar esse evento tambem, mas eu prefiro usar o evento OnColEnter vou dar um exemplo: vamos imaginar que a coluna 4 do seu dbgrid seja o campo "TIPO" e que seja necessario que ele sempre tenha algum valor Então quando o Cursor entrar na coluna 5, voce testa para saber se existe algum valor no campo da coluna 4. Se não existir, voce mostra uma mensagem e retorna o cursor para o campo da coluna 4. if DBGrid1.SelectedIndex = 5 then begin if CDS_TabelaTIPO.Value = '' then begin MessageDlg('DIGITE UM VALOR PARA TIPO', mtInformation,[mbOk], 0); DBGrid1.SelectedIndex := 4; EXIT; end; end; oBS: Veja que estou testando o campo da tabela pelo ClientDataSet que esta linkado a um componente DataSetProvider e um Zquery, mas voce pode fazer a mesma coisa somente pelo Zquery abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lazaruz Postado Maio 21, 2020 Autor Denunciar Share Postado Maio 21, 2020 Obrigado Jhonas, realmente este procedimento irei precisar mais a frente, mas é bom saber que da para fazer por ele. Eu já ia mesmo apresentar o meu resultado baseado no DOC que postou , onde diz que em resumo entende-se que não só assignar Required só, não faz o efeito, tendo então eu adaptei um ex. que vi em algum outro lugar e ficou bem simples e construi em um função global que agente pode reuzar em qualquer DataSet: //Se for em um arquivo de funcoes simples: unit UnFUNCOES; {$mode objfpc}{$H+} interface USES Classes, sysutils,Dialogs,ZDataset,Forms,Db{TField}; //Declara: function ValidaEntradas(Dset:TDataSet): Boolean; //Varre todos os campos do DataSet e Checa quais tem Required function ValidaEntradas(Dset:TDataSet): Boolean; var i :Integer; Campos :TStrings; begin try Campos := TStringList.Create; //Cria cx de MSGs e guardo os campos //requeridos depois mostro a lista for i:=0 to Dset.Fields.Count-1 do begin if Dset.Fields[i].Required then begin if (Dset.Fields[i].AsString=EmptyStr) then Campos.Add(Dset.Fields[i].DisplayName); end; end; if (Campos.Text<>Emptystr) then begin //indice é a posicao na lista. Campos.Insert(0, ' Campos mantatórios:'); Campos.Insert(1, EmptyStr); ShowMessage(Campos.Text); result := false; end else result := true; finally Campos.Free; end; end; END. Usando dentro de um Datamodule: procedure TDataModule1.Query1BeforePost(DataSet: TDataSet); BEGIN if not ValidaEntradas(DataModule1.Query1) then Abort; //congela e mantem tela de edicao, mesmo se for no Grid END; Agora ficou universal e perfeito. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Lazaruz
Olá!
Ao utilizar Delphi eu assignava true na propriedade Required dos campos de Query e em modo runtime barrava situação de campo em branco automaticamente
sem ter de escrever nada nos edits. É um recurso prático e simples.
Isto não esta fazendo efeito no Lazaruz 1.6. com ZQuery.
alguém saberia se tenho que setar mais algo?
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.