Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Problemas com indices em tabelas filhas


nicolasbraz

Pergunta

Tenho 1 formulario para cadastro de obras e os materiais que são lançados nessa obra precisam ficar em ordem de data no dbgrid, então criei uma index no banco de dados e usei o comando :

Dmdados.tblsaidaproduto.indexname:='saida_produto_data';

mas ele da o erro "Unknown error"

http://img194.imageshack.us/img194/1603/indexdatar.jpg

fazendo mais testes descobri que todos os indices que eu coloco dao erro, não sei se é pelo fato de ser uma tabela filha, mas todas as outras minhas tabelas usam indices sem problemas.

Uso firebird com a paleta InterBase.

Editado por nicolasbraz
Link para o comentário
Compartilhar em outros sites

23 respostass a esta questão

Posts Recomendados

  • 0
fazendo mais testes descobri que todos os indices que eu coloco dao erro, não sei se é pelo fato de ser uma tabela filha, mas todas as outras minhas tabelas usam indices sem problemas.

Tente assim

Dmdados.tblsaidaproduto.Clear;
   Dmdados.tblsaidaproduto.indexname:='saida_produto_data'; 
   Dmdados.tblsaidaproduto.IndexDefs.Update;

Se não funcionar, use relacionamento entre tabelas e filtre os registros na SQL

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Agora ele da o erro "Dataset not in edit or insert mode".
Dmdados.tblsaidaproduto.ClearFields;
Dmdados.tblsaidaproduto.Edit;  //ou insert
Dmdados.tblsaidaproduto.indexname:='saida_produto_data'; 
Dmdados.tblsaidaproduto.IndexDefs.Update;

Voce acha melhor filtrar por sql mesmo ?

Eu faria dessa maneira ... acho mais facil

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Dmdados.tblsaidaproduto.ClearFields;
Dmdados.tblsaidaproduto.Edit;  //ou insert
Dmdados.tblsaidaproduto.indexname:='saida_produto_data'; 
Dmdados.tblsaidaproduto.IndexDefs.Update;

Pensei nisso quando postei o erro, coloquei mas ele continua dando o mesmo erro.

Poderia me dar 1 exemplo de como voce filtraria esse codigo ?

Editado por nicolasbraz
Link para o comentário
Compartilhar em outros sites

  • 0
Pensei nisso quando postei coloquei mas ele continua dando o mesmo erro.
Se a tabela estiver fechada, continuara dando este erro

Poderia me dar 1 exemplo de como voce filtraria esse codigo ?

cadastro de obras e os materiais que são lançados nessa obra precisam ficar em ordem de data

São 2 tabelas ? como estão relacionadas ?

Link para o comentário
Compartilhar em outros sites

  • 0
Se a tabela estiver fechada, continuara dando este erro
o codigo do formulario no evento ONCREATE

procedure TFrmSaida.FormCreate(Sender: TObject);
begin
   dmdados.TblUsuario.Open;
   dmdados.tblsaidapai.Open;
   dmdados.TblsaidaProduto.Open;
   dmdados.Tblestoque.Open;
   dmdados.tblCliente.Open;
   dmdados.TblMaoDeObra.Open;
   dmdados.TblFornecedor.Open;
   dmdados.TblFuncionario.Open;
   dmdados.TblHorasExtras.Open;
   dmdados.TblAdicional.Open;

   dmDados.tblsaidapai.IndexName := 'saida_pai_nomeobra';
   dmdados.TblEstoque.IndexName:= 'est_estoque_nome';
   dmdados.TblFornecedor.IndexName:= 'for_fornecedor_nome';
   dmdados.TblFuncionario.IndexName:= 'func_funcionario_nome';

   
   Dmdados.tblsaidaproduto.ClearFields;
   Dmdados.tblsaidaproduto.Insert;  //ou insert
   Dmdados.tblsaidaproduto.indexname:='saida_produto_data';
   Dmdados.tblsaidaproduto.IndexDefs.Update;

cadastro de obras e os materiais que são lançados nessa obra precisam ficar em ordem de data

São 2 tabelas ? como estão relacionadas ?

Estão relacionadas como SaidaPai (a tabela pai) e saidaproduto (a tabela filha).

Link para o comentário
Compartilhar em outros sites

  • 0
Estão relacionadas como SaidaPai (a tabela pai) e saidaproduto (a tabela filha).

Então na hora de montar o QuickReport use uma banda QRGroup para a tabela SaidaPai e na banda de Detail use a tabela saidaproduto

Na propriedade Expresion do QRGroup voce coloca o nome do campo que é distinto para cada registro ... dessa maneira os registros da tabela SaidaPai ficarão nesta banda e na banda Detail ficarão os produtos referentes a esse registro

voce encontrará no forum outros assuntos relacionados

http://scriptbrasil.com.br/forum/index.php...ighlite=QRGroup

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Então na hora de montar o QuickReport use uma banda QRGroup para a tabela SaidaPai e na banda de Detail use a tabela saidaproduto

Na propriedade Expresion do QRGroup voce coloca o nome do campo que é distinto para cada registro ... dessa maneira os registros da tabela SaidaPai ficarão nesta banda e na banda Detail ficarão os produtos referentes a esse registro

voce encontrará no forum outros assuntos relacionados

http://scriptbrasil.com.br/forum/index.php...ighlite=QRGroup

abraço

Não entendi nada que voce disse, não quero relatorio so quero ordenar por indice o campo de data.

Link para o comentário
Compartilhar em outros sites

  • 0
não quero relatorio so quero ordenar por indice o campo de data.

Então voce terá que usar o componente Query ou IBQuery para isso e não Table ou IbTable

Voce terá que montar uma instrução na SQL

seria um exemplo parecido com este

Select * from saidapai, saidaproduto

whre cod = saidaproduto.cod

order by data

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Exemplo de ligação com 2 tabelas

SELECT Clientes.NOME, Clientes.COD, Clientes.RUA, Clientes.BAIRRO, Clientes.CIDADE, Clientes.UF, Clientes.TELRES, Clientes.TELCOM, Clientes.CEP, Clientes.CPF, Clientes.RG, Clientes.CONTATO, Clientes.EMAIL, Clientes.DATA, Clientes.PESSOA, Moviment.NUM, Moviment.DATA, Moviment.PR_VENDA, Moviment.QTDE_VEND
FROM Clientes
   INNER JOIN Moviment
   ON  (Clientes.COD = Moviment.CODCLI)  
ORDER BY Clientes.DATA

Se voce não sabe usar Query faça uma busca no forum ... tem varios tópicos sobre o assunto

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Eu sei usar uma query.

A questao é vou ter que mudar o formulario inteiro des da tabela pai e a filha passando tudo para 2 querys?

Porque são no total 4 tabelas nesse formulario.

A tabela SaidaPai, SaidaProduto, MaoDeObra, Adicionais.

então eu teria que passar tudo para query.

Entendeu ?

Editado por nicolasbraz
Link para o comentário
Compartilhar em outros sites

  • 0
Eu sei usar uma query.

A questao é vou ter que mudar o formulario inteiro des da tabela pai e a filha passando tudo para 2 querys?

Porque são no total 4 tabelas nesse formulario.

A tabela SaidaPai, SaidaProduto, MaoDeObra, Adicionais.

então eu teria que passar tudo para query.

Eu estou te apresentando uma solução

select * from SaidaPai, SaidaProduto
where SaidaPai.cod = SaidaProduto.cod
order by SaidaPai.data

Voce é que deve ver se vale a pena mudar

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Voce é que deve ver se vale a pena mudar

Na empresa querem sim que fique por data, eu queria usar o indice não por preguiça e sim por sem mais rapido pra fazer porque no meu caso tudo já estava feito pela IbTable.

Mas então obrigado jhonas vou fazer aqui e vejo o que da qualquer coisa eu posto aqui.

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas

To usando o IbDataset.

Configurei ele o SQL fico assim.

select *  from SAIDA_PAI,  SAIDA_PRODUTO where saipai_codigo = saiprod_cod_saida_pai

order by  saiprod_data

Só que tem 1 problema eu abro o formulario e ele esta mostrando todos os dados na tabela filha, ele não esta comparando o codigo saiprod_cod_saida_pai com o saipai_codigo.

Editado por nicolasbraz
Link para o comentário
Compartilhar em outros sites

  • 0
Só que tem 1 problema eu abro o formulario e ele esta mostrando todos os dados na tabela filha, ele não esta comparando o codigo saiprod_cod_saida_pai com o saipai_codigo.

Observe com calma o resultado desta select .... para cada registro na tabela pai ele vai trazer N registros da tabela filha que estarão ordenados pela data da tabela filha

sugiro então voce ordenar pelo codigo e data da tabela pai .. desta maneira a tabela filha será ordenada tambem pelo codigo e data relacionados a tabela pai

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Então Jhonas o mais estranho dessa historia é que seu usar esses codigos SQL pelo firebird consultar por la ele filtra.

select distinct * from saida_pai,saida_produto
where saipai_codigo = saiprod_cod_saida_pai and

saipai_codigo = 3

Ele filtro perfeitamente por isso acho que o que esta acontecendo o problema seja no delphi.

Link para o comentário
Compartilhar em outros sites

  • 0
Ele filtro perfeitamente por isso acho que o que esta acontecendo o problema seja no delphi.

Nesta sua select voce usou distinct na outra voce usou * ... de qualquer modo faça um teste ... execute a sql pelo firebird e veja o resultado ... depois coloque a mesma sql no componente e execute ... voce deverá encontrar os mesmos resultados

caso não sejam os mesmos, então pode ser bug de componente... neste caso delete e coloque-o novamente no form

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Observe com calma o resultado desta select .... para cada registro na tabela pai ele vai trazer N registros da tabela filha que estarão ordenados pela data da tabela filha

sugiro então voce ordenar pelo codigo e data da tabela pai .. desta maneira a tabela filha será ordenada tambem pelo codigo e data relacionados a tabela pai

abraço

Jhonas a ideia é a seguinte na tabela Pai é informada os dados do cliente.

na tabela filha vai ser lançado todos os materiais que vao para a obra, esses materias tem que ter o controle do dia que eles são enviados para a obra, eu posso mandar 3 vezes madeira mas uma em cada dia no caso e essa data tem que ser ordenada.

Link para o comentário
Compartilhar em outros sites

  • 0

Então jhonas a hora que eu coloco o codigo SQL ele me lista tudo no Dbgrid não diferencia que o saipai_codigo 1 ele tem que me mostrar todos os SAIPROD_COD_SAIDA_PAI que são referentes ao 1.

As consultas pelo Firebird já estao identicas.

http://img200.imageshack.us/img200/3148/semttuloayg.jpg

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...