Incluir conforme falta/existe
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Incluir conforme falta/existe
Já vi que é possível, mas ainda pensando....
Tenho lá
Licencas: IdLicenca
Categorias: IdCategoria
LicMix: é a lista de licenças pra cada categoria IdLicMix, LicMixCategoria, LicMixLicenca
Patrimonio: IdPatrimonio, PatriCategoria
PatDetalhe: é a lista REAL de licenças, contendo: IdPatDetalhe, PatDetLicenca, PatDetPatrimonio
Até aí, tudo bem, tudo ok.
O quebra cabeças vai ser, por exemplo:
Ao incluir uma licença para uma categoria, cadastrar automaticamente em todos os itens do patrimonio que ainda não tem isso (não deveria ter, mas vai que tem)
E como deixei flexível... fazer isso a partir das licenças ou do patrimônio, na inclusão e exclusão.
Vai ficar interessante, e é uma boa demonstração do que o SQL tem que o DBF não tem.
Tenho lá
Licencas: IdLicenca
Categorias: IdCategoria
LicMix: é a lista de licenças pra cada categoria IdLicMix, LicMixCategoria, LicMixLicenca
Patrimonio: IdPatrimonio, PatriCategoria
PatDetalhe: é a lista REAL de licenças, contendo: IdPatDetalhe, PatDetLicenca, PatDetPatrimonio
Até aí, tudo bem, tudo ok.
O quebra cabeças vai ser, por exemplo:
Ao incluir uma licença para uma categoria, cadastrar automaticamente em todos os itens do patrimonio que ainda não tem isso (não deveria ter, mas vai que tem)
E como deixei flexível... fazer isso a partir das licenças ou do patrimônio, na inclusão e exclusão.
Vai ficar interessante, e é uma boa demonstração do que o SQL tem que o DBF não tem.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Incluir conforme falta/existe
tá difícil achar o erro:
Todos os campos são únicos não precisam identificação
CADA select vai retornar um resultado, não precisa de alias individual, mas precisa pro resultado
à primeira vista, tudo certo.
Código: Selecionar todos
SELECT *
FROM
(
( SELECT idpatrimonio
FROM jppatrimonio WHERE patricategoria = 12 ) AS gravar
LEFT JOIN
( SELECT patdetpatrimonio
FROM jppatdetalhe
LEFT JOIN jppatrimonio ON idpatrimonio = patdetpatrimonio
WHERE patricategoria = 12
AND patdetlicenca = 25
) AS jatem
ON jatem.patdetpatrimonio = gravar.idpatrimonio
WHERE jatem.patdetpatrimonio IS NULL
) AS falta
CADA select vai retornar um resultado, não precisa de alias individual, mas precisa pro resultado
à primeira vista, tudo certo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Incluir conforme falta/existe
por parte, durante post:
isso retornou 25.
usando alias, então tenho gravar.idpatrimonio = 25 no primeiro select
Código: Selecionar todos
SELECT idpatrimonio FROM jppatrimonio WHERE patricategoria = 12
usando alias, então tenho gravar.idpatrimonio = 25 no primeiro select
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Incluir conforme falta/existe
No segundo select:
retornou vazio.
então tenho jpatem.patdetpatrimonio mas vazio
Código: Selecionar todos
SELECT patdetpatrimonio
FROM jppatdetalhe
LEFT JOIN jppatrimonio ON idpatrimonio = patdetpatrimonio
WHERE patricategoria = 12
AND patdetlicenca = 25
então tenho jpatem.patdetpatrimonio mas vazio
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Incluir conforme falta/existe
por partes
isso retornou idpatrimonio e patdetpatrimonio
ainda não é isso que eu quero, mas é o que vou precisar.
retornou dois campos:
idpatrimonio e patdetpatrimonio
significa que o * não se trata de todos da "área atual", mas sim de tudo mesmo.
Código: Selecionar todos
SELECT * From
( SELECT idpatrimonio
FROM jppatrimonio WHERE patricategoria = 12 ) AS gravar
LEFT JOIN
( SELECT patdetpatrimonio
FROM jppatdetalhe
LEFT JOIN jppatrimonio ON idpatrimonio = patdetpatrimonio
WHERE patricategoria = 12
AND patdetlicenca = 25
) AS jatem
ON jatem.patdetpatrimonio = gravar.idpatrimonio
WHERE jatem.patdetpatrimonio IS NULL
ainda não é isso que eu quero, mas é o que vou precisar.
retornou dois campos:
idpatrimonio e patdetpatrimonio
significa que o * não se trata de todos da "área atual", mas sim de tudo mesmo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Incluir conforme falta/existe
quase lá....
peguei todos os patrimonios categoria 12, vinculados as licencas cadastradas de código 25, trazendo o que não tinha essa licença
o select vai me retornar a lista de patrimônios, já com o código de licença 25.
Acho que é isso, agora é só acrescentar o INSERT.
Código: Selecionar todos
SELECT idpatrimonio, 25 From
( SELECT idpatrimonio
FROM jppatrimonio WHERE patricategoria = 12 ) AS gravar
LEFT JOIN
( SELECT patdetpatrimonio
FROM jppatdetalhe
LEFT JOIN jppatrimonio ON idpatrimonio = patdetpatrimonio
WHERE patricategoria = 12
AND patdetlicenca = 25
) AS jatem
ON jatem.patdetpatrimonio = gravar.idpatrimonio
WHERE jatem.patdetpatrimonio IS NULL
o select vai me retornar a lista de patrimônios, já com o código de licença 25.
Acho que é isso, agora é só acrescentar o INSERT.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Incluir conforme falta/existe
Só surge uma dúvida:
E se o resultado for vazio?
dá erro no insert?
E se o resultado for vazio?
dá erro no insert?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Incluir conforme falta/existe
O barato é doido.
Ainda estou testando.
Qual a situação: inclusão/alteração do cadastro do patrimônio.
Pode ser alterada a categoria.
Outra categoria outras licenças, então tem licença a ser mantida, licença pra apagar e licença a incluir nesse patrimônio.
Aí não tem jeito, precisou de dois comandos.
Comando grande?
Considerando que a única referência usada é a Id do patrimônio...
Antes isso tudo era um campo "linguição" em duas tabelas.
Imagine quanto fonte Harbour ia precisar pra analisar isso tudo, pra inclusão e exclusão.
Ainda estou testando.
Código: Selecionar todos
:ExecuteCmd( "DELETE" + ;
" FROM JPPATDETALHE" + ;
" WHERE PATDETPATRIMONIO = " + NumberSQL( nIdPatrimonio ) + ;
" AND PATDETLICENCA NOT IN" + ;
" ( SELECT LICMIXLICENCA FROM JPTABLICMIX WHERE LICMIXCATEGORIA = " + ;
" ( SELECT PATRICATEGORIA FROM JPPATRIMONIO WHERE IDPATRIMONIO = " + ;
NumberSQL( nIdPatrimonio ) + " ) )" )
:ExecuteCmd( "INSERT" + ;
" INTO JPPATDETALHE ( PATDETPATRIMONIO, PATDETLICENCA )" + ;
" SELECT " + NumberSQL( nIdPatrimonio ) + ", LICMIXLICENCA" + ;
" FROM JPTABLICMIX WHERE LICMIXCATEGORIA = " + ;
" ( SELECT PATRICATEGORIA FROM JPPATRIMONIO WHERE IDPATRIMONIO = " + ;
NumberSQL( nIdPatrimonio ) + " ) AND " + ;
" NOT LICMIXLICENCA IN " + ;
" ( SELECT PATDETLICENCA FROM JPPATDETALHE WHERE PATDETPATRIMONIO + " + ;
NumberSQL( nIdPatrimonio ) + ")"
Pode ser alterada a categoria.
Outra categoria outras licenças, então tem licença a ser mantida, licença pra apagar e licença a incluir nesse patrimônio.
Aí não tem jeito, precisou de dois comandos.
Comando grande?
Considerando que a única referência usada é a Id do patrimônio...
Antes isso tudo era um campo "linguição" em duas tabelas.
Imagine quanto fonte Harbour ia precisar pra analisar isso tudo, pra inclusão e exclusão.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/