Fórum Como deletar 3 tabelas de uma so vez? #285142
17/06/2005
0
Alguem pode me dar uma ideia como faço para deletar esses arquivos?
Eh o seguinte: Criei 3 tabelas (paradox) 1ª faço lancamento de sequencia, a 2ª para acumular valores e a 3ª para acumular valores tambem, tenho 3 dbgrids para table1, table2 e table3.
Na hora de gravar o lançamento fiz um locate na table2 e na table3 para verificar os lançamentos.
na table 2 fiz assim:
if not table2.LOCATE(´cnpj´,edit1.TEXT,[]) then
begin
table2.append;
o que significa que se nessa tabela nao encontrar o cnpj ja cadastrado vai cadastrar um novo, caso contrario acumula os valores $ na cnpj ja cadastrada.
no table3 fiz assim:
if not table3.LOCATE(´CF´,edit3.TEXT,[]) then
begin
table4.append;
o que significa que se nessa tabela nao encontrar a CF (classificacao fiscal) ja cadastrado vai cadastrar um novo CF, caso contrario acumula os valores $ na CF ja cadastrada tambem.
Bom ate ai tudo blz, certinho, o problema eh se eu precisar excluir? como fazer? se eu selecionar na dbgrid do table1 que eh a sequencia vai deletar o table2 e o table3 errado do que fiz e o pior a soma das duas tables vai ficar errada. sera que tem algum jeito de fazer essa exclusao?
Alguem pode me ajudar?
Desde ja agradeço!
Obrigado ... Adriano.
Adriano_servitec
Curtir tópico
+ 0Posts
18/06/2005
Aroldo Zanela
Por favor, coloque um fragmento maior do código, bem como, reavalie este trecho:
no table3 fiz assim: if not table3.LOCATE(´CF´,edit3.TEXT,[]) then begin table4.append;
Pois você localiza na Table3 e adiciona na Table4.
Gostei + 0
19/06/2005
Marco Salles
Bem , pelo que eu pude entender , voce que ao selecionar um Cnpj na tabela Table1 , voce que excluir este mesmo Cnpj na table2 e consequentemente excluir o Cpf Na tabela 3...
É Isto :?: :?: :?:
se for isto , Acho que a melhor maneira de fazer isto é trabalha com mestre detalhe.....Onde os campos cnpj e cpf fa tabela1 serão os mestres e os respctivos campos da cnpj e cpf das tabelas 2 e 3 correspondentes serão os detalhes (digamos assim)...
A Vantagem disso é que toda vez que no seu grid voce selecionar um cnpj e um cpf da sua tabela1 , ´automaticamente´ os registros da tabela2 será aponta para aquele cnpj e os registros da tabela 3 sera apontado para aquele cpf...
É isto que eu entendi é isto que eu sugiro
Gostei + 0
20/06/2005
Adriano_servitec
Ola Marco eh o seguinte o campo cpf eh CF (classificacao fiscal), como vc disse esta correto.
Quero excluir o cnpj na table2 e na table3
Criei 3 tabelas no database desktop
coloquei na table2 e table3 que acumula os valors o cnpj como index e nao usei o asterisco para cirar chave primaria pq nao quero que apareçao o KEY VIOLATION, pq preciso que acumule os valores para somar, fiz o index para usar o mastersource e o masterfields para apontar no datasource1 que eh do table1
na table2 funcionou direitinho, mais na table3 aparece o seguinte erro CANNOT ACCESS INDEX FIELD CNPJ
Acho que agora expliquei melhor
Desde ja agradeço pela ajuda
Obridado.
Gostei + 0
20/06/2005
Marco Salles
Aculular cnpj e CF para somar :?: :?: :?: Nun entendi :cry: :cry:
Gostei + 0
20/06/2005
Adriano_servitec
Criei um index no database desktop das table2 e tabel3, tambem criei uma chave primaria no cnpj * depois fazer um index do CNPJ no secoundary Index, para ligar no datasource1 da table1 dentro do form.
Fiz dessa forma salvei os index assim idxcnpj do table2 e idxcnpj2 do table3, liguei as dias tables na table1, mais nao obtive resultado.
Vou ser um pouco mais claro como fica os dbgrid no form
exemplo do lancamento
cnpj 77089000234
cf 1
valor $ 500,00
ipi $ 50,00
no dbgrid1 ele aparece assim no dbgrid2 tambem e no dbgrid3 tambem ai faço um novo lançamento
cnpj 77089000234
cf 2
valor $ 150,00
ipi $ 15,00
no dbgrid 1 vai criar uma nova linha com os dados do lancamento, do dbgrid2 ele vai acumular pq o cnpj eh o mesmo entao no dbgrid2 fica assim:
cnpj 77089000234
nao tem CF pq na tabela 2 nao precisa
valor $650,00 pq tinha $500,00 + $150,00 que inclui
ipi $ 65,00 tambem o mesmo de cima.
e na dbgrid3 vai incluir uma nova linha pq o CF aonde o locate faz a consulta nao eh o mesmo que o primeiro lançamento, se nao faz igual ao dbgrid2, e no dbgrid2 se o cnpj nao for igual ele inclui uma nova linha para o lançamento, o trabalho do locate nassas dias tabelas eh verificar se ja esta cadastrado para acumular os valores se nao estiver incluir uma nova linha. Isso tudo esta dentro de um form. para verificar os lançamentos.
Agora se eu tiver que alterar/excluir algum lançamento nao sei como faço no table2 e no table3, pq ja esta acumulado a soma dos valores.
Nao sei se vc entendeu minha duvida.
Mas espero que possa me ajudar
Desde ja agradeço
Obrigado
Adriano...
Gostei + 0
20/06/2005
Adriano_servitec
Coloquei nos 3 tables um autoincremento para ver se seria possivel excluir por codigo, nao funcionou pq fiz 4 lançamentos na table1 ficou assim
sequencia cnpj..................CF...valor
000000001 00658414000147 01....500,00
000000002 00658411000147 02....500,00
000000003 00562518000120 02....100,00
000000004 30658478000188 02....200,00
na table2 ficou assim: Obs nessa table nao precisa do CF
sequencia cnpj.....................valor
000000001 00658414000147....1000,00 //somou os valores pq a cnpj eh a mesma
000000002 00562518000120.....100,00
000000003 30658478000188.....200,00
na table3 ficou assim: Obs nessa table nao precisao do CNPJ
a table2 ficou assim:
sequencia CF...valor
000000001 01....500,00
000000002 02....800,00 //somou os valores pq a CF 02 tem tes itens incluidos
Se eu tentar excluir por sequencia observe que nao bate as sequencias, se colocar o CNPJ na table3 e tentar excluir por CNPJ nao vai excluir certo pq na table3 o locate esta para procurar somente por CF ai ele apaga a ultimo cnpj cadastrado nessa table e inclui o que acabei de lançar, pro valores tambem nao da pois pode existir valores repitidos, bom enfim pelo que vi nao tem jeito de fazer alteraçao/exclusao nessas tables 2 e 3.
Entao queria saber se somente uma table ou query tem como fazer tudo isso para aparecer na dbgrid, ela pode ser a primeira table1 mais na dbgrid2 essa table1/query faz a soma conforme o CNPJ e na dbgrid3 a mesma table1/query faz as somas conforme a CF.
Acho que usando o SQL da para fazer (o problema eh que nao sei usar essa linguagem SQL), pois o que preciso eh somente aparecer os dados certos nas dbgrids, depois para fazer o relatorio faço o mesmo esquema como esta nas dbgrids.
Desde ja agradeço a ajuda e colaboraçao!
Obrigado
Adriano...
Gostei + 0
20/06/2005
Marco Salles
Eu acho que a pregunta poderia ser outra
Então queria saber se somente com uma tabela tem como aparecer tudo isso ai nos tres Grids
Então .. Porque não uma so tabela :?: :?: :?:
Sim a idéia é usar o agrupamento.. Agrupamento por cnpj e agrupamento por CF na sua pesquisa
seria isto mesmo :?: :?: :?: Ou ainda não entendi
Gostei + 0
20/06/2005
Adriano_servitec
me parece ser group By no SQL nao eh, o problema eh eu saber como fazer isso amigo, sera que eh assim?
select * from tbipi
group by cnpj //para grid2
e select * from tbipi
group by cf // para a grid3
dai como fica as somas? antes estava assim no botao gravar
procedure TForm2.BitBtn2Click(Sender: TObject);
VAR
proxNum: integer;
begin
if application.messagebox(´Deseja gravar este lançamento?´,´Gravar´,36)=idyes
then
begin
table1.edit;
table1cf.value:=edit3.text;
table1codigo.value:=table3cfnum.value;
table1.Post;
bitbtn1.setfocus;
if not table2.LOCATE(´cnpj´,edit1.TEXT,[]) then //se nao achar o cnpj no grid2
begin
TABLE2.REFRESH;
table2.Last;
ProxNum:= table2.fieldbyName(´SEQUENCIA´).AsInteger +1;
table2.append;
table2.edit;
table2cnpj.value:=table1cnpj.value;
table2valor.value:=table1valor.value;
table2ipi.value:=table1ipi.value;
table2.post;
query1.refresh;
query2.refresh;
query3.refresh;
BITBTN1.SETFOCUS;
end else
begin
TABLE2.REFRESH;
table2.Last;
ProxNum:= table2.fieldbyName(´SEQUENCIA´).AsInteger +1;
table2.edit;
table2cnpj.value:=table1cnpj.value;
table2valor.value:=table2valor.value+table1valor.value; // aqui faz as somas
table2ipi.value:=table2ipi.value+table1ipi.value; //aqui faz as somas
table2.post;
query1.refresh;
query2.refresh;
query3.refresh;
BITBTN1.SETFOCUS;
end;
if not table4.LOCATE(´CF´,edit3.TEXT,[]) then //se nao achar o CF no grid3
begin
TABLE4.REFRESH;
table4.Last;
ProxNum:= table4.fieldbyName(´SEQUENCIA´).AsInteger +1;
table4.append;
table4.edit;
table4cF.value:=table3cF.value;
table4cnpj.value:=table1cnpj.value;
table4CODFISCAL.value:=table3CFNUM.value;
table4DESCRICAO.value:=table3DESCR.value;
TABLE4VALOR.VALUE:=TABLE1VALOR.VALUE;
TABLE4IPI.VALUE:=TABLE1IPI.VALUE;
table4.post;
BITBTN1.SETFOCUS;
end else
begin
TABLE4.REFRESH;
table4.Last;
ProxNum:= table4.fieldbyName(´SEQUENCIA´).AsInteger +1;
table4.edit;
table4cF.value:=table3cF.value;
table4cnpj.value:=table1cnpj.value;
table4CODFISCAL.value:=table3CFNUM.value;
table4DESCRICAO.value:=table3DESCR.value;
table4valor.value:=table4valor.value+table1valor.value; //aqui faz a soma
table4ipi.value:=table4ipi.value+table1ipi.value; // aqui faz a soma
table4.post;
BITBTN1.SETFOCUS;
end;
end ELSE;
TABLE1.CANCEL;
TABLE2.CANCEL;
TABLE4.CANCEL;
END;
Gostei + 0
20/06/2005
Marco Salles
Ha alguma outra razão para voce insisitir em ter tres tabelas , aparentemente iguais :?: :?: :?:
Gostei + 0
20/06/2005
Adriano_servitec
fiz assim mais da erro
select * from saida2.db
group by cnpj
assim: when group by exists every simple field in projectors must be in group by
Acho que errei deve ter algo mais para incluir,como disse nao sei usar query SQL, mais a questao do usar so uma table acho ate melhor.
Valeu pela atençao amigo
Gostei + 0
20/06/2005
Marco Salles
Tente fazer assim
Para a Consulta 2 ... Um DbGrid uma query e um DataSorce
select NomeDoCampoCnpj , Sum(Valor) from tabVen Group By NomeDoCampoCnpj
Para a consulta 3... Outro DbGrid , Outra Query e Outro Datasource
Ja que voce quer todos ao mesmo tempo
select NomeDoCampoCF, Sum(Valor) from tabVen Group By NomeDoCampoCF
Coloque essas instruçoes no Sql da Respectivas Query e faca um Active =True a nivel de projeto para ver se é isto mesmo que voce quer
Boa sorte ????
Gostei + 0
20/06/2005
Adriano_servitec
Falta so um negocinho fiz assim pois preciso no grid somar a coluna valor e a coluna ipi separado e esta somando junto
select cf, sum (valor) + (ipi) from tbclasaida
group by cf
e no grid esta aparecendo a soma dos 2, tem como fazer separado?
Obrigado pela ajuda amigo
Gostei + 0
20/06/2005
Marco Salles
Tente isso o
select cf, sum (valor+ipi) As NomeQualque, Sum(Valor) As NomeQualquer from tbclasaida group by cf
P:S o nome qualquer é o nome que voce deseja que apareça na barra de títulos do Grid
Gostei + 0
21/06/2005
Adriano_servitec
Agora sim esta perfeito, resumindo com uma tabela so da pra fazer os tres serviços usando o group by (nao sabia que era tao poderoso essa linguagem SQL), vou me aprofundar mais nela, me parece que da pra fazer muitas coisas para melhorar o sistema.
Valeu
T+
Adriano...
Gostei + 0
21/06/2005
Marco Salles
Fico feliz por ter conseguido
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)