Alan_Prog 0 Denunciar post Postado Março 27, 2009 ae pessoal, to começando hj aki no forum e to com uma duvida q ta me matando to começando a programar em delphi, e quero aprender a mexer com MDI... meu programa tah funcionando direitinho, mas tenho uma form com uma tabela de preços.. nesse form tenho um botao q chama outro form para cadastrar mais um produto.. depois q rodo a query, esse form eh fechado e mando executar comandos no form da tabela de preços ai vai o codigo.. query.SQL.Clear; query.Close; query.SQL.Add('insert into PRESTADOS (NOME, PRECO) values (:nome, :preco)'); query.params[0].AsString := edtnome.text; query.params[1].AsFloat := strtofloat(edtpreco.Text); query.ExecSQL; dm.trans.Commit; self.Close; configuracao.listquery.Close; configuracao.listquery.Open; end; Erro: Project Informatica.exe raised exception class EAccessViolation with message 'Access violation at adress 004c6c81 in module 'Informatica.exe'. Read of address 00000320. Proccess stopped. use step or run to continue. na linha: configuracao.listquery.Close; Obs.: jah fiz isso em outros programas q nao eram MDI e nunca deu problema.. obrigado pela ajuda ae!! flww Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Março 27, 2009 Suspeito que seu problema ocorra porque está tentando executar comandos após o close do form... poste o código completo para análise dos dois forms envolvidos se possível. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Alan_Prog 0 Denunciar post Postado Março 27, 2009 procedure Tconfiguracao.Button3Click(Sender: TObject); begin if not(assigned(novoservico)) then tnovoservico.Create(self); end; esse é o codigo do botao q chama aquele form... nao tem mais nada codificado ainda Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Março 27, 2009 Estas linhas: configuracao.listquery.Close; configuracao.listquery.Open; São de qual form? Debugando o código, provavelmente o erro vai aparecer quando tentar executar estas linhas (eu suponho), porque você está executando comandos depois do close do form... já debugou o código para ver onde ocorre o erro? Compartilhar este post Link para o post Compartilhar em outros sites
Alan_Prog 0 Denunciar post Postado Março 27, 2009 configuracao.listquery.close; eh do form da tabela de preços.. já mudei a ordem.. mas nao adiantou.. continua dando o mesmo erro configuracao eh um form.. mas ele continua aberto o tempo todo.. entao nao era pra dar erro quando rodo o programa e coloco o mouse sobre essa linha escreve assim na tooltip: configuracao = nil Compartilhar este post Link para o post Compartilhar em outros sites
Alan_Prog 0 Denunciar post Postado Março 30, 2009 valeu por tentar ajudar Chrnos.. mais alguem ae pra ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Março 30, 2009 Mal, ando corrido aqui nestes dias... agora, se está dando que o configuração = nil, isso pode significar que ele ainda não foi criado ou inicializado... tem como por uma cópia dos códigos dos dois forms? Só a chamada não ajuda muito.... Compartilhar este post Link para o post Compartilhar em outros sites
S4ndr0_soad 0 Denunciar post Postado Março 30, 2009 Olá comente a linha com Self.Close e veja se o erro permanece, se nao der o erro coloque-o após o configuracao.listquery.open. ficando: query.SQL.Clear; query.Close; query.SQL.Add('insert into PRESTADOS (NOME, PRECO) values (:nome, :preco)'); query.params[0].AsString := edtnome.text; query.params[1].AsFloat := strtofloat(edtpreco.Text); query.ExecSQL; dm.trans.Commit; configuracao.listquery.Close; configuracao.listquery.Open; self.Close; veja se funciona.. espero ter ajudado... Sandro R. Compartilhar este post Link para o post Compartilhar em outros sites
Alan_Prog 0 Denunciar post Postado Março 31, 2009 S4andro, ainda nada... vlw tb Chrnos, valeu msm cara.. vou colocar aki unit configura; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, DB, IBCustomDataSet, IBQuery; type Tconfiguracao = class(TForm) GroupBox1: TGroupBox; lstservicos: TListBox; Label1: TLabel; edtpreco: TLabeledEdit; UpDown1: TUpDown; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; listquery: TIBQuery; query: TIBQuery; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure Button3Click(Sender: TObject); procedure lstservicosClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var configuracao: Tconfiguracao; implementation uses agenda, cadastroclientes, cadastroservicos, data, dataagenda, localizacliente, localizaservicos, main, novoprestado, pass, relatorios; {$R *.dfm} procedure Tconfiguracao.FormClose(Sender: TObject; var Action: TCloseAction); begin //action := cahide; end; procedure Tconfiguracao.FormCreate(Sender: TObject); begin listquery.Active := true; listquery.Open; listquery.First; while not listquery.Eof do begin lstservicos.Items.Add(listquery.fieldbyname('NOME').AsString); listquery.Next; end; end; procedure Tconfiguracao.Button3Click(Sender: TObject); begin if not(assigned(novoservico)) then tnovoservico.Create(self); end; procedure Tconfiguracao.lstservicosClick(Sender: TObject); var nome:string; begin nome := lstservicos.Items.Strings[lstservicos.ItemIndex]; query.SQL.Clear; query.Close; query.SQL.Add('select id, preco from prestados where nome = :nome'); query.Params[0].AsString := nome; query.Open; edtpreco.Text := floattostr(query.fieldbyname('PRECO').AsFloat); end; end.esse eh o de configuração.. o q chama o outro formulario unit novoprestado; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, ExtCtrls, DB, IBCustomDataSet, IBQuery, configura; type TNovoServico = class(TForm) edtnome: TLabeledEdit; edtpreco: TLabeledEdit; SpeedButton2: TSpeedButton; SpeedButton1: TSpeedButton; query: TIBQuery; procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var NovoServico: TNovoServico; implementation uses agenda, cadastroclientes, cadastroservicos, data, dataagenda, localizacliente, localizaservicos, main, pass, relatorios; {$R *.dfm} procedure TNovoServico.SpeedButton1Click(Sender: TObject); begin query.SQL.Clear; query.Close; query.SQL.Add('insert into PRESTADOS (NOME, PRECO) values (:nome, :preco)'); query.params[0].AsString := edtnome.text; query.params[1].AsFloat := strtofloat(edtpreco.Text); query.ExecSQL; dm.trans.Commit; configuracao.listquery.Close; configuracao.listquery.Open; // self.Close; end; procedure TNovoServico.SpeedButton2Click(Sender: TObject); begin self.close; end; procedure TNovoServico.FormClose(Sender: TObject; var Action: TCloseAction); begin action := cafree; end; end. e esse eh o do novo serviço.. q passa comandos para outro form... como vcs podem ver.. nao tem nada de tao complicado.. e o primeiro form nao fecha nem eh descarregado da memoria nem nada.... consigo fazer isso normal.. mas com MDI tah dando erro... =========================================== Por favor, pare de postar para evidenciar o seu tópico... isto é contra as regras. Grato Chrnos 10ª Regra É proibido o post de mensagens com o objetivo de evidenciar o tópico, tornando-o primeiro da lista de tópicos (up), tal como mensagens repetitivas e/ou que não condizem com o assunto do tópico em questão (flood). Tais mensagens serão excluídas e o usuário advertido por MP. Compartilhar este post Link para o post Compartilhar em outros sites