Chamar formulário dentro da função
Boa tarde pessoal estou desenvolvendo uma aplicação para exportar os dados do Paradox diretamente do firebird formatando os campos como eu desejar!
Até aí tudo bem!
Criei uma função para exportar as cidades e quando não encontrar a cidade irei chamar um formulario onde o usuário irá buscar a cidade que ele deseja. Aqui abaixo a função:
function TFrmExportar.BuscaCidade(fNome, fEstado: string ) : integer;
begin
Result := -1;
with Dm.QrConsulta do begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM GER_CIDADES WHERE C_CIDADE = '+QuotedStr(RemoveAccent(fNome))+ 'AND C_UF = '+QuotedStr(RemoveAccent(fEstado)));
Open;
if RecordCount = 0 then begin
FrmBuscaCidade:= TFrmBuscaCidade(Self);
FrmBuscaCidade.ShowModal;
FrmBuscaCidade.Free;
end;
if RecordCount = 1 then
Result := FieldByName('C_CODCIDADE').AsInteger;
if RecordCount > 1 then begin
// Varias cidades pedir para o usuario selecionar
end;
end;
end;
O problema é quando está exportando a cidade qu ele não encontra a cidade desejada ele deveria abrir o formulário FrmBuscaCidade, mas ao inves disso está gerando este erro aqui: First chance exception at $75B49617. Exception class EInvalidOperation with message 'Cannot make a visible window modal'. Process ExportParadoxFire.exe (112) Será que vocês podem mim ajudar?
begin
Result := -1;
with Dm.QrConsulta do begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM GER_CIDADES WHERE C_CIDADE = '+QuotedStr(RemoveAccent(fNome))+ 'AND C_UF = '+QuotedStr(RemoveAccent(fEstado)));
Open;
if RecordCount = 0 then begin
FrmBuscaCidade:= TFrmBuscaCidade(Self);
FrmBuscaCidade.ShowModal;
FrmBuscaCidade.Free;
end;
if RecordCount = 1 then
Result := FieldByName('C_CODCIDADE').AsInteger;
if RecordCount > 1 then begin
// Varias cidades pedir para o usuario selecionar
end;
end;
end;
O problema é quando está exportando a cidade qu ele não encontra a cidade desejada ele deveria abrir o formulário FrmBuscaCidade, mas ao inves disso está gerando este erro aqui: First chance exception at $75B49617. Exception class EInvalidOperation with message 'Cannot make a visible window modal'. Process ExportParadoxFire.exe (112) Será que vocês podem mim ajudar?
Thiago Santana
Curtidas 0
Respostas
Emerson Nascimento
05/02/2010
if RecordCount = 0 then begin
FrmBuscaCidade:= TFrmBuscaCidade(Self);
FrmBuscaCidade.Visible := False;
FrmBuscaCidade.ShowModal;
FrmBuscaCidade.Free;
end;
FrmBuscaCidade:= TFrmBuscaCidade(Self);
FrmBuscaCidade.Visible := False;
FrmBuscaCidade.ShowModal;
FrmBuscaCidade.Free;
end;
GOSTEI 0
Marcos Iwazaki
05/02/2010
Seria interessante usar try finally
E tbm eu libero os forms de uma outra maneira, mas isso é opcional.
if RecordCount = 0 then begin
FrmBuscaCidade:= TFrmBuscaCidade(Self);
try
FrmBuscaCidade.Visible := False;
FrmBuscaCidade.ShowModal;
finally
FrmBuscaCidade.release;
FrmBuscaCidade := nil;
end;//try
end;
E tbm eu libero os forms de uma outra maneira, mas isso é opcional.
if RecordCount = 0 then begin
FrmBuscaCidade:= TFrmBuscaCidade(Self);
try
FrmBuscaCidade.Visible := False;
FrmBuscaCidade.ShowModal;
finally
FrmBuscaCidade.release;
FrmBuscaCidade := nil;
end;//try
end;
GOSTEI 0
Thiago Santana
05/02/2010
Socram poe um exemplo de como vc libera os teu forms aí!
Porque do jeito em que vc mim passou no tópico anterior não deu certo ñ!
GOSTEI 0
Alison Bissoli
05/02/2010
Costuma dar esse erro quando alteramos incorretamente o tipo do formulário, por exemplo pra mdichild em aplicação SDI.
GOSTEI 0
Marcos Iwazaki
05/02/2010
Então eu uso desse jeito que eu passei.
Qual erro que deu?
Cola o bloco do seu codigo ae.
flw.
Qual erro que deu?
Cola o bloco do seu codigo ae.
flw.
GOSTEI 0
Thiago Santana
05/02/2010
Consegui desse jeito aqui:
if RecordCount = 0 then begin
try
FrmBuscaCidade:= TFrmBuscaCidade.Create(Self);
FrmBuscaCidade.lblCidade.Caption := fNome;
FrmBuscaCidade.ShowModal;
finally
Result := FrmBuscaCidade.CodCidadeFB;
FrmBuscaCidade.Free;
end;//try
No teu código tava faltando o Create! Valeu pela ajuda...
try
FrmBuscaCidade:= TFrmBuscaCidade.Create(Self);
FrmBuscaCidade.lblCidade.Caption := fNome;
FrmBuscaCidade.ShowModal;
finally
Result := FrmBuscaCidade.CodCidadeFB;
FrmBuscaCidade.Free;
end;//try
No teu código tava faltando o Create! Valeu pela ajuda...
GOSTEI 0
Emerson Nascimento
05/02/2010
só uma dica: evite o uso de recordcount. utilize somente se você quiser saber exatamente quantos registros há na tabela (para preencher um contator, por exemplo).
no seu caso, use IsEmpty.
no seu caso, use IsEmpty.
GOSTEI 0
Wilson Junior
05/02/2010
Ao invés de usar FrmBuscaCidade.Free utilize FreeAndNil(FrmBuscaCidade). Assim ele libera da memória e seta o FrmBuscaCidade como NIL.
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0