Re: [delphi-br] Sobre inherited - parte 2
Romário, mais uma vez, valeu pela dica. Quanto os tipos dos atributos, estou fazendo um programa bem específico (proj. final de faculdade) para um determinado lugar, não me preocupando em distribuí-lo para outros. A minha preocupação é, somente, passar e ter o canudo nas mãos, entende? O tempo está curtíssimo e não estou apto (atualmente) para fazer aquele projeto. Tenho que fazer um capaz de passar. Aproveitando, gostaria de pedir uma dica sua, caso vc possa dar e saiba: estou com uma base de dados no interbase e, quando tento incluir um novo registro, ele simplesmente é criticado, não deixando gravar por causa do código que é PK. A minha rotina pra, antes de gravar, é a seguinte: consulto no banco o último código da seguinte maneira: SELECT * FROM EVENTO --- SqlEvento.last codigo:=SqlEvento['codigo_Evento']; Depois o incremento em 1. Só que, ao fazer esse passo a passo todo para pegar o último registro, na verdade o registro retornado é o penúltimo e eu não entendo por que. Será que existe outra forma de fazer isso, com o mesmo pensamento? Em 28/05/07, Romario (Listas) [EMAIL PROTECTED] escreveu: Ricardo, Os atributos da sua classe TUCSacramento podem até estar corretos, mas o tipo deles é que acho que estão errados. Você tem OBJETOS na classe tratados como String e/ou TDatetime. Note que paróquia, curso e celebrante tem vida própria. Ou seja, eles existem mesmo que não haja o Sacramento. Quanto ao seu problema, só faltou o OVERRIDE na classe Batismo. Ficaria assim: Classe Sacramento: Function Consultar (Var Texto: String; ID: Byte): Byte; Virtual; ... Function TUCSacramento.Consultar (Var Texto: String; ID: Byte): Byte; Begin {código a ser executado} End; -- Classe Batismo Type TUCBatismo = Class (TUCSacramento) ... Function Consultar (Var Texto: String; ID: Byte): Byte; Override; Function TUCBatismo.Consultar (Var Texto: String; ID: Byte): Byte; Begin Inherited; {código do consultar batismo a ser executado} End; -- Sds, Romario Ricardo Souza escreveu: Romário, antes de mais nada, agradeço a atenção dispensada para o meu problema. Quanto a ele, os atributos anteriormente informados estão corretos, pois a classe sacramento engloba 4 classes especialistas, a saber: batismo, crisma, eucaristia e matrimônio e os atributos que constam nela estão corretos. E, sobre o problema de executar o que está na function consultar localizada em sacramento, basta eu colocar o termo virtual e fazer o código normalmente e, depois, em batismo faço nova declaração da mesma function consultar e, no corpo dela, incluo inherited para que faça o que antecessor tem + o código do herdeiro? Ex.: -- classe sacramento: function consultar (var texto:string;id:byte):byte; virtual; ... function TUCSacramento.consultar (var texto:string;id:byte):byte; begin {código a ser executado} end; -- classe batismo type TUCBatismo = class (TUCSacramento) ... function consultar (var texto:string;id:byte):byte; function TUCBatismo.consultar (var texto:string;id:byte):byte; begin inherited; {código do consultar batismo a ser executado} end; -- É isso mesmo que eu entendi? [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Sobre inherited - parte 2
Ricardo Souza wrote: A minha rotina pra, antes de gravar, é a seguinte: consulto no banco o último código da seguinte maneira: SELECT * FROM EVENTO --- SqlEvento.last codigo:=SqlEvento['codigo_Evento']; Depois o incremento em 1. select max(codigo_evento) as cod from evento; então pega o campo 'cod' e incrementa 1. -- Joao Morais
Re: [delphi-br] Sobre inherited - parte 2
João, valeu por ter respondido minha dúvida. Agora com essa informação gerou outra: o max funciona para campo string? Eu armazeno o código assim: 0001, 0002, 0003 ... do tipo string; Desculpe perguntar isso pois sou iniciante e não entendo certas coisas. Em 29/05/07, Joao Morais [EMAIL PROTECTED] escreveu: Ricardo Souza wrote: A minha rotina pra, antes de gravar, é a seguinte: consulto no banco o último código da seguinte maneira: SELECT * FROM EVENTO --- SqlEvento.last codigo:=SqlEvento['codigo_Evento']; Depois o incremento em 1. select max(codigo_evento) as cod from evento; então pega o campo 'cod' e incrementa 1. -- Joao Morais [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Sobre inherited - parte 2
A não ser que eu esteja errado, vc vai ter que fazer um CAST desse valor. Algo parecido como: Select Cast(codigo_EVENTO as Integer) as codEVENTO Aí se tudo der certo o valor que vai retornar é um inteiro que pode ser incrementado em 1. Mas primeiro testa a intrução Select num IBConsole ou IBExpert da vida pra ver se isto funciona. Sds, Ricardo. Ricardo Souza [EMAIL PROTECTED] escreveu: João, valeu por ter respondido minha dúvida. Agora com essa informação gerou outra: o max funciona para campo string? Eu armazeno o código assim: 0001, 0002, 0003 ... do tipo string; Desculpe perguntar isso pois sou iniciante e não entendo certas coisas. Em 29/05/07, Joao Morais [EMAIL PROTECTED] escreveu: Ricardo Souza wrote: A minha rotina pra, antes de gravar, é a seguinte: consulto no banco o último código da seguinte maneira: SELECT * FROM EVENTO --- SqlEvento.last codigo:=SqlEvento['codigo_Evento']; Depois o incremento em 1. select max(codigo_evento) as cod from evento; então pega o campo 'cod' e incrementa 1. -- Joao Morais [As partes desta mensagem que não continham texto foram removidas] _ __ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Sobre inherited - parte 2
Romário, antes de mais nada, agradeço a atenção dispensada para o meu problema. Quanto a ele, os atributos anteriormente informados estão corretos, pois a classe sacramento engloba 4 classes especialistas, a saber: batismo, crisma, eucaristia e matrimônio e os atributos que constam nela estão corretos. E, sobre o problema de executar o que está na function consultar localizada em sacramento, basta eu colocar o termo virtual e fazer o código normalmente e, depois, em batismo faço nova declaração da mesma function consultar e, no corpo dela, incluo inherited para que faça o que antecessor tem + o código do herdeiro? Ex.: --- classe sacramento: function consultar (var texto:string;id:byte):byte; virtual; ... function TUCSacramento.consultar (var texto:string;id:byte):byte; begin {código a ser executado} end; --- classe batismo type TUCBatismo = class (TUCSacramento) ... function consultar (var texto:string;id:byte):byte; function TUCBatismo.consultar (var texto:string;id:byte):byte; begin inherited; {código do consultar batismo a ser executado} end; É isso mesmo que eu entendi? Em 27/05/07, Romario (Listas) [EMAIL PROTECTED] escreveu: Ricardo, Ao meu ver, você está colocando quatro objetos em uma classe só. 1) Paróquia 2) Sacramento 3) Curso 4) Celebrante Identifique as propriedades de cada uma dessas classes e depois monte a classe TUCSacramento. Ex.: Type TUCSacramento = Class(TObject) Private Codigo : Integer; Paroquia : TUCParoquia; Celebrante : TUCCelebrante; Curso : TUCCurso; TipoSacramento : String; Observacao : String; Protected Public End; Quanto ao seu problema, defina o método como VIRTUAL para aproveitar as facilidades oferecidas pelo polimorfismo e modificar o comportamento do acessor. Ex.: Function Cadastrar : Boolean; Virtual; Function Consultar(Var Texto: String; ID: Byte): Byte; Virtual; Sds, Romario ricardo_sx escreveu: Há um tempo atrás questionei sobre o termo Inherited, onde me informaram que ele significa faça aquele código contido no herdado + o código posterior ao termo. Blz. Eu, agora estou com a seguinte dificuldade: tenho duas classes: uma genérica e outra especializada, seguem: type TUCSacramento = class {classe genérica} private codigo_Sacramento:string; codigo_Paroquiano:string; tipo_Sacramento:string; celebrante:string; data_Inscricao:TDateTime; inicio_Curso:TDateTime; termino_Curso:TDateTime; obs:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; virtual; function excluir(codigo:string):boolean; end; function TUCSacramento.consultar(var texto:string;id:byte):byte; begin texto:='qualquer coisa'; result:=1; end; e a classe especializada: type TUCBatismo = class(TUCSacramento) private padrinho:string; madrinha:string; diocese_Batismo:string; paroquia_Batismo:string; data_Batismo:TDateTime; livro_Batismo:string; folha_Batismo:string; numero_Batismo:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; override; function excluir(codigo:string):boolean; override; end; function TUCBatismo.consultar(var texto:string;id:byte):byte; begin inherited; result:=2; end; Meu problema é o seguinte: Eu tenho um código pra ser realizado na classe Sacramento e um outro na classe batismo. Sendo que na classe batismo eu preciso que, antes de executar seu respectivo código, realize o código descrito na classe Sacramento. Então pensei nesse tal de inherited, porém não estou conseguindo fazê-lo funcionar. Será que alguém poderia me ajudar? [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Sobre inherited - parte 2
Ricardo Souza wrote: Romário, antes de mais nada, agradeço a atenção dispensada para o meu problema. Quanto a ele, os atributos anteriormente informados estão corretos, pois a classe sacramento engloba 4 classes especialistas, a saber: batismo, crisma, eucaristia e matrimônio e os atributos que constam nela estão corretos. E, sobre o problema de executar o que está na function consultar localizada em sacramento, basta eu colocar o termo virtual e fazer o código normalmente e, depois, em batismo faço nova declaração da mesma function consultar e, no corpo dela, incluo inherited para que faça o que antecessor tem + o código do herdeiro? Ex.: --- classe sacramento: function consultar (var texto:string;id:byte):byte; virtual; ... function TUCSacramento.consultar (var texto:string;id:byte):byte; begin {código a ser executado} end; --- classe batismo type TUCBatismo = class (TUCSacramento) ... function consultar (var texto:string;id:byte):byte; function TUCBatismo.consultar (var texto:string;id:byte):byte; begin inherited; {código do consultar batismo a ser executado} end; É isso mesmo que eu entendi? Falta alguns detalhes: Na classe abstrata, inclua o termo virtual depois de cada método que você queira especializar. Mas apenas na classe, na implementação você não precisa recolocar o virtual. Na classe especializada, inclua o termo override para os métodos que você quer modificar comportamento. Aqui também, apenas na linha que declara o método. Na implementação não precisa do override. Dentro do método que possui um override você usa o inherited para chamar o que foi declarado na classe anterior. Por enquanto é isso, o restante fica para uma futura parte 3 pra não complicar além do necessário. -- Joao Morais Em 27/05/07, Romario (Listas) [EMAIL PROTECTED] escreveu: Ricardo, Ao meu ver, você está colocando quatro objetos em uma classe só. 1) Paróquia 2) Sacramento 3) Curso 4) Celebrante Identifique as propriedades de cada uma dessas classes e depois monte a classe TUCSacramento. Ex.: Type TUCSacramento = Class(TObject) Private Codigo : Integer; Paroquia : TUCParoquia; Celebrante : TUCCelebrante; Curso : TUCCurso; TipoSacramento : String; Observacao : String; Protected Public End; Quanto ao seu problema, defina o método como VIRTUAL para aproveitar as facilidades oferecidas pelo polimorfismo e modificar o comportamento do acessor. Ex.: Function Cadastrar : Boolean; Virtual; Function Consultar(Var Texto: String; ID: Byte): Byte; Virtual; Sds, Romario ricardo_sx escreveu: Há um tempo atrás questionei sobre o termo Inherited, onde me informaram que ele significa faça aquele código contido no herdado + o código posterior ao termo. Blz. Eu, agora estou com a seguinte dificuldade: tenho duas classes: uma genérica e outra especializada, seguem: type TUCSacramento = class {classe genérica} private codigo_Sacramento:string; codigo_Paroquiano:string; tipo_Sacramento:string; celebrante:string; data_Inscricao:TDateTime; inicio_Curso:TDateTime; termino_Curso:TDateTime; obs:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; virtual; function excluir(codigo:string):boolean; end; function TUCSacramento.consultar(var texto:string;id:byte):byte; begin texto:='qualquer coisa'; result:=1; end; e a classe especializada: type TUCBatismo = class(TUCSacramento) private padrinho:string; madrinha:string; diocese_Batismo:string; paroquia_Batismo:string; data_Batismo:TDateTime; livro_Batismo:string; folha_Batismo:string; numero_Batismo:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; override; function excluir(codigo:string):boolean; override; end; function TUCBatismo.consultar(var texto:string;id:byte):byte; begin inherited; result:=2; end; Meu problema é o seguinte: Eu tenho um código pra ser realizado na classe Sacramento e um outro na classe batismo. Sendo que na classe batismo eu preciso que, antes de executar seu respectivo código, realize o código descrito na classe Sacramento. Então pensei nesse tal de inherited, porém não estou conseguindo fazê-lo funcionar. Será que alguém poderia me ajudar? [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Sobre inherited - parte 2
Caro João, obrigado pelas dicas! vou fazer e ver se funciona. Qualquer coisa retorno, lembrando que bons filmes têm trilogia e, possivelmente, o meu terá a parte 3 rsrsrsrs. Em 28/05/07, Joao Morais [EMAIL PROTECTED] escreveu: Ricardo Souza wrote: Romário, antes de mais nada, agradeço a atenção dispensada para o meu problema. Quanto a ele, os atributos anteriormente informados estão corretos, pois a classe sacramento engloba 4 classes especialistas, a saber: batismo, crisma, eucaristia e matrimônio e os atributos que constam nela estão corretos. E, sobre o problema de executar o que está na function consultar localizada em sacramento, basta eu colocar o termo virtual e fazer o código normalmente e, depois, em batismo faço nova declaração da mesma function consultar e, no corpo dela, incluo inherited para que faça o que antecessor tem + o código do herdeiro? Ex.: -- classe sacramento: function consultar (var texto:string;id:byte):byte; virtual; ... function TUCSacramento.consultar (var texto:string;id:byte):byte; begin {código a ser executado} end; -- classe batismo type TUCBatismo = class (TUCSacramento) ... function consultar (var texto:string;id:byte):byte; function TUCBatismo.consultar (var texto:string;id:byte):byte; begin inherited; {código do consultar batismo a ser executado} end; -- É isso mesmo que eu entendi? Falta alguns detalhes: Na classe abstrata, inclua o termo virtual depois de cada método que você queira especializar. Mas apenas na classe, na implementação você não precisa recolocar o virtual. Na classe especializada, inclua o termo override para os métodos que você quer modificar comportamento. Aqui também, apenas na linha que declara o método. Na implementação não precisa do override. Dentro do método que possui um override você usa o inherited para chamar o que foi declarado na classe anterior. Por enquanto é isso, o restante fica para uma futura parte 3 pra não complicar além do necessário. -- Joao Morais Em 27/05/07, Romario (Listas) [EMAIL PROTECTED]rbr_vix_es%40yahoo.com.br escreveu: Ricardo, Ao meu ver, você está colocando quatro objetos em uma classe só. 1) Paróquia 2) Sacramento 3) Curso 4) Celebrante Identifique as propriedades de cada uma dessas classes e depois monte a classe TUCSacramento. Ex.: Type TUCSacramento = Class(TObject) Private Codigo : Integer; Paroquia : TUCParoquia; Celebrante : TUCCelebrante; Curso : TUCCurso; TipoSacramento : String; Observacao : String; Protected Public End; Quanto ao seu problema, defina o método como VIRTUAL para aproveitar as facilidades oferecidas pelo polimorfismo e modificar o comportamento do acessor. Ex.: Function Cadastrar : Boolean; Virtual; Function Consultar(Var Texto: String; ID: Byte): Byte; Virtual; Sds, Romario ricardo_sx escreveu: Há um tempo atrás questionei sobre o termo Inherited, onde me informaram que ele significa faça aquele código contido no herdado + o código posterior ao termo. Blz. Eu, agora estou com a seguinte dificuldade: tenho duas classes: uma genérica e outra especializada, seguem: type TUCSacramento = class {classe genérica} private codigo_Sacramento:string; codigo_Paroquiano:string; tipo_Sacramento:string; celebrante:string; data_Inscricao:TDateTime; inicio_Curso:TDateTime; termino_Curso:TDateTime; obs:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; virtual; function excluir(codigo:string):boolean; end; function TUCSacramento.consultar(var texto:string;id:byte):byte; begin texto:='qualquer coisa'; result:=1; end; e a classe especializada: type TUCBatismo = class(TUCSacramento) private padrinho:string; madrinha:string; diocese_Batismo:string; paroquia_Batismo:string; data_Batismo:TDateTime; livro_Batismo:string; folha_Batismo:string; numero_Batismo:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; override; function excluir(codigo:string):boolean; override; end; function TUCBatismo.consultar(var texto:string;id:byte):byte; begin inherited; result:=2; end; Meu problema é o seguinte: Eu tenho um código pra ser realizado na classe Sacramento e um outro na classe batismo. Sendo que na classe batismo eu preciso que, antes de executar seu respectivo código, realize o código descrito na classe Sacramento. Então pensei nesse tal de inherited, porém não estou conseguindo fazê-lo funcionar. Será que alguém poderia me ajudar? [As partes desta mensagem que não continham texto
Re: [delphi-br] Sobre inherited - parte 2
Ricardo, Os atributos da sua classe TUCSacramento podem até estar corretos, mas o tipo deles é que acho que estão errados. Você tem OBJETOS na classe tratados como String e/ou TDatetime. Note que paróquia, curso e celebrante tem vida própria. Ou seja, eles existem mesmo que não haja o Sacramento. Quanto ao seu problema, só faltou o OVERRIDE na classe Batismo. Ficaria assim: Classe Sacramento: Function Consultar (Var Texto: String; ID: Byte): Byte; Virtual; ... Function TUCSacramento.Consultar (Var Texto: String; ID: Byte): Byte; Begin {código a ser executado} End; - Classe Batismo Type TUCBatismo = Class (TUCSacramento) ... Function Consultar (Var Texto: String; ID: Byte): Byte; Override; Function TUCBatismo.Consultar (Var Texto: String; ID: Byte): Byte; Begin Inherited; {código do consultar batismo a ser executado} End; - Sds, Romario Ricardo Souza escreveu: Romário, antes de mais nada, agradeço a atenção dispensada para o meu problema. Quanto a ele, os atributos anteriormente informados estão corretos, pois a classe sacramento engloba 4 classes especialistas, a saber: batismo, crisma, eucaristia e matrimônio e os atributos que constam nela estão corretos. E, sobre o problema de executar o que está na function consultar localizada em sacramento, basta eu colocar o termo virtual e fazer o código normalmente e, depois, em batismo faço nova declaração da mesma function consultar e, no corpo dela, incluo inherited para que faça o que antecessor tem + o código do herdeiro? Ex.: -- classe sacramento: function consultar (var texto:string;id:byte):byte; virtual; ... function TUCSacramento.consultar (var texto:string;id:byte):byte; begin {código a ser executado} end; -- classe batismo type TUCBatismo = class (TUCSacramento) ... function consultar (var texto:string;id:byte):byte; function TUCBatismo.consultar (var texto:string;id:byte):byte; begin inherited; {código do consultar batismo a ser executado} end; -- É isso mesmo que eu entendi?
[delphi-br] Sobre inherited - parte 2
Há um tempo atrás questionei sobre o termo Inherited, onde me informaram que ele significa faça aquele código contido no herdado + o código posterior ao termo. Blz. Eu, agora estou com a seguinte dificuldade: tenho duas classes: uma genérica e outra especializada, seguem: type TUCSacramento = class {classe genérica} private codigo_Sacramento:string; codigo_Paroquiano:string; tipo_Sacramento:string; celebrante:string; data_Inscricao:TDateTime; inicio_Curso:TDateTime; termino_Curso:TDateTime; obs:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; virtual; function excluir(codigo:string):boolean; end; function TUCSacramento.consultar(var texto:string;id:byte):byte; begin texto:='qualquer coisa'; result:=1; end; e a classe especializada: type TUCBatismo = class(TUCSacramento) private padrinho:string; madrinha:string; diocese_Batismo:string; paroquia_Batismo:string; data_Batismo:TDateTime; livro_Batismo:string; folha_Batismo:string; numero_Batismo:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; override; function excluir(codigo:string):boolean; override; end; function TUCBatismo.consultar(var texto:string;id:byte):byte; begin inherited; result:=2; end; Meu problema é o seguinte: Eu tenho um código pra ser realizado na classe Sacramento e um outro na classe batismo. Sendo que na classe batismo eu preciso que, antes de executar seu respectivo código, realize o código descrito na classe Sacramento. Então pensei nesse tal de inherited, porém não estou conseguindo fazê-lo funcionar. Será que alguém poderia me ajudar?
Re: [delphi-br] Sobre inherited - parte 2
Ricardo, Ao meu ver, você está colocando quatro objetos em uma classe só. 1) Paróquia 2) Sacramento 3) Curso 4) Celebrante Identifique as propriedades de cada uma dessas classes e depois monte a classe TUCSacramento. Ex.: Type TUCSacramento = Class(TObject) Private Codigo : Integer; Paroquia : TUCParoquia; Celebrante : TUCCelebrante; Curso : TUCCurso; TipoSacramento : String; Observacao : String; Protected Public End; Quanto ao seu problema, defina o método como VIRTUAL para aproveitar as facilidades oferecidas pelo polimorfismo e modificar o comportamento do acessor. Ex.: Function Cadastrar : Boolean; Virtual; Function Consultar(Var Texto: String; ID: Byte): Byte; Virtual; Sds, Romario ricardo_sx escreveu: Há um tempo atrás questionei sobre o termo Inherited, onde me informaram que ele significa faça aquele código contido no herdado + o código posterior ao termo. Blz. Eu, agora estou com a seguinte dificuldade: tenho duas classes: uma genérica e outra especializada, seguem: type TUCSacramento = class {classe genérica} private codigo_Sacramento:string; codigo_Paroquiano:string; tipo_Sacramento:string; celebrante:string; data_Inscricao:TDateTime; inicio_Curso:TDateTime; termino_Curso:TDateTime; obs:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; virtual; function excluir(codigo:string):boolean; end; function TUCSacramento.consultar(var texto:string;id:byte):byte; begin texto:='qualquer coisa'; result:=1; end; e a classe especializada: type TUCBatismo = class(TUCSacramento) private padrinho:string; madrinha:string; diocese_Batismo:string; paroquia_Batismo:string; data_Batismo:TDateTime; livro_Batismo:string; folha_Batismo:string; numero_Batismo:string; public function cadastrar:boolean; function consultar(var texto:string;id:byte):byte; function alterar:boolean; override; function excluir(codigo:string):boolean; override; end; function TUCBatismo.consultar(var texto:string;id:byte):byte; begin inherited; result:=2; end; Meu problema é o seguinte: Eu tenho um código pra ser realizado na classe Sacramento e um outro na classe batismo. Sendo que na classe batismo eu preciso que, antes de executar seu respectivo código, realize o código descrito na classe Sacramento. Então pensei nesse tal de inherited, porém não estou conseguindo fazê-lo funcionar. Será que alguém poderia me ajudar?