select

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

select

Mensagem por ederxc »

pessoal estou presisando de umas opnião a respeito de seleção de bancos de dados

Costumeiramente faço a seleçao dos bancos apena no *.prg que vou usar este banco assim como seus indices , estava pensando em abrir todos os bancos e seus indices no *.prg principal e depois nos demais modulos ir apenas chamando a area que vou pecisar , gostaria de saber como os amigos fazem isso pois se eu fizer como faço de csotume vai dar erro ex:

Código: Selecionar todos

sele A
  use cliente
  set index  to xNcod
sele B
  use fornece
  set index  to xNfor


...No caso se ja por isso direto no *.prg principal e os indices ainda ñ estiverem criados vai dar erro antes que eu possa entrar no modulo de indexação gostaria de ver alguns exemplos dos amigos de como poderia criar esta sintaxe , té++ :f
Editado pela última vez por ederxc em 22 Jun 2007 15:27, em um total de 1 vez.
C:\Xharbour\Xdev\Fw\VSX
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

Mensagem por Grings »

Na minha opinião, abra os arquivos somente quando for utilizá-los e feche-os tão logo tenha concluído a utilização.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: select

Mensagem por Maligno »

ederxc escreveu:estava pensando em abrir todos os bancos e seus indices no *.prg principal
Acho que esta é a pior forma. Mas se você estruturar bem seu código abrir bancos/índices apenas quando necessários ficará muito melhor.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

acho que vou deixar como esta então para ñ ter problemas , té++
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Vc pode "eliminar" o SELE A ou B, usando a cláusula NEW no USE, o que fará o DBF ser aberto na próxima (qualquer) área disponível, e com o ALIAS igual ao seu nome:
use cliente new
set index to xNcod
use fornece new
set index to xNfor
?cliente->nomecli+" "+fornece->nomefor
*etc.
Aí, de qq lugar do sistema, vc pode se referir aos campos do DBF usando o ALIAS, como no exemplo acima: cliente->nomecli (pegue o valor do campo nomecli no cliente.dbf que está aberto "sei lá em que área"...)

Aliás, o que é esse "COD" que vc colocou no SET INDEX?
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Bom como os colegas Jah falaram.....o negocio é abrir e fechar o que vc vai usar no momento....mas se aparecer alguem querendo usar tudo aberto no inicio...eu faria assim um pouco diferente...mas que dah quase o mesmo resultado.....unica coisa que eu abro ele compartilhado...

Código: Selecionar todos

sele 1
use cliente alias cliente shared new  //abre compratilhado em uma nova area
set index to xNcod 
sele 2
use fornece alias fornece shared new //abre compratilhado em uma nova area
set index to xNfor 
Depois para selecionar...usaria o apelido
SELE CLIENTE ou SELE FORNECE

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Postei errado EOLO , ñ tem esse cod ñ hehehe vou reeditar
Editado pela última vez por ederxc em 22 Jun 2007 15:27, em um total de 1 vez.
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

ederxc escreveu:acho que vou deixar como esta então para ñ ter problemas , té++
Tche, outra coisa......time que esta ganhando não se mexe....se esta funcionando bem....deixa funcionando...não tente reinventar a roda....se quise dar uma melhorada com desempenho....ou algo parecedio.....tente ver alguma coisa para SIX ou CDX com o uso de TAG....

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Leo , logo vou me enfiar o Xharbour estou gostando das postagens dos amigos


a questão ñ é desempenho esta querendo deixa de uam forma mais digamos , genérica , pra ñ ter todas vez que ficar selecionando , mas isso tambem ñ vai quebrar meu dedo de tanto digitar ehehe té++

:)Pos
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Leo , logo vou me enfiar o Xharbour estou gostando das postagens dos amigos
Tche, aonde eu poder ajudar no xharbour ...prende o grito....
a questão ñ é desempenho esta querendo deixa de uam forma mais digamos , genérica , pra ñ ter todas vez que ficar selecionando , mas isso tambem ñ vai quebrar meu dedo de tanto digitar ehehe té++
Tche, sou Brasileiro com muito orgulho...mas isso é legitimo costume do Brasileiro....tu ve aqueles loko que vão para EUA e trabalham em 3 empregos, passam fome,não fazem festa,sem carnaval.... e dizem que lah sim ganham bem.....claro aqui eles querem trabalhar meio-turno em um emprego.....heheh...

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

ederxc escreveu:acho que vou deixar como esta então para ñ ter problemas , té++
Como bem disseram: não se mexe em time que está ganhando. É claro que para não embolar o meio de campo do que está pronto, é melhor não fazer modificações tão profundas. Mas, se puder fazer isso para projetos novos, aconselho. Depois que fiz o meu controle de bancos, não tive mais aporrinhação nenhuma com bancos de dados. Ele cuida de indexar ou reindexar, abrir, apagar no fechamento, etc. Uma mão na roda. E esse tipo de conceito também lhe teria serventia quando migrar para Xharbour. Pense a respeito.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Eder,

Crie uma função sua pra abrir arquivos... Aliás, vc pode até pegar alguma coisa pronta, mas que tal criar uma? Melhor saber pescar do que ganhar peixe morto, não é? Um exemplo, bem simples, a seguir.

Código: Selecionar todos

*...
abre("CLIENTE","AE")
*...
sele cliente
* blablabla
quit

function abre(arquivo,como)
* veja antes se "arquivo" existe...
if como=="AE" // abre exclusivo
  use (arquivo) new excl
  * veja se o USE funfou...
  * se não funfou, vc pode tentar abrir novamente... como?? 
  * use o dbsetindex() para abrir os NTX/CDX
elseif como=="AC" // compartilhado
  use (arquivo) new shar
  * idem acima
elseif como=="F" // fecha
  sele (arquivo)
  use
endi
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

É interessante como uma coisa tão simples, como abertura de banco de dados, pode se tornar tão chato e trabalhoso. Explico:

Imagine que, para cumprir determinada tarefa, sejam necessários até 10 arquivos de dados. Destes, 5 são essenciais, 3 são opcionais e 2 são temporários, que deverão ser apagados ao final. Isso não é tão difícil de acontecer. Eu próprio tenho situações em que preciso abrir até mais do que isso.
Pra piorar um pouco, imagine que cada um desses 10 arquivos tem diversos índices, e que a cada situação serão necessários certos índices, para cumprir a tarefa. Vou piorar um pouco mais. Destes índices, nem todos existem e deverão ser criados, portanto.

IFs aninhados poderiam ser a solução. Mas numa conjuntura dessas, seria um emaranhado de IFs, que acabaria mandando a manutenabilidade pra baixo.

Aí que se vê a necessidade de um sub-sistema de controle de arquivos de dados. Uma função um pouco mais elaborada ajuda, sem dúvida. Mas ainda assim, não torna o trabalho muito mais fácil.

Conforme eu comentei com o colega, num sistema antigo é difícil querer impor mudanças tão radicais. O ideal seria, conforme o tempo permitir, ir desenvolvendo algo mais aprofundado e implantar isso nos projetos futuros. Uma coisa posso garantir: depois que fiz isso, meu trabalho com bancos de dados simplesmente acabou. Exemplo simples:

Código: Selecionar todos

dbDefGroup Tempor create kill vital       tag            "iSM1_EMINRO"
dbDefGroup SaiMAP create      vital       tag if(nOrd=1, "iSM1_EMINRO", "iSM1_DATSAI")
dbDefGroup Fornec                         tag            "iFOR_CODIGO"
dbDefGroup EntMP2             vital       tag            "iEM2_MAPDATENT" if nOptMAP=_kANALITICO
dbDefGroup EntMP1             vital       tag            "iEM1_CODIGO"
dbDefGroup MatPri create      vital exclusive reindexIF _kTRUE
if !dbOpenGrp()
   // Algum arquivo não pôde ser aberto
end
...
...
...
dbCloseGrp()
O "Tempor" acima será criado se não existir. Existindo, será zerado por causa da cláusula "ZERO". O arquivo "Fornec" é o único opcional. Não é tão importante. Se não existir, não será criado. O arquivo "EntMP2" só será aberto se uma certa opção de configuração assim exigir. O arquivo "MatPri" terá seus índices recriados incondicionalmente. Após a configuração inicial, a função dbOpenGrp() executará no sub-sistema e tentará cumprir as exigências desse pseudo-script.
Por fim, se a abertura tiver retornado com sucesso, a função dbCloseGrp() fechará todos os arquivos e ainda apagará o arquivo "Tempor" e seus índices relacionados.

Pra entender a profundidade dessas facilidades, só tentando fazer a mesma coisa através de código comum. Certamente ficaria monstruoso. Isso que eu não dei como exemplo o meu pior caso, que é três vezes maior que esse exemplo.

Por isso eu ressalto: mesmo que a criação de um esquema desses dê trabalho, quando pronto, a recompensa é infinitamente maior. Pode-se então dedicar o tempo ganho com tarefas bem mais nobres.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Maligno escreveu:É interessante como uma coisa tão simples, como abertura de banco de dados, pode se tornar tão chato e trabalhoso.

Cara o engraçado que quando penço que uma coisa vai ser facil , apareço aqui como quem ñ quer nada , jogo a pergunta ae buuuuuuuuun ! É sempre assim , acho que ja estou me acostumando , da proxima vou pensar que e muito dificil e quemm sabe é facil hehehe VLW

agardeço os amigos por darem atenção a meu tópico té++ :)Pos
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Eder,

Pois é, a solução do Maligno pode ser tecnicamente melhor, mas...

Cara, a coisa é muito simples. Use os IFs aninhados, como eu faço, que vai ser fácil de entender e funcionar igual.
Responder