Fórum Um erro de projeto e agora o que eu faço? [Where e Order By] #46256

25/08/2004

0

Amigos,

Em um projeto, relativamente, antigo, cometi um erro de projeto porque não imaginei a situação pela qual estou passando agora...
Tabelas :
[Produtos]
IDPRODUTO 
DESCPRODUTO
....

[EstoqueProdutos]
...
IDPRODUTO (FK referenciando Produtos)
...

O problema : Para a consulta de estoque faço um Join entre EstoqueProdutos e Produtos para ler a Descrição, Unidade, etc... Acontece que meu erro foi que as duas colunas tem o mesmo nome, e estava tentando incorporar a este projeto um Filtro Interativo que já tenho usado nos projetos mais novos, em que o usuário escolhe os campos para filtragem (Where) e apresentação (Order By)... neste filtro pego o nome da coluna através do TField e ele não referencia como P.IDPRODUTO ou EP.IDPRODUTO... o resultado é um erro de ´Ambigous column name...´
Fiz uma ´gambiarra´ de que se a coluna seleciona pelo usuário for IDPRODUTO ele acrescenta o EP. antes no nome da coluna, mas achei isso pouco profissional...
A solução mais correta, com certeza, seria corrigir o projeto, e também, teoricamente a mais simples, mas é quase inviável tendo em vista o tamanho do projeto e todos os demais relacionamentos envolvidos deste ponto em diante...

Vcs tem alguma idéia de como resolver isso sem a gambiarra? Algo como conseguir saber, através do TField, de qual tabela está vindo a coluna?

Desde já agradeço.

[]´s
Vinicius.


Vinicius2k

Vinicius2k

Responder

Posts

25/08/2004

Afarias

Usando uma VIEW no lugar de uma das tabelas ou do JOIN




T+


Responder

Gostei + 0

25/08/2004

Vinicius2k

:shock:
Putz... pq quando a gente mais precisa é tão difícil ver uma solução simples? Já estava ´queimando a mufa´ imaginando como resolver isso, e como de praxe, procurando o caminho mais difícil...

Valeu afarias :wink:
T+


Responder

Gostei + 0

25/08/2004

Afarias

hehehehe...!


:D


Responder

Gostei + 0

25/08/2004

Ipc$

Aproveitando o gancho da duplicidade de nomes, gostaria de saber o seguinte:
No meu caso, sempre crio tabelas c/ um identificador na frente, ex:
C01_Tabela e seus campos c/ C01_Campo1..C01_Campox. Assim nunca os nomes dos campos coincidem. Isso é uma mania minha vinda de outras linguagens, só que raramente vejo projetos com essa estrutura na criação de nomes de tabelas e campos.
Alguém já viu um tipo de estrutura dessas?


Responder

Gostei + 0

25/08/2004

Vinicius2k

Dessa forma eu ainda não tinha visto...
Eu já vi assim :
As tabelas não tinham nomes que identificassem e as colunas também não... porém o nomes das colunas identificavam o tipo de dado Exemplo :
Tabela : TB001
Colunas : TB001[color=red:36cfcd5c5e]C[/color:36cfcd5c5e]001, TB001[color=red:36cfcd5c5e]C[/color:36cfcd5c5e]002, TB001[color=red:36cfcd5c5e]D[/color:36cfcd5c5e]001, TB001[color=red:36cfcd5c5e]N[/color:36cfcd5c5e]001
Onde C-> Character, D-> Date, N-> Numeric
Era uma aplicação desenvolvida em Clipper... e o pior é que, na época, eu tive de desenvolver uma interface de comunicação dessa aplicação com uma minha... foi dureza descobrir o que realmente estava amazenado em cada coluna...

Eu procuro identificar bem o nome das tabelas e das colunas com o dados armazenados, mesmo que isso torne um pouco mais trabalhoso, em termos de digitação, quando vai se trabalhar diretamente com seus nomes... Na minha época de Clipper eu achava o caos ter que ´expremer´ um nome em 8 ou 10 posições... ficam umas siglas quase incompreensíveis depois de passado algum tempo do projeto pronto...

Outra coisa que eu faço, e essa talvez alguns achem que é coisa de doido, mas eu identifico bem na aplicação também... por exemplo o TEdit que recebe o código do produto chama-se edt_CodigoProduto, e até o label na frente dele que diz ´Código...:´ chama-se lbl_CodigoProduto...
Tenho verdadeiro horror aos ´Label1,Label2,Edit1,Edit2...EditN´...

Meu erro neste caso é que passei batido no que eu costumo fazer que é identificar com um ´FK´ as chaves estrangeiras...
Na minha tabela EstoqueProdutos o campo de ID do produto deveria estar FK_IDProduto... e eu não tinha notado o erro até agora...

T+


Responder

Gostei + 0

25/08/2004

Ipc$

Esse C01_Tabela é só um exemplo. Na realidade é assim:
C01_Clientes - Tabela de Clientes, e seus campos:
C01_CdEmp
C01_CdFilial
C01_CdCliente
C01_Nome
Desse jeito nunca coincidirá um campo Nome do cliente c/ Nome da empresa pq um é C01_Nome e o outro é C00_Nome.


Responder

Gostei + 0

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

Aceitar