Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
bom dia, tenho uma dúvida relacionada a deletar arquivos e registros no BD access em um sistema de galeria de fotos, nesse sistema notei que ao apagar uma galeria de fotos que está na tabela "galerias" os registros das fotos desta galeria que ficam em uma outra tabela deste mesmo BD, "fotos" não são apagados, gerando assim um acúmulo de informações desnecessárias, gostaria de saber se tem como desenvolver um form que mostre somente os registros da tabela "fotos" que o campo ID_GALERIA não tenha um equivalente na tabela "galerias", ou seja somente as fotos orfãns para que eu possa deletar esses registros e também as fotos que estão ocupando espaço desnecessário.
aguardo respostas....
MarVinOliveiraS
use um:
select * from *fotos(tabela que estão as fotos/registros lixo)* where **not exists**(select * from *fotos(onde estão as fotos boas)* where **"campos ID das fotos nas duas tabelas"**)
Quando localizar todoas as fotos troque o primeiro select por um Delete from...
Se estiver usando o SQL SERVER utilize a clausula Begin Tran na hora de deletar, apos executar o comando verifique se esta ok se estiver basta dar o comando Commit se estiver errado o rolback que volta todos os registros para tabela.
exemplo.l
begin tran
Delete from fotos
-- Se der o commit os registros são deletados
commit
-- Se der o Rolback os registros não são deletados
rolback
Lembrando que a tabela fica inacessivel para outro programa ou sessão de banco enquanto não for fechada a transação que ha esta utilizando.
Espero ter ajudado, qualquer coisa estamos ai.
Abraços
na verdade quero fazer com ASP, para poder integrar ao sistema de administração da galeria.
muito obrigado pela ajuda aguardo respostas....
MarVinOlivieraS,
É mesma coisa, para trazer isto para o ASP você tem que fazer o select na base de dados.!@
Depois é só fazer um Loop traz para tela com um combo box para cada registro e seleciona o que quer deletar.
Qualquer duvida posta ai.
é recomendado o uso do NOT EXISTS, no lugar do IN, por questões de perfromance
vocês ñ tem um exemplo de uma página com esse código?
A expressão abaixo retorna quais a linhas da TABELA1 não cadastradas na TABELA2 utilizando o NOT EXISTS
SELECT TABELA1.SERIAL_NUMBER
FROM #TABELA1 TABELA1
WHERE NOT EXISTS
(SELECT TABELA2.SERIAL_NUMBER
FROM #TABELA2 TABELA2
WHERE TABELA2.SERIAL_NUMBER = TRÁFEGO.SERIAL_NUMBER)
A expressão abaixo retorna quais a linhas da EMPRESA não cadastradas na TABELA_SOCIOS utilizando o NOT EXISTS
SELECT * FROM #EMPRESAS E
WHERE NOT EXISTS
(SELECT S.CD_EMPRESA
FROM #TABELA_SOCIOS S
WHERE E.CD_EMPRESA = S.CD_EMPRESA) AND E.SITUACAO = 'x'
EXISTS e NOT EXISTS é mais eficaz que o IN
desculpa amigo pela ignorancia
mais é que sou leigo,
tenho uma pasta chamada galeriadefotos
uma subpasta chamada config, onde vai ficar localizada a página listarfotos.asp
e outra subpasta chamada dados onde fica o database.mdb.
eu quero exibir os registros da tabela "fotos" que o campo "data" não está presente na tabela "galeria" em um campo com o mesmo nome "data". esse exemplo que você postou parece estar incompleto, falta a conexão com bd.
tem como você colocar já com essa parte do código também?
muito obrigado
use a mesma lógica das instruções SQL acima, a conexaun você deve usar a sua mesma, caso nao tenha siga esta, apenas altere o caminho do seu banco.no caso o arquivo mdb esta dentro de wwwroot/db/database.mdb
constring="provider=microsoft.JET.OLEDB.4.0;Data Source=" & Server.MapPath("db/database.mdb")
Set conexao=Server.CreateObject("ADODB.Connection")
conexao.open constring
o erro q apareceu:
Tipo de erro:
Erro de compilação do Microsoft VBScript (0x800A03FD)
'Case' esperado
/passaros2/galeriadefotos/config/listarfotos2.asp, line 4, column 7
SELECT FOTOS.DATA
------^
o código que coloquei foi assim?
<% constring="provider=microsoft.JET.OLEDB.4.0;Data Source=" & Server.MapPath("../dados/database.mdb")
Set conexao=Server.CreateObject("ADODB.Connection")
conexao.open constring
SELECT FOTOS.DATA
FROM #FOTOS FOTOS
WHERE NOT EXISTS
(SELECT GALERIA.DATA
FROM #GALERIA GALERIA
WHERE GALERIA.DATA = DATA.DATA)
%>
naun, assim, dá erro mesmo, pois a instrucao SQL naun resta sendo executada, o ASP entende o SELECT,
como um SELECT CASE...
deve fazer assim:
constring="provider=microsoft.JET.OLEDB.4.0;Data Source=" & Server.MapPath("db/quaddra.mdb")
Set conexao=Server.CreateObject("ADODB.Connection")
conexao.open constring
'crio o rs
set rs=Server.CreateObject("ADODB.Recordset")
'crio o SQL
SQL="entre aspas sua string SQL"
' aqui você executa o SQL,atraves do metodo open do objeto recordset
rs.open SQL,conexao,1,3
....
Mas sugiro que estude,analise um pouco mais o código, pois sendo muito leigo, terá varias dificuldades...
sim
selecione usando NOT IN
SELECT * FROM TABELA1 WHERE CAMPO1 NOT IN (SELECT CAMPO2 FROM TABELA2)
E os campos seriam justamente os que se relacionam