• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

30 mensagens neste tópico

Olá, tenho uma base de dados e quando quero importar novos dados, importo para uma tabela para comparar os dados dessa tabela nova com os dados existentes na base de dados. O que eu queria agora era uma maneira para ela me avisar que por exemplo, se um dos campos tiver o valor avariado e o da tabela nova disser instalado, ou se na base de dados disser recolhido e na tabela nova disser novo, ele dar-me um erro. Será possível?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

primeiro que base de dados utilizas??

segundo... o que é um valor avariado???

ou isso sao valores??? "avariado" "novo" "recolhido"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Peço desculpa por não ter especificado, a base de dados que uso é o access, os valores avariado, novo e recolhido são atributos de um campo, a tabela tem os seguintes campos:

Serial, Cliente, Estado e Data

Esses atributos estão associados ao campo Estado.

EDIT:

Mais ou menos o pretendido seria algo do género uma query que me mostra todos os campos que tenho no ficheiro que vou importar e apenas os campos que existem em ambas as tabelas. Seguindo o Serial. Isto já está implementado e a funcionar agora o pretendido seria adicionar um campo a essa querry que me dissesse algo segundo aquelas condições anteriores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tao na tabela temporaria que fazes metes mais um campo e quando fazes o select fazes um case

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

algo do género

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

isto mostra-me a tabela toda que importei (temporaria) e os respectivos registos que estão na tabela da base de dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data, case .... as nomeDoCampo

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estou a entender muito bem a sintaxe, visto que provavelmente ainda vou precisar de vários Cases.

Serial algo assim deste género mas dá-me erro

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

Aviso = CASE DecoEstado.Serial

WHEN DecoEstado.Serial = Instalado AND Compara.Estado <> Instalado OR Compara.Estado <> Recolha THEN 'Erro'

WHEN DecoEstado.Serial = Recolha AND Compara.Estado <> Recolha OR Compara.Estado <> Novo THEN 'Erro'

WHEN DecoEstado.Serial = Novo AND Compara.Estado <> Novo OR Compara.Estado <> Instalado OR Compara.Estado <> AvariaArmazem THEN 'Erro'

ELSE ''

END,

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Diz-me que falta um operador na expressão.

Aviso = CASE DecoEstado.Serial

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Serial

WHEN DecoEstado.Serial = Instalado AND Compara.Estado <> Instalado OR Compara.Estado <> Recolha THEN 'Erro'

WHEN DecoEstado.Serial = Recolha AND Compara.Estado <> Recolha OR Compara.Estado <> Novo THEN 'Erro'

WHEN DecoEstado.Serial = Novo AND Compara.Estado <> Novo OR Compara.Estado <> Instalado OR Compara.Estado <> AvariaArmazem THEN 'Erro'

ELSE ''

END) as Aviso,

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pera que agora e qe li melhor

tu queres mudar a serial tambem ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ups, enganei-me ai, era para ser Estado em vez de Serial. Mas continua a dar o mesmo erro.

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Estado

WHEN DecoEstado.Estado = Instalado AND Compara.Estado <> Instalado OR Compara.Estado <> Recolha THEN 'Erro'

WHEN DecoEstado.Estado = Recolha AND Compara.Estado <> Recolha OR Compara.Estado <> Novo THEN 'Erro'

WHEN DecoEstado.Estado = Novo AND Compara.Estado <> Novo OR Compara.Estado <> Instalado OR Compara.Estado <> AvariaArmazem THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Continuo a ter o mesmo erro do missing operator

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Estado

WHEN DecoEstado.Estado Like 'Instalado' AND Compara.Estado <>' Instalado' OR Compara.Estado <> 'Recolha' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Recolha' AND Compara.Estado <> 'Recolha' OR Compara.Estado <> 'Novo' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Novo' AND Compara.Estado <> 'Novo' OR Compara.Estado <> 'Instalado' OR Compara.Estado <> 'AvariaArmazem' THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

erroyt2.jpg

Obrigado pela ajuda que me tens dado, desculpa lá o incomodo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Estado

WHEN DecoEstado.Estado Like 'Instalado' AND Compara.Estado NOT LIKE 'Instalado' OR Compara.Estado NOT LIKE  'Recolha' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Recolha' AND Compara.Estado NOT LIKE  'Recolha' OR Compara.Estado NOT LIKE  'Novo' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Novo' AND Compara.Estado NOT LIKE 'Novo' OR Compara.Estado NOT LIKE  'Instalado' OR Compara.Estado NOT LIKE  'AvariaArmazem' THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

continua a dar o tal erro, ele sublinha o (CASE DecoEstado.Estado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é uma tabela, mas eu não tenho de por Tabela.Campo? ou tenho de por Campo FROM Tabela?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tens é uns nomes esquesitos nas tabelas ....

bem eu nao sei, tira as ()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja tinha esperimentado tirar os parentesis, não faço a minima ideia como fazer isto lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenta assim

se nao der n te sei como ajudar... ao menos que de outro erro...

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE

WHEN DecoEstado.Estado Like 'Instalado' AND Compara.Estado NOT LIKE 'Instalado' OR Compara.Estado NOT LIKE  'Recolha' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Recolha' AND Compara.Estado NOT LIKE  'Recolha' OR Compara.Estado NOT LIKE  'Novo' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Novo' AND Compara.Estado NOT LIKE 'Novo' OR Compara.Estado NOT LIKE  'Instalado' OR Compara.Estado NOT LIKE  'AvariaArmazem' THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

continua a dar o mesmo erro e sublinha-se o WHEN agora lol tá bonito isto tá

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

faz tudo outra vez... mas uma coisa de cada vez ... começa a fazer coisas simples por exemplo so com uma tabela

select * , (case when estado like 'instalado' then 'kkcoisa' else 'outra coisa' end ) as aviso from DecoEstado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora