Inserir dados em tabela Paradox em determinada posição

Delphi

12/10/2004

Senhores . O Problema e que tenho uma tabela com alguns registro...Mas quero inserir um novo registro em uma determinada posição..Nao na ultima Posição como e de Praxi...Pois bem, localizo o registro aonde eu gostaria de Inserir Imediatamente a partir dele esse novo dado..Pensei que a principio deveria usar o Metodo ´INSERT´ ... ao Invés do Método ´APPEND´....Mas para minha surpresa esta inserindo somente no final da tabela, o que nao resolve o meu problema...O Objetivo disso e que Preciso de uma tabela em ordem crescente em um determinado campo...Suponha por exemplo que eu tenho numa tabela os valores
(1,3,6,7,8) e entro com un novo valor ´5´ ... Gostaria que minha tabela ficasse com o seguinte aspecto (1,3,5,6,7,8)..Entenderam???


Marco Salles

Marco Salles

Curtidas 0

Respostas

Sonec2004

Sonec2004

12/10/2004

Não sei se entidi, mas você pode usar:

Select * from [Nome da Tabela] order by [Nome do Campo]


Nome do Campo é a coluna númérica que deve ser exibida em ordem crescente.

Ajudei??


GOSTEI 0
Marco Salles

Marco Salles

12/10/2004

Amigo..[b:134e5a9605]qualquer dica e sempre muito bem vinda[/b:134e5a9605]..Mas voce nao entendeu
eu nao quero exibir esta tabela em ordem..[b:134e5a9605]eu quero e gravar em ordem[/b:134e5a9605].. Como eu localizo a posição que eu vou gravar eu sei..Mas eu to com dificuldade e de gravar na posição que eu encontrei... A Procedure Insert ela adiciona um registro na tabela na posição escolhida, mas depois que dou um post para confirmar o dado inserido simplesmente o dado inserido rola para o fim da base de dados....Eu gostaria que este dado inserido ficasse na posição inserida previamente...
Obrigado


GOSTEI 0
Macario

Macario

12/10/2004

Ola programador...

Nos diga..para qual finalidade voce quer gravar desta maneira?

A nao ser que seja para algo..incomun....voce pode trabalhar com indices?


GOSTEI 0
Marco Salles

Marco Salles

12/10/2004

[quote:35c0431a17=´Macario o Aspone´]Ola programador...

Nos diga..para qual finalidade voce quer gravar desta maneira?

A nao ser que seja para algo..incomun....voce pode trabalhar com indices?[/quote:35c0431a17]

Amigo ,explicar isto pode ser um pouco confuso, mas vou tentar....Acontece que em uma determinada Venda e em uma situação especial de promoção, o meu cliente resolve fazer uma liquidação do seu produto da seguinte Forma:::´COMPRE TRES E PAGUE DOIS...´ A regra para isto e que o Cliente levara sempre de Graça a peça de menor Valor..em cada grupo de tres produtos, DEVIDAMENTE AGRUPADOS PELO PREÇO, A Peça de menor valor e de [b:35c0431a17]graça[/b:35c0431a17]....Então o DESCONTO OBTIDO na compra Pode variar ´teoricamente´ no intervalo de [b:35c0431a17](0, 33.333333][/b:35c0431a17] ...e sendo é um desconto que varia em um intervalo , nada mais justo que o cliente acompanhe passo a passo esta variação do Desconto Obtido no momento da compra....Gostaria de fazer isto INSTANTANEAMENTE E NAO NO FIM DO PROCESSO...seria muito mais fácil para mim , calcular este desconto no FIM Da VENDA, mas acho que seria mais interresante Calcula-lo passo a passo...Para calcular este desconto instantaneamente acredito que na inserção dos dados devo coloca-los de maneira [b:35c0431a17]agrupados[/b:35c0431a17]. E Para agrupa-los preciso inserir os dados em uma determinada posição, ( como a procedure [b:35c0431a17]INSERT [/b:35c0431a17]Faz),so que quando confirmo com o [b:35c0431a17]POST[/b:35c0431a17], este mesmo dado ROLA para o fim da [b:35c0431a17]Base de Dados[/b:35c043

GOSTEI 0
Marco Salles

Marco Salles

12/10/2004

1a17]...Mais ou menos e isto ai...
GOSTEI 0
Vinicius2k

Vinicius2k

12/10/2004

Colega,

Fisicamente um novo registro SEMPRE é adicionado ao final do arquivo de dados, não importa se vc utilizar .Append ou .Insert. A forma de exibição (ordenação) é que está atrelada à designação de um índice corrente ou via SQL (Order By).
O que vc pretende, sem utilizar algum dos dois recursos acima, é impossível.

T+


GOSTEI 0
Marco Salles

Marco Salles

12/10/2004

Colega, Fisicamente um novo registro SEMPRE é adicionado ao final do arquivo de dados, não importa se vc utilizar .Append ou .Insert. A forma de exibição (ordenação) é que está atrelada à designação de um índice corrente ou via SQL (Order By). O que vc pretende, sem utilizar algum dos dois recursos acima, é impossível. T+


Os Testes Preliminares que eu Fiz, ate mesmo inserindo no Diretamente no Propio Banco, cheguei a esta conclusão...

A saida que eu encontrei foi reeditar registro por regitro, e ordenando-os atraves de Programação....Em outras palavras se eu tiver 5 registro em sequencia, por exemplo :
Registro 1 : Registro 1 : valor 20,00 Rs
Registro 2 : valor 16,00 Rs
Registro 3 : valor 12,00 Rs
Registro 4 : valor 10,00 Rs
Registro 5 : valor   8,00 Rs

Ao inserir un novo valor [b:30829e413f](Por exemplo : O Valor 15,00)[/b:30829e413f] , eu devo reeditar esses 5 registros e reenserir o ultimo..Ficando assim:
Registro 1 : valor 20,00 Rs  inalterado
Registro 2 : valor 16,00 Rs  inalterado
Registro 3 : valor 15,00 Rs  Reeditado
Registro 4 : valor 12,00 Rs  Reeditado
Registro 5 : valor 10,00 Rs  Reeditado
Registro 6 : valor  8,00 Rs   Inserido

[b:30829e413f]Pode parecer estranho, ate mesmo o fato de reeditar registros torna o programa um pouco mais lento, sem parecer uma boa prática de programação [/b:30829e413f], mas para o que eu quero , parece resolver a questão..
podendo ate levar em conta que esta tabela e relacionada com uma outra e esses arranjos nesta tabela so serão efetuados uma unica vez e somente no relacionamento em questão....isto e , se estou numa determinada venda, somente os produtos desta vendas serão reagrupados...

Por que que eu estou batento nesta tecla :?: porque foi esta maneira que eu encontrei...como disse o Vinicius.2k
O que vc pretende, sem utilizar algum dos dois recursos acima, é impossível.

Eu particurlarmente nao entendi de qual recursos ele esta se referindo :oops:

Mas se no fritar dos ovos alguem entendeu o que quero e o que necessito e tem alguma colocação a fazer , por favor estejama vontade :D


GOSTEI 0
Vinicius2k

Vinicius2k

12/10/2004

Colega,

Os dois recursos aos quais eu me referi são : Indices ou SQL (Order By)...
No seu caso, o melhor é utilizar um índice secundário para a tabela...
Estou meio ´enferrujado´ com Paradox, mas se, me lembro bem, os passos a seguir são :
1. Abra a tabela em modo de reestruturação no Database Desktop.
2. Existe uma combo onde se seleciona ´Secondary Indexes´.
3. Click em ´Define´.
4. Selecione os campos (no seu caso o campo do valor) e click OK.
5. Salve a tabela.
6. Defina a propriedade IndexFieldNames do TTable para o índice que vc criou...

T+


GOSTEI 0
Sonec2004

Sonec2004

12/10/2004

Se é o que entendi, tente o seguinte:
A cada registro postado, um campo numérico é incrementado de 10 em 10.
Quando se pretende mudar o registro de posição ou inserir outro no meio, apenas o valor desse campo é modificado para um valor intermediário.

Registro 10 : valor 20,00 Rs 
Registro 20 : valor 16,00 Rs 
Registro 30 : valor 12,00 Rs 
Registro 40 : valor 10,00 Rs 
Registro 50 : valor   8,00 Rs


Com novo registro:

Registro 10 : valor 20,00 Rs    inalterado
Registro 20 : valor 16,00 Rs    inalterado
Registro 25 : valor 15,00 Rs    Inserido
Registro 30 : valor 12,00 Rs    inalterado
Registro 40 : valor 10,00 Rs    inalterado
Registro 50 : valor  8,00 Rs    inalterado



Ajudei ???


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

12/10/2004

Colegas,

Para armazenar fisicamente registros serializados com Paradox se faz necessário o uso de tabela temporária, preferencialmente em memória (ver Memory Table da RxLib ou Jedi VCL), e criar uma rotina de cargar e descarga na tabela de persistência. Para o controle de inserção entre registros, a dica acima, muito utilizada antigamente por linguagens como Basic e Fortran, pela simplicidade, resolve o problema.


GOSTEI 0
POSTAR