Fórum Como deletar 3 tabelas de uma so vez? #285142

17/06/2005

0

Ola amigos,

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

Adriano_servitec

Responder

Posts

18/06/2005

Aroldo Zanela

Colega,

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.


Responder

Gostei + 0

19/06/2005

Marco Salles

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?


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


Responder

Gostei + 0

20/06/2005

Adriano_servitec

Ola amigo Aroldo desculpe nao ter colocado o codigo inteiro foi mal.

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.


Responder

Gostei + 0

20/06/2005

Marco Salles

Desulpe , mas não to entendendo o que voce quer com

preciso que acumule os valores para somar


Aculular cnpj e CF para somar :?: :?: :?: Nun entendi :cry: :cry:


Responder

Gostei + 0

20/06/2005

Adriano_servitec

Ola Marco, vamo la entao

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...


Responder

Gostei + 0

20/06/2005

Adriano_servitec

Ola amigos, to quebrando a cabeça com essas 3 tables e nao chego a nenhuma conclusao como fazer para alterar ou excluir os lançamentos.

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...


Responder

Gostei + 0

20/06/2005

Marco Salles

Entao queria saber se somente uma table ou query tem como fazer tudo isso para aparecer na dbgrid,


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

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.


Então .. Porque não uma so tabela :?: :?: :?:

Acho que usando o SQL da para fazer


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


Responder

Gostei + 0

20/06/2005

Adriano_servitec

Ae Marco acho que eh isso mesmo agrupamento
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;


Responder

Gostei + 0

20/06/2005

Marco Salles

Mas porque que voce precisa de tres tabelas... se com o goup by voe consegue selecionar a pesquisa :?: :?: :?:

Ha alguma outra razão para voce insisitir em ter tres tabelas , aparentemente iguais :?: :?: :?:


Responder

Gostei + 0

20/06/2005

Adriano_servitec

Nao amigo, nao eh que eu quero usar 3 tabelas pode ser umas so, mais o problema que nao sei usar esse group by

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


Responder

Gostei + 0

20/06/2005

Marco Salles

pode ser umas so, mais o problema que nao sei usar esse group by


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


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 ????


Responder

Gostei + 0

20/06/2005

Adriano_servitec

Amigo desculpe ti encomodar novamente, mais to quase chegando la

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


Responder

Gostei + 0

20/06/2005

Marco Salles

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


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


Responder

Gostei + 0

21/06/2005

Adriano_servitec

Obrigado amigo Marco Salles, tua ajuda foi de grande valor.


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...


Responder

Gostei + 0

21/06/2005

Marco Salles

O interressante de tudo , foi que o tópico original era a exclusão de tres tabelas.. E se transformou numa simples mas poderosa pesquisa Sql

Fico feliz por ter conseguido


Responder

Gostei + 0

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

Aceitar