Fórum Duvida sobre tela de pesquisa geram c/ View? #299447

14/10/2005

0

Olá galera.


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:


create view ARQFORN_VIEW ( Empresa,Código,Razão_Social, Fantasia,CNPJ,Endereço,Cidade,UF,CEP,Desativado) with encryption as select V0,V1, V2, NF,V7,V3,V4,V5,V6,CDESA from ARQFORN GO


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

Macario

Responder

Posts

14/10/2005

Michael

Olá!

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


Responder

Gostei + 0

14/10/2005

Macario

Olá Michael, boa tarde.

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.


Responder

Gostei + 0

17/10/2005

Macario

Então pessoal, eu continuo com o problema.

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:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar