Dúvida Sobre Tabelas Temporárias

Delphi

14/04/2005

Senhores,

Estou com uma tremenda dúvida. Eu tenho um caso onde preciso de uma tabela temporária para processar alguns valores do usuário antes de gravar no banco de dados FB15. Eu tentei usar as tabelas em memória pelo Clientdataset.Createdataset, mas o problema é que eu preciso agrupar alguns registros para validar alguns valores que serão digitados pelo usuário, ou seja, eu preciso que esses dados sejam gravados em disco para eu ter essa possibilidade.

Eu pensei em usar um banco de dados leves como aqueles são listados em fontes de dados ODBC. Mas estou com dúvidas se dará certo. Tanto que tentei usar o DBase III, mas tive um problema no passado que computadores que possuíam o Windows 98 dava problemas na hora de gravar. E eu tenho muitas estações que ainda trabalha com esse SO, fora que os campos não podem ultrapassar 10 caracteres, isso já seria ruim, pois o programa já está pronto, só estou adequando a uma nova necessidade de meu cliente. Pensei em usar o ACCESS, mas receio que ficará lento.

Alguém já teve uma necessidade? Como resolveu? Alguém poderia me dar uma opinião?


Chmeireles

Chmeireles

Curtidas 0

Respostas

Edilcimar

Edilcimar

14/04/2005

por que não cria uma tabela temporária de depois dá um drop nela?


GOSTEI 0
Kotho

Kotho

14/04/2005

Se a quantidade de informação por usuário não for muito grande, você pode gravar o ClientDataSet no formato XML ou BINÁRIO (na verdade, eu não sei qual é melhor) e depois le-los....

ClientDataSet1.SaveToFile...
...
ClientDataSet1.LoadFromFile...

Dá uma olhada no Help do Delphi... você pode usar parâmetros no método ou definir no próprio ClientDataSet...


GOSTEI 0
Chmeireles

Chmeireles

14/04/2005

Eu já tentei ir por esse caminho, mas usando esse método não consigo agrupar alguns registro.

Vou te explicar resumidamente. Essa tela que criei é de uma aplicação de um controle de estoque onde o usuário cadastra os funcionários e define um KIT de produtos que pode requisitar no estoque. Só que além do código do produto eu tenho nº de ativo que são bens patrimoniais, ou seja, eu tenho CÓDIGO DO PRODUTO: 0123 NOTEBOOK e tenho ATIVO: 0123-01, 0123-02 e 0123-03. Tem alguns funcionários que pode pegar até 3 Notebooks. Daí eu preciso agrupar o nº total de notebook´s que foi digitado nessa tela para eu bloquear pelo limite de 3. Se eu gravar como arquivo BINÁRIO não poderei utilizar código SQL: SELECT COD_PRODUTO, (QUANTIDADE) From TEMP_REQUISICAO Where COD_FUNCIONARIO=´0001´ and COD_PRODUTO=´0123´.

Entendeu?


GOSTEI 0
Edilcimar

Edilcimar

14/04/2005

use o que falei
create table temp -> campos -> indice(se necessário)
e depois
drop table temp


GOSTEI 0
Chmeireles

Chmeireles

14/04/2005

Caro Edilcimar,

Eu crio que tipo de tabela temporária? Esse tipo de tabela temporária que dizes tem como usar comandos SQL?

Agradeço desde já pela sua ajuda,


GOSTEI 0
Edilcimar

Edilcimar

14/04/2005

sim, é uma tabela normal como outra qualquer, a única diferença é que vc vai destruí-la depois


GOSTEI 0
Kotho

Kotho

14/04/2005

kra... você vai querer acessar dados de uma digitação, que foi feita em uma máquina em um determinado momento, em uma outra máquina???

Porque, se a resposta for não, para saber a quantidade de registros, você pode criar um campo aggregate...

Agora, se a resposta for sim, eu acho melhor fazer como o edilcimar disse mesmo...

Qualquer coisa, posta ae...


GOSTEI 0
Chmeireles

Chmeireles

14/04/2005

Não. Os dados serão processados no computador local do usuário. Cada usuário pode abrir a mesma tela criar requisições de produtos no estoque para funcionários diferentes.

Tipo assim:

O usuário seleciona um funcionário, daí o programa busca o kit de produtos associados e atrás para essa tabela que quero criar. Até eu poderia jogar esses dados para um Clientdataset sem o uso de uma tabela FIXA. O problema é nesse kit de produtos há código de ativos que seria uma chave menor. Vou dar um exemplo. Suponha que um deterninado funcionário tenha definido no kite dele o produto NOTEBOOK com a quantidade limite de 3. Então teríamos:

COD_PRODUTO / DESCRIÇÃO / COD_ATIVO / QTDE REQUISITADA
01 / NOTEBOOK / 01-01 / 1
02 / NOTEBOOK / 01-02 / 1
03 / NOTEBOOK / 01-03 / 1

O funcionário pode pegar até 3 notebook. Certo? Para eu criticar essa quantidade limite, eu tenho que arrumar um jeito de agrupar os registros do mesmo código do produto, tipo um: ´SELECT COD_PRODUTO, SUM(QTDE_REQUISITADA) From TABELA_TEMPORARIA´ para eu saber a quantidade total que foi requisitada do produto independente do CÓDIDO DE ATIVO.

Bem é essa a operação. Eu preciso de um jeito de gravar esses dados em uma tabela física (assim eu acho) para obter esse resultado e depois que estiver tudo certo, eu pegaria esses registros que estão nessa tabela temporária dados devidamente validados, gravaria definitivamente no banco de dados, mais precisamente na tabela ESTOQUE que registra os movimentos do produto.

Outro problema, é que não posso usar o índice agregados, porque eu teria que agrupar pelo código, daí que teria obrigar o usuário a ver os registros ordenado pelo código do produto e não pela descrição. E tem mais, se eu aplicar o filtro (que existe nessa tela) mostrar somente produtos com quantidade requisitada maior que zero, o campo agregado me dá um valor totalmente aburdo, pois um dos registros que fazem parte do mesmo código de produto foram omitidos.

Entende o meu dilema?


GOSTEI 0
POSTAR