Duvida sobre tela de pesquisa geram c/ View?
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:
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?
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
Curtidas 0
Respostas
Michael
14/10/2005
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
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
Macario
14/10/2005
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
[b:94c6e9c8ab]TFrmPesqSQL.Pesquisar[/b:94c6e9c8ab]
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.
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
Macario
14/10/2005
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
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:
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