Fórum Duvida sobre tela de pesquisa geram c/ View? #299447
14/10/2005
0
Bom estou tentando montar uma tela de pesquisa geral (o banco será o MSSQL-2000), pois bem vou citar um exemplo.
Temos a tabela de fornecedores onde os nome dos campos não são muito amigaveis. Usando comando:
[b:c4ce137b95][color=orange:c4ce137b95]Select nomeestranho as Código, nomeestranho2 as Descriçao[/color:c4ce137b95][/b:c4ce137b95]
eu consigo ´remediar´ esse problema.
Mas ai pensei: vou tentar usar Views para estas pesquisas pois ja deixo apenas os campos pertinentes a consulta, mas estou com o problema para nomear os campos, vejam:
pelo que entendi onde passo [b:c4ce137b95][color=orange:c4ce137b95]ARQFORN_VIEW ( Empresa,Código,Razão_Social, Fantasia,CNPJ,Endereço,Cidade,UF,CEP,Desativado)[/color:c4ce137b95][/b:c4ce137b95] este fica sendo o nome dos campos da view e tambem suas descriçoes.
Mas no sistema (e nos aqui estamos acostumados com os nomes estranhos) ai fica meio complicado mudar de uma hora pra outra.
mas esta é uma duvida que postei no forum sobre SQL Server.
Bom outro ponto é, num form de relatorio de documentoes a pagar por exemplo o usuario tem que selecionar o fornecedor inicial e final, ai ele tem a opção para pesquisar tais fornecedores, neste momento eu estou com um CDS auxiliar para consulta onde apos o usuario indicar o codigo do fornecedor inicial por exemplo eu faço a pesquisa pelo codigo passado, se não achar eu vou abrir a tela de pesquisa geral onde ele tera outras opções para pesquisa como por razao social, cnpj, nome fantasia, etc.
E nesta tela eu estou usando outro CDS, ai a duvida como apos selecionar o fornecedor nesta tela voltar com o mesmo para primeira?
Sendo que ñão posso fazer referencia ao form ou ao dm?
Macario
Curtir tópico
+ 0Posts
14/10/2005
Michael
Vc pode criar uma propriedade pública no formulário de pesquisa. Então, qdo o usuário clicar em OK, por exemplo, vc salva o ID do fornecedor nesta propriedade e ela fica acessível ao outro form de onde vc executou a busca.
Esta propriedade deve ser somente-leitura, para seguir os bons constumes da orientação a objetos. ;-)
[]´s
Gostei + 0
14/10/2005
Macario
Não entendi muito bem, o lance da propriedade.
Veja como esta até o momento a rotina para a pesquisa:
[b:94c6e9c8ab]No onExit [/b:94c6e9c8ab]
pvArqForn - indica que será uma consulta na view de Fornecedores
Código e razão social - são os campos de pesquisa
Se retornar true eu informo o valor que foi retornado para dm.cdsAux
procedure TFrmConhec.mdtCodForExit(Sender: TObject); begin if (ActiveControl = btnCancela) then exit; if TFrmPesqSQL.Pesquisar(dm.SQLConnection, dm.cdsAux, pvArqForn,´Código´,´Razão_Social´,´´,TMaskEdit(SENDER).Text) then begin TMaskEdit(sender).Text := dm.cdsAux.FieldByName(´Código´).AsString; lblDescForn.Caption := dm.cdsAux.FieldByName(´Razão_social´).AsString; end else TMaskEdit(sender).SetFocus; end;
[b:94c6e9c8ab]TFrmPesqSQL.Pesquisar[/b:94c6e9c8ab]
class function TFrmPesqSQL.Pesquisar(AConnection:TSQLConnection ;cdsAux: TClientDataSet; pvView :TPesquisaViews; sCodPesq, sDesPesq, sEmpPesq,sTextoPesq: String): Boolean; Var sSqlAux : String; begin case pvView of pvArqClie : sViewAux :=´ARQCLIE_VIEW´; pvArqForn : sViewAux :=´ARQFORN_VIEW´; pvArqRepr : sViewAux :=´ARQREPR_VIEW´; pvArqTran : sViewAux :=´ARQTRAN_VIEW´; pvArqMer : sViewAux :=´ARQMER_VIEW´; end; PesquisaView := pvView; Result := true; sSqlAux :=´´; sSqlAux := sSqlAux+ ´ Select * from ´+sViewAux; //---------------------------------------------------------------------------- // Verifico se a tabela tem chave pela empresa if (Trim(sEmpPesq) <> ´´) then sSqlAux := sSqlAux+ ´ where ´+ sEmpPesq +´ = ´+QuotedStr(sEmpresa)+´ and ´+sCodPesq +´ = ´+QuotedStr(sTextoPesq) else sSqlAux := sSqlAux+ ´ where ´+ sCodPesq +´ = ´+QuotedStr(sTextoPesq); //---------------------------------------------------------------------------- cdsAux.Close; cdsAux.CommandText := sSqlAux; cdsAux.Open; if cdsAux.IsEmpty then begin [b][color=orange] //AQUI ESTA HA DUVIDA[/color][/b] FrmPesqSQL := TFrmPesqSQL.Create(AConnection,cdsAux,sViewAux,sCodPesq,sDesPesq,sEmpPesq); if cdsAux.IsEmpty then Result :=false else Result := true; end; end;
Por exemplo se o usuario nao informar o codigo do fornecedor, eu crio o formulario, e ai eu nao to sabendo como retornar o registro escolhido da pesquisa para a primeira função,
seria pra cá [b:94c6e9c8ab]TMaskEdit(sender).Text := dm.cdsAux.FieldByName(´Código´).AsString;[/b:94c6e9c8ab]
Não sei se expliquei um pouco melhor ou se to piorando as coisas.
Gostei + 0
17/10/2005
Macario
Abrir a tela de pesquisa ta OK.
Efetuar a pesquisa pelo que o usuario desejar ta OK.
Agora o problema é retornar o Cursor para a tela inicial, pois preciso para efetuar outras verificações como por exemplo se o registro esta desativado, entre outros.
Agora outro problema
eu to fazendo assim, eu passo os componentes de pesquisa do dm para os componentes temporarios da tela de pesquisa
constructor TFrmPesqSQL.Create(AConnection: TSQLConnection; sdsAux: TSQLDataSet; dspAux: TDataSetProvider; cdsAux: TClientDataSet; dtsAux: TDataSource; sView, sCodPesq, sDesPesq, sEmpPesq : ShortString); begin inherited Create(Application); sViewAux := sView; sdsCloneAux := sdsAux; dspCloneAux := dspAux; cdsCloneAux := cdsAux; dtsCloneAux := dtsAux; sCodPesqAux := sCodPesq; sDesPesqAux := sDesPesq; sEmpPesqAux := sEmpPesq; ShowModal; end;
Eu consigo efetuar a pesquisa normalmente so que no grid nao exibe os dados
Se algum tiver entendo o que to precisando fazer, eu agradeço :roll:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)