como chamar uma function de outro form que atualiza as strings inseridas nas cells de uma stringGrid ????????? socorro

Delphi

02/11/2017

tenho dois forms dispostos da seguinte maneira:

form 1 : esta a function e o stringGrid
obs : esta function tem uma type
    type
		declarar_contas = record
		descricao : string;
		valor     : string;
		dtv       : string;
		ncolums   : integer;
		qtd_parc  : string
		end;


seu cabsalho esta no publico :
	
            public
		{ Public declarations }
		function Excontas : declarar_contas;


e a função é essa
:
function TfrmControleD.Excontas: declarar_contas;
var
i,b,a:integer;
begin
with DM.ADOQuery1 do
 begin
 //contar o numero de contas registrada no BD
	Close;
 SQL.Clear;
 SQL.Add('select count(*) as NC from contas'); 
 open;
 Result.ncolums:=fieldbyname('NC').AsInteger;
	sgTabelaC.RowCount:=Result.ncolums + 2;                     // o erro ocorre aqui e se eu comentar ele vai migrando para todas as linhas que contem a stringGrid
	sgTabelaC.Cells[0,0]:='Conta';
	sgTabelaC.Cells[1,0]:='Valor R$';
	sgTabelaC.Cells[2,0]:='data de vencimento';
 //select das contas: descricao, valor e dt_vencimeto
 Close;
 SQL.Clear;
 SQL.Add('select c.descricao, c.valor, p.dt_vencimento, p.valor as VP from contas as c');
 SQL.Add('inner join parcelas as p on p.conta = c.id_conta');
 SQL.Add('where c.status = "D" and p.status = "D" and c.visivel ="1" and p.visivel ="1"');
 SQL.Add('order by p.dt_vencimento, descricao');
 open;
	//incia gravação nas celulas do grid
 First;
 i:=1;
 a:=0;
	while not (DM.ADOQuery1.eof) do
	begin
	Result.descricao := fieldbyname('descricao').AsString;
	Result.valor     := fieldbyname('vp').AsString;
	Result.dtv       := fieldbyname('dt_vencimento').AsString;
	b:=0;
		while b <= Result.ncolums do
		begin
		Memo1.Lines.Add('R : ' + Result.descricao +
			'   .....     G: ' + sgTabelaC.Cells[0,b] + '         n°: '+ inttostr(b));

			if Result.descricao = sgTabelaC.Cells[0,b] then
			begin
			a:=1;
			end;
		b:=b+1;
		end; //do while
			if a <> 1 then
			begin
			//tratando string do valor
				if pos(',',Result.valor)= 0 then
				begin
				Result.valor:=Result.valor + ',00'
				end;
				if Length(Result.valor)= pos(',',Result.valor)+1  then
				begin
				Result.valor:=Result.valor + '0'
				end;
			//ShowMessage(Result.descricao + #13 + Result.valor + #13 + Result.dtv);						
			sgTabelaC.Cells[0,i]:=Result.descricao;
			sgTabelaC.Cells[1,i]:=Result.valor;
			sgTabelaC.Cells[2,i]:=Result.dtv;
				i:=i+1;
			end;
	a:=0;
	Next;
	end;	
 end;
end;






eu nao estou conseguindo chamar essa função para atualizar os valores dessa stringGrid de outro form
eu utilizo essa função com sucesso no mesmo form no evento onactivate
o erro ocorre justamente na manipulação da stringGrid
Henrique Dias

Henrique Dias

Curtidas 0

Respostas

Jerson Boer

Jerson Boer

02/11/2017

Olá Henrique,

Estava verificando o seu problema, copiei o seu código, fiz algumas adaptações para exibir os dados com outra estrutura e não encontrei problema em chamar esta função através de um outro formulário.

Você disse que a função está em um Form1, certo? Esse Form2, que irá chamar esta função do Form1 é criado a partir do Form1? ou seja, o Form1 existe no momento que chama a função?

Se quiser postar o código de como chamou esta função no Form2, talvez possa esclarecer melhor.
GOSTEI 0
POSTAR