Jump to content
paula_91

Coluna temporaria ou virtual

Recommended Posts

paula_91

Boas.

É possível criar uma coluna virtual ou temporária?

Eu estou a programar na framework do phc e para poder introduzir dados na browlist tenho de ter uma série de colunas que todas as tabelas do phc tem. No meu caso é uma tabela criada e que só necessita de duas colunas , por isso não quero adicionar mais 6 ou 7 colunas que nunca vão ser usadas.

Portanto será possível criar uma temporária?

Obrigada pela disponibilidades,

Paula

Share this post


Link to post
Share on other sites
jpaulino

Mas é para efectuar calculos? Qual é o objectivo?

Podes sempre usar um stored procedure, criar um tabela temporária e adicionar os registos a essa tabela. Mas isto depende da necessidade.

Share this post


Link to post
Share on other sites
paula_91

text to po noshow textmerge

select stamp ,codigo,descricao from u_portos(nolock)

endtext

if u_sqlexec(po,[cu_po])

DECLARE list_tit(2),list_cam(2),list_tam(2),list_pic(2),list_ronly(2)

list_tit(1)='Código'

list_tit(2)='Descrição'

list_cam(1)='cu_po.codigo'

list_cam(2)='cu_po.descricao'

list_ronly(1)=.t.

list_ronly(2)=.t.

list_pic=''

list_tam(1)=8*10

list_tam(2)=8*5

m.escolheu=.f.

browlist('Lista de Portos','cu_po','cu_po',.t.,.t.,.t.)

endif

Não, as colunas não vão fazer nada . O programa é que as requer para guardar la tipo os dados da data e isso , mas que neste caso eu não quero. Ou seja queria 'enganar' para ele deixar o utilizador inserir os dados na browlist que grava automaticamnte no sql. Neste caso é para gravar os portos de embarque e desembarque.

A query que estou a fazer ao sql são os dados que eu preciso... mas depois preciso das outras 6 ou 7 colunas virtuais...

No caso de criar uma tabela temporária teria de copiar os dados da outra para a temp e depois voltá.los a guardar na originar?

Share this post


Link to post
Share on other sites
M6

Paula,

das duas uma, ou a informação é relevante e o modelo de dados deve contemplar a sua salvaguarda, ou então não é importante e não faz sentido a informação transitar para a base de dados.

Essa questão das colunas virtuais cheira-me muito a esturro. O que podes ter é tabelas temporárias, válidas numa dada sessão.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
paula_91

A informação é importante sim mas não neste caso. Geralmente é usada para não existir duplicação de registos.

Mas consegui resolver o problema desta forma:

*****************************************************************
*Criado em: 17.03.2011

* Cria colunas necessárias para inserir dados na browlist
TEXT to tb noshow textmerge

   If not exists (Select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'u_portos' AND COLUMN_NAME = 'cu_postamp')
      Begin
         Alter table u_portos add cu_postamp char(25)
      End

   If not exists (Select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'u_portos' AND COLUMN_NAME = 'usrdata')
      Begin
         Alter table u_portos add usrdata datetime
      End

   If not exists (Select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'u_portos' AND COLUMN_NAME = 'usrhora')
      Begin
         Alter table u_portos add usrhora varchar (
      End

   If not exists (Select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'u_portos' AND COLUMN_NAME = 'ousrdata')
      Begin
         Alter table u_portos add ousrdata datetime
      End

   If not exists (Select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'u_portos' AND COLUMN_NAME = 'ousrhora')
      Begin
         Alter table u_portos add ousrhora varchar (
      End


   If not exists (Select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'u_portos' AND COLUMN_NAME = 'usrinis')
      Begin
         Alter table u_portos add usrinis varchar (30)
      End

   If not exists (Select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'u_portos' AND COLUMN_NAME = 'ousrinis')
      Begin
         Alter table u_portos add ousrinis varchar (30)
      End

ENDTEXT
u_sqlexec(tb)

*Cria a browlist

TEXT to po noshow textmerge
   select cu_postamp,ousrinis,usrdata,ousrdata,usrhora,ousrhora,usrinis,codigo,descricao from u_portos(nolock)
ENDTEXT
If u_sqlexec(po,"cu_po")
   If criaupdatecursor("cu_po","u_portos","codigo,descricao")

      Declare list_tit(2),list_cam(2),list_tam(2),list_pic(2),list_ronly(2)
      list_tit(1)='Código'
      list_tit(2)='Descrição'
      list_cam(1)='cu_po.codigo'
      list_cam(2)='cu_po.descricao'
      list_ronly(1)=.F.
      list_ronly(2)=.F.
      list_pic=''
      list_tam(1)=8*10
      list_tam(2)=8*5
      =CursorSetProp("Buffering",5,"cu_po")
      m.escolheu=.F.
      browlist('Lista de Portos','cu_po','cupo',.T.,.T.,.T.,.T.,.F.,"",.T.)
      If m.escolheu
         Replace bo.TRAB1 With cu_po.descricao
      Endif
      If u_tabupdate(.T.,.T.,'cu_po')       
** Foi enviado com sucesso.
      Else
         Tablerevert(.T.,"cu_po")
         Messagebox("Erro ao gravar os dados")
      Endif
   Endif
Endif

*Apaga as colunas

TEXT to co noshow textmerge
   Alter table u_portos drop column cu_postamp
   Alter table u_portos drop column usrdata
   Alter table u_portos drop column usrhora
   Alter table u_portos drop column ousrdata
   Alter table u_portos drop column ousrhora
   Alter table u_portos drop column usrinis
   Alter table u_portos drop column ousrinis
ENDTEXT
u_sqlexec(co)

*****************************************************************

Acabou por resolver o problema... Tenho dúvidas que seja o melhor código a nível de simplificação. Mas funciona =)

Cumps

Share this post


Link to post
Share on other sites
fergvz

SELECT '' AS cu_postamp, '' AS ousrinis, GETDATE() AS usrdata,  GETDATE() AS ousrdata, '' AS usrhora, '' AS ousrhora, '' AS usrinis, codigo, descricao FROM u_portos(nolock)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.