[firebase-br] Duvida Select

Paulo Sérgo Feix paulinhofeix em gmail.com
Ter Set 9 12:11:08 -03 2014


Rodrigo eu não recomendo usar este esquema numa tabela que vai receber
muitos registro

Nos meus sistemas que eu tenho em 3 camada faço desta forma, somente para
cadastros


function TDMCon_Server.RetornaID(Tabela, Campo: string): Integer;

begin

  FDAux.Close();

  FDAux.SQL.Text := 'SELECT MAX (' + Campo + ') FROM ' + Tabela;

  FDAux.Open();

  Result := FDAux.Fields[0].AsInteger + 1;

end;



e no BeforeUpdateRecor do DataSetProvider eu chamo ele

  if UpdateKind = ukInsert then

  begin

    if SourceDS = FDCiudad then

      DeltaDS.FieldByName('ID_CIUDAD').NewValue :=


DMCon_Server.RetornaID('CCIUDAD','ID_CIUDAD');

  end;



Passo o nome da tabela e o campo.



Já nas tabelas como compra pedido venda caixa banco etc... uso sequencial

Em 9 de setembro de 2014 10:57, Sandro Souza <escovadordebits em gmail.com>
escreveu:

> Bom dia/tarde/noite Rodrigo.
>
> Necessita realmente de uma tabela de números de pedido? Porque não utilizar
> simplesmente uma sequence/gerador?
>
> Bom, independente disso, você poderia testar o seguinte SELECT?
>
> SELECT FIRST 1
>   A.NUMPEDIDO
> FROM
>   NUMPEDIDOS A
> WHERE
>   (A.USADO = '') AND
>   NOT EXISTS(SELECT B.NUMPEDIDO FROM PEDIDOS B WHERE B.NUMPEDIDO =
> A.NUMPEDIDO);
>
> Caso não haja um índice para a coluna USADO da tabela NUMPEDIDOS, crie-o,
> como no exemplo abaixo:
>
> CREATE INDEX IX_NUMPEDIDOS_USADO ON NUMPEDIDOS(USADO);
>
> Acredito que já deva existir um índice para a coluna NUMPEDIDO da tabela
> PEDIDOS, até porque eu imagino que seja a chave primária dessa tabela. Mas
> caso ainda não haja, crie-o também.
>
> Imagino também que você esteja preenchendo a coluna USADO da tabela
> NUMPEDIDOS com algum valor assim que usa um dos números de pedido.
>
> Ainda acho que seria muito melhor usar uma sequence ( = generator), mas
> cada caso é um caso.
>
> Espero ter ajudado mais que atrapalhado. :D
>
> Em 9 de setembro de 2014 11:41, Rodrigo <firebase em dominioinf.com.br>
> escreveu:
>
> > Bom dia a todos.
> >
> > Fiz um select e ele esta funcionando, porém esta muito lento, pois ha
> > muitos registros no banco de dados.
> >
> > select N.NUMPEDIDO AS NUMPEDIDO from numpedidos N where N.USADO = '' and
> > (SELECT COUNT(*) FROM PEDIDOS WHERE NUMPEDIDO=N.NUMPEDIDO) = 0
> >
> > nesse select retorno o proximo numero de pedido, porem esse numero nao
> > pode repetir na tabela pedidos, entao
> > faço uma pesquisa para verificar se ele ja nao esta sendo usado. Percebi
> > que nesses selects não usam os indices criados. Por isso talvez fique
> lento.
> >
> > Tentei fazer assim:
> >
> > select N.NUMPEDIDO AS NUMPEDIDO from numpedidos N where N.USADO = '' and
> > N.NUMPEDIDO NOT IN (SELECT NUMPEDIDO FROM PEDIDOS)
> >
> > Funciona mais rapido porem nao retorna os mesmos resultados do que o
> outro
> > select acima.
> >
> > Existe alguma forma de melhorar esse select, ou uma forma de ele usar os
> > indices criados ?
> >
> > Grato
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
Paulinho Sérgio Feix



Mais detalhes sobre a lista de discussão lista