Olá a Todos... As vezes tentamos entender os codigos postados e fica meio confuso dever o codigo no email
Como sugestão... peço aos amigos colaboradores... postar os codigo em http://pastebin.com assim facilia bastante.. como exemplo sego o codigo de nosso amigo... So uma Sugestão hein..heheh =D abraço Marcos Bernardo Em 19 de julho de 2010 23:32, Pedro de Souza <pedros...@yahoo.com.br>escreveu: > > > Boa noite pessoal, programei por vários anos em VB6 e depois de um tempo > sem programar estou voltando a ativa com o D2010. > Aprendi rápido o básico como a sintaxe e os componentes, mais estou tendo > problemas com POO em 3 camadas. Estou fazendo um cadastro simples onde tenho > o seguinte cenário: > > 1 DataModule : TSQLConnection, TSQLTable, TSQLStoredProc > 1 Form: DataSetprovider, ClientDataSet, DataSource, DBNavigator, os campos > das tabelas DBEdit, TDBComboBox e os botões de ação incluir, excluir, etc... > 1 Unit: que é a minha classe. > > Consigo navegar pelos regiostros mais quando tento fazer o cadastro recebo > a seguinte mensagem: Access violation at address 0060680C in module > 'Cadastro.exe' Write of address 00000004. > Pesquisando percebi que a referência da minha classe está como nil quanto > chamo o método incluir, mais como carregar a classe corretamente? Me > corrijam se eu estiver errado. > Segue abaixo o código que estou usando: > A parte em negrito no form é onde acontece o erro. Coloquei um if para > tratar o erro mais como corrigir? > Desde já agradeço a ajuda de vocês. > > DATAMODULE: > unit DMAnoLetivo; > > interface > > uses > SysUtils, Classes, DSConnect, DBClient, SConnect, DB, MConnect, > WideStrings, > DBXOracle, SqlExpr, FMTBcd, CLCadAnoLetivo, Dialogs; > > type > TDTMAnoLetivo = class(TDataModule) > ConnR110ANO: TSQLConnection; > TableR110ANO: TSQLTable; > SpR110ANO: TSQLStoredProc; > TableR110ANOCODANO: TFMTBCDField; > TableR110ANOANOLET: TFMTBCDField; > TableR110ANOINIANO: TSQLTimeStampField; > TableR110ANOFINANO: TSQLTimeStampField; > TableR110ANOSITANO: TWideStringField; > private > { Private declarations } > public > { Public declarations } > function Incluir(FCodAno :TAnoLetivo):Boolean; > end; > > var > dtmAnoLetivo: TDTMAnoLetivo; > > implementation > > {$R *.dfm} > > {TDTMAnoLetivo} > > function TDTMAnoLetivo.Incluir(FCodAno :TAnoLetivo):Boolean; > begin > result := false; > try > if not ConnR110ANO.Connected then > ConnR110ANO.Open; > > if spR110ANO.Active then > spR110ANO.Close; > > spR110ANO.ClearFields; > > spR110ANO.StoredProcName := 'spCadAnoLetivo'; > > spR110ANO.Params.ParamByName('p_CodAno').Value := FCodAno.CodAno; > spR110ANO.Params.ParamByName('p_AnoLet').Value := FCodAno.AnoLet; > spR110ANO.Params.ParamByName('p_IniAno').Value := FCodAno.IniAno; > spR110ANO.Params.ParamByName('p_FinAno').Value := FCodAno.FinAno; > spR110ANO.Params.ParamByName('p_SitAno').Value := FCodAno.SitAno; > > spR110ANO.ExecProc; > result := true; > except > on e:exception do > ShowMessage('Houve um problema de comunicação com o banco de dados!'); > end; > end; > > end. > > FORM: > unit frmCadAnoLetivoUnit; > > interface > > uses > Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, > Dialogs, StdCtrls, ComCtrls, RzBckgnd, RzBorder, ExtCtrls, DBCtrls, > Buttons, > Mask, DB, DBClient, Provider; > > type > TfrmCadAnoLetivo = class(TForm) > Label2: TLabel; > Label1: TLabel; > RzBorder: TRzBorder; > RzSeparator: TRzSeparator; > StatusBar: TStatusBar; > Label3: TLabel; > Label4: TLabel; > DBNavigator: TDBNavigator; > btAlterar: TBitBtn; > btCancelar: TBitBtn; > btExcluir: TBitBtn; > btAjuda: TBitBtn; > btFechar: TBitBtn; > btPesquisar: TBitBtn; > btIncluir: TBitBtn; > Label5: TLabel; > cboSituacao: TDBComboBox; > txtDataFim: TDBEdit; > txtDataInicio: TDBEdit; > txtAnoLetivo: TDBEdit; > cboCodAnoLetivo: TDBComboBox; > DataSetProvider: TDataSetProvider; > ClientDataSet: TClientDataSet; > ClientDataSetCODANO: TFMTBCDField; > ClientDataSetANOLET: TFMTBCDField; > ClientDataSetINIANO: TSQLTimeStampField; > ClientDataSetFINANO: TSQLTimeStampField; > ClientDataSetSITANO: TWideStringField; > DataSource: TDataSource; > tdbAnoLetivo: TDBText; > procedure btFecharClick(Sender: TObject); > procedure btIncluirClick(Sender: TObject); > procedure btCancelarClick(Sender: TObject); > procedure FormCreate(Sender: TObject); > private > { Private declarations } > procedure LimparCampos; > function ValidarCampos :boolean; > public > { Public declarations } > > end; > > var > frmCadAnoLetivo: TfrmCadAnoLetivo; > > implementation > > {$R *.dfm} > > uses CLCadAnoLetivo, DMAnoLetivo; > > var FAnoLetivo : TAnoLetivo; > {Procedimentos de iniialização e rotinas de limpeza de campos} > procedure TfrmCadAnoLetivo.LimparCampos; > begin > cboCodAnoLetivo.Clear; > txtAnoLetivo.Clear; > txtDataInicio.Clear; > txtDataFim.Clear; > cboSituacao.Clear; > end; > > {Proedimentos de validação de campo} > function TfrmCadAnoLetivo.ValidarCampos:boolean; > begin > ValidarCampos := true; > > if txtAnoLetivo.Text = '' then > begin > Application.MessageBox('O campo ano letivo não pode estar vazio!', > 'Alerta', MB_ICONEXCLAMATION); > ValidarCampos := false; > txtAnoLetivo.SetFocus; > exit; > end; > > if txtDataInicio.Text = '' then > begin > Application.MessageBox('O campo data inícial não pode estar vazio!', > 'Alerta', MB_ICONEXCLAMATION); > ValidarCampos := false; > txtDataInicio.SetFocus; > exit; > end; > > if txtDataFim.Text = '' then > begin > Application.MessageBox('O campo data final não pode estar vazio!', > 'Alerta', MB_ICONEXCLAMATION); > ValidarCampos := false; > txtDataFim.SetFocus; > exit; > end; > > if cboSituacao.Text = '' then > begin > Application.MessageBox('O campo situação não pode estar vazio!', 'Alerta', > MB_ICONEXCLAMATION); > ValidarCampos := false; > exit; > end; > end; > > procedure TfrmCadAnoLetivo.btCancelarClick(Sender: TObject); > begin > btIncluir.Caption := '&Incluir'; > btAlterar.Enabled := true; > btExcluir.Enabled := true; > cboCodAnoLetivo.Enabled := true; > DBNavigator.Enabled := true; > end; > > procedure TfrmCadAnoLetivo.btFecharClick(Sender: TObject); > begin > close; > end; > > procedure TfrmCadAnoLetivo.btIncluirClick(Sender: TObject); > begin > if btIncluir.Caption = '&Incluir' then > begin > btIncluir.Caption := '&Salvar'; > btAlterar.Enabled := false; > btExcluir.Enabled := false; > cboCodAnoLetivo.Enabled := false; > DBNavigator.Enabled := false; > cboCodAnoLetivo.Text := '0'; > txtAnoLetivo.Clear; > txtDataInicio.Clear; > txtDataFim.Clear; > cboSituacao.Clear; > txtAnoLetivo.SetFocus; > end > else > begin > if not ValidarCampos then exit; > > if FAnoLetivo <> nil then > begin > FAnoLetivo.Create; > FAnoLetivo.CodAno := StrToInt(cboCodAnoLetivo.Text); > FAnoLetivo.AnoLet := StrToInt(txtAnoLetivo.Text); > FAnoLetivo.IniAno := txtDataInicio.Text; > FAnoLetivo.FinAno := txtDataFim.Text; > FAnoLetivo.SitAno := cboSituacao.Text; > FAnoLetivo.Incluir; > end; > > btIncluir.Caption := '&Incluir'; > btAlterar.Enabled := true; > btExcluir.Enabled := true; > cboCodAnoLetivo.Enabled := true; > DBNavigator.Enabled := true; > end; > > end; > > procedure TfrmCadAnoLetivo.FormCreate(Sender: TObject); > begin > LimparCampos; > end; > > end. > > UNIT: > unit CLCadAnoLetivo; > > interface > > uses > Classes, DateUtils, Sysutils; > > type > TAnoLetivo = class > > private > {Aqui poderia ficar os métodos privados} > > FCodAno :integer; > FAnoLet :integer; > FIniAno :string; > FFinAno :string; > FSitAno :string; > FAnoLetivo :TAnoLetivo; > > procedure SetCodAno(CodAno :integer); > function GetCodAno :integer; > > procedure SetAnoLet(AnoLet :integer); > function GetAnoLet :integer; > > procedure SetIniAno(IniAno :string); > function GetIniAno :string; > > procedure SetFinAno(FinAno :string); > function GetFinAno :string; > > procedure SetSitAno(SitAno :string); > function GetSitAno :string; > > published > > public > {Construtores e Destrutores} > constructor Create; > destructor Destroy; override; > > {Métodos} > function Incluir:Boolean; > function Alterar(CodAno :integer) :boolean; > function Exluir(CodAno :integer) :boolean; > procedure CarregarComboAnoLetivo; > procedure Clear; > > {Propriedades} > property CodAno :integer read GetCodAno write SetCodAno; > property AnoLet :integer read GetAnoLet write SetAnoLet; > property IniAno :string read GetIniAno write SetIniAno; > property FinAno :string read GetFinAno write SetFinAno; > property SitAno :string read GetSitAno write SetSitAno; > property AnoLetivo :TAnoLetivo read FAnoLetivo write FAnoLetivo; > end; > > implementation > > {TAnoLetivo} > > uses DMAnoLetivo; > > procedure TAnoLetivo.SetCodAno(CodAno: integer); > begin > FCodAno := CodAno; > end; > > function TAnoLetivo.GetCodAno :integer; > begin > GetCodAno := FCodAno; > end; > > procedure TAnoLetivo.SetAnoLet(AnoLet: integer); > begin > FAnoLet := AnoLet; > end; > > function TAnoLetivo.GetAnoLet :integer; > begin > GetAnoLet := FAnoLet; > end; > > procedure TAnoLetivo.SetIniAno(IniAno: string); > begin > FIniAno := IniAno; > end; > > function TAnoLetivo.GetIniAno :string; > begin > GetIniAno := FIniAno; > end; > > procedure TAnoLetivo.SetFinAno(FinAno: string); > begin > FFinAno := FinAno; > end; > > function TAnoLetivo.GetFinAno :string; > begin > GetFinAno := FFinAno; > end; > > procedure TAnoLetivo.SetSitAno(SitAno: string); > begin > FSitAno := SitAno; > end; > > function TAnoLetivo.GetSitAno :string; > begin > GetSitAno := FSitAno; > end; > > constructor TAnoletivo.Create; > begin > inherited; > CodAno := 0; > AnoLet := 0; > IniAno := ''; > FinAno := ''; > SitAno := ''; > FAnoLetivo.Clear; > end; > > destructor TAnoLetivo.Destroy; > begin > FAnoLetivo.Free; > inherited; > end; > > function TAnoLetivo.Incluir:Boolean; > begin > dtmAnoLetivo.Incluir(Self); > end; > > function TAnoLetivo.Alterar(CodAno :integer): Boolean; > begin > > end; > > function TAnoLetivo.Exluir(CodAno :integer): Boolean; > begin > > end; > > procedure TAnoLetivo.CarregarComboAnoLetivo; > begin > > end; > > procedure TAnoLetivo.Clear; > begin > CodAno := 0; > AnoLet := 0; > IniAno := ''; > FinAno := ''; > SitAno := ''; > end; > > end. > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Marcos A. de A. Bernardo xmarcos....@gmail.com 11 - 9462-2657 / 11- 3205-1499 http://bagusconsultoria.wordpress.com/ [As partes desta mensagem que não continham texto foram removidas] ------------------------------------ -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> <*> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages <*> Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html