Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alan_Prog

passar comandos de um form para outro (MDI)

Recommended Posts

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.