Caro Sérgio.

O uso de tabelas temporárias do MS SQL Server no Delphi é muito simples.

Quero lembrar antes que:

   - Toda tabela temporária é criada no banco TempDB.
   - Ao criarmos uma tabela temporária, temos que considerar a visibilidade da 
mesma.

Uma tabela temporária é criada quando o seu nome inicia com # ou ##.
# significa que a tabela criada é vista apenas pela conexão corrente ao banco,  
ou seja, se existir duas ou mais conexões com o banco, apenas a conexão que 
criou a tabela temporária consegue ve-la, ela não existe para as outras 
conexões. Isto quer dizer tambem que em cada conexão aberta pode existir uma 
tabela temporária com o mesmo nome, mas ela pode ter campos diferentes e 
quantidades diferentes de registros. pois é exclusiva da conexão que a gerou.
Para apagar este tipo de tabela temporária você deve:
    executar um Drop Table dentro da conexão que a criou;
ou
   fechar a conexão onde a tabela temporária foi criada.

## significa que a tabela criada é vista por todas as conexões ao banco, ou 
seja, ela pode ser vista e sofrer alterações em conexões diferentes daquela que 
a originou.
Para apagar este tipo de tabela temporária você deve:
    executar um Drop Table dentro de qualquer conexão;
ou
   fechar a conexão onde a tabela temporária foi criada.

No Delphi eu uso os componentes ADO para trabalhar com o SQL Server, portanto 
uso o componente TADOConnection para efetuar a conexão com o banco. Para 
trabalhar com tabelas temporárias iniciadas com # é importante que todos os 
componentes derivados de TADODataSet tenham suas propriedades Connection 
apontadas para o mesmo TADOConnection, pois assim fica garantida que a mesma 
conexão está sendo utilizada por todos os DataSets. Caso esteja utilizando o 
BDE, o componente de conexão ao banco deve ser o TDatabase. Para tabelas 
iniciadas com ##, o único cuidado a ser tomado é garantir que a conexão onde 
onde foram criadas as tabelas seja a última a ser fechada, senão as tabelas 
serão dropadas automaticamente, e qualquer outra conexão aberta que esteja 
utilizando as mesmas retornará erro.

Exemplos de criação e manipulação no Delphi:
   // Criação de uma tabela temporária via comando CREATE TABLE
   qryTabTemp.Close;
   qryTabTemp.SQL.Clear;
   qryTabTemp.SQL.Add('if object_id(''tempdb..#TabTemp'') is not null ' +
                      '   drop table #TabTemp ' +
                      'Create Table #TabTemp (Codigo Integer Not Null , ' +
                      '                       Descricao varchar(50)  Not Null , 
 ' +
                      '                       Quantidade Numeric(12,2) , ' +
                      '                       Valor Money, ' +
                      '                       Obs Varchar(512) ) ' );
   qryTabTemp.ExecSQL;


   // Criação de uma tabela temporária via cláusula INTO do SELECT
   qryTabTemp.Close;
   qryTabTemp.SQL.Clear;
   qryTabTemp.SQL.Add('if object_id(''tempdb..#TabTemp'') is not null ' +
                      '   drop table #TabTemp ' +
                      'Select (case when r.CODEAN is Null ' +
                      '             then 
''0000000''+substring(p.CODPRO,1,5)+substring(p.CODPRO,7,1) ' +
                      '             else r.CODEAN end) as CODEAN, ' +
                      '       p.CODPRO, ' +
                      '       p.NOMPRO, ' +
                      '       p.UNIDADE, ' +
                      '       p.SECAO, ' +
                      '       s.DESCRICAO ' +
                      '   into #TabTemp ' +
                      '   from CADPROD p ' +
                      '   left join CadRef r on p.CODPRO = r.CODPRO ' +
                      '   left join CADSEC s on s.CODIGO = p.SECAO ' +
                      '   order by r.CODEAN,p.CODPRO ' );
   qryTabTemp.ExecSQL;


   // Visualização I
   // Tabela temporária via comando SELECT
   qryTabTemp.Close;
   qryTabTemp.SQL.Clear;
   qryTabTemp.SQL.Add('Select * ' +
                      '   From #TabTemp ' +
                      '   order by Descricao ' );
   qryTabTemp.Open;


   // Visualização II
   // Tabela temporária via cláusula Join do comando SELECT
   qryLocal_Produtos.Close;
   qryLocal_Produtos.SQL.Clear;
   qryLocal_Produtos.SQL.Add('Select lp.codloj, ' +
                             '       l.Nomloj, ' +
                             '       lp.CodQuadra, ' +
                             '       q.Descricao as NomQuadra, ' +
                             '       lp.CodSetor, ' +
                             '       s.Descricao as NomSetor, ' +
                             '       lp.CodRua, ' +
                             '       r.Descricao as NomRua, ' +
                             '       re.CODEAN, ' +
                             '       re.CODPRO, ' +
                             '       re.NOMPRO, ' +
                             '       re.UNIDADE, ' +
                             '       re.SECAO, ' +
                             '       re.DESCRICAO ' +
                             '   from Local_Produtos lp ' +
                             '   left join Cadloja l on l.codloj = lp.codloj ' +
                             '   left join Quadras q on q.codloj = lp.codloj 
and ' +
                             '                          q.codQuadra = 
lp.codQuadra ' +
                             '   left join Quadras_Setores s on s.codloj = 
lp.codloj and ' +
                             '                                  s.codQuadra = 
lp.codQuadra and ' +
                             '                                  s.codSetor  = 
lp.codSetor ' +
                             '   left join Quadras_Setores_Ruas r on r.codloj = 
lp.codloj and ' +
                             '                                       
r.codQuadra = lp.codQuadra and ' +
                             '                                       r.codSetor 
 = lp.codSetor and ' +
                             '                                       r.codRua   
 = lp.codRua ' +
                             '   left join #TabTemp re on re.CODEAN = lp.codref 
' +
                             '   where lp.codloj = :Loja and ' +
                             '         lp.codquadra = :Quadra and ' +
                             '         lp.codsetor = :setor and ' +
                             '         lp.codrua = :rua and ' +
                             '         re.Secao = :secao ' +
                             '   order by lp.codloj, ' +
                             '            lp.CodQuadra, ' +
                             '            lp.CodSetor, ' +
                             '            lp.CodRua, ' +
                             '            lp.Ordem ');

   qryLocal_Produtos.Parameters.ParamByName('Loja').Value :=
      cdsLocacao.FieldByName('codloj').asInteger;
   qryLocal_Produtos.Parameters.ParamByName('Quadra').Value :=
      cdsLocacao.FieldByName('codQuadra').asString;
   qryLocal_Produtos.Parameters.ParamByName('Setor').Value :=
      cdsLocacao.FieldByName('codSetor').asString;
   qryLocal_Produtos.Parameters.ParamByName('Rua').Value :=
      cdsLocacao.FieldByName('codRua').asString;
   qryLocal_Produtos.Parameters.ParamByName('Secao').Value :=
      cdsLocacao.FieldByName('codSecao').asString;

   qryLocal_Produtos.Open;



<  ___                       _      _              _      >
< / _ \                     | |    | |            | |     >
<| | | | ___ __  _  __ __ _ | |  __| |  ___       | |_ __ >
<| | | |/ __|\ \/ \/ // _` || | / _  | / _ \  _   | | '__|>
<| |_| |\__ \ \  _  /| (_| || || (_| || (_) || |__| | |   >
< \___/ |___/  \/ \/  \__,_||_| \__._| \___/ \_____/|_|   >
<               Oswaldo Ricardo da Rocha Jr               >
<    E-Mail:     [EMAIL PROTECTED], [EMAIL PROTECTED]     >
<                [EMAIL PROTECTED],    [EMAIL PROTECTED]     >
<    HP Pessoal: http://br.geocities.com/oswjr            >
<    Messenger   [EMAIL PROTECTED]                      >
<    ICQ:        66755778                                 >

________________________________________________________________________

     Data: Mon, 8 Aug 2005 09:44:11 -0300 (Hora oficial do Brasil)
       De: "Surrute - Yahoo!" <[EMAIL PROTECTED]>
  Assunto: Tabela temporária com MS-SQL

Por favor, alguém pode me dizer como usar tabelas temporárias no MS-SQL
através do Delphi?

Obrigado.

Sérgio R. Barbosa
Desenvolvimento



[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a