TABELA TEMPORARIA NO VB?

USUARIO.EXCLUIDOS 01/07/2004 09:09:24
#31807
Pessoal,

Trabalho com uma linguagem que permite a criação de tabelas temporárias, assim como as variáveis eu posso defini-las no prórpio programa e seu scopo é somente o programa que está em execução...
Tem como fazer isso no Vb? Ou algo semelhante? (Sem usar tabelas genéricas no banco, pelo amor de deus.. ehheh)..

Valeu.
USUARIO.EXCLUIDOS 01/07/2004 11:36:59
#31832
Resposta escolhida
Para quê tabelas temporárias se se pode usar recordsets, que apenas ocupam... memória.

Eis um exemplo:

'Cria Recordset temporária para o Cabeçalho da Guia

Set rstGuiaTemp = New ADODB.Recordset

With rstGuiaTemp


.Fields.Append "Coddist", adUnsignedBigInt
.Fields.Append "Dist", adVarChar, 60
.Fields.Append "Distmorada", adVarChar, 60
.Fields.Append "Distlocal", adVarChar, 60
.Fields.Append "Distcpost", adInteger
.Fields.Append "Distcpost1", adInteger
.Fields.Append "Distcpostdesig", adVarChar, 25
.Fields.Append "Disttel", adVarChar, 15
.Fields.Append "Distfax", adVarChar, 15
.Fields.Append "Coddest", adVarChar, 9
.Fields.Append "Dest", adVarChar, 60
.Fields.Append "Destmorada", adVarChar, 60
.Fields.Append "Destlocal", adVarChar, 60
.Fields.Append "Destcpost", adInteger
.Fields.Append "Destcpost1", adInteger
.Fields.Append "Destcpostdesig", adVarChar, 60
.Fields.Append "Destnumcontr", adUnsignedBigInt
.Fields.Append "Id_movimento", adVarChar, 10
.Fields.Append "Guia_num", adVarChar, 10
.Fields.Append "Data", adDate
.Fields.Append "Total", adUnsignedBigInt
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open

'Preenche a Recordset para o Cabeçalho da Guia

strSql = "SELECT tMOVIMENTOS.codigo AS coddist,tMOVIMENTOS.ent_num AS coddest,"
strSql = strSql & "mid(tMOVIMENTOS.mov_docref, 5, 10) AS guia_num, "
strSql = strSql & "tMOVIMENTOS.mov_tipo, tMOVIMENTOS.id_movimento as id_movimento,"
strSql = strSql & "tMOVIMENTOS.data AS Data,sum(tMOVIMENTOSdet.valor) as total "
strSql = strSql & "FROM tMOVIMENTOS, tMOVIMENTOSdet "
strSql = strSql & "WHERE tMOVIMENTOS.codigo = tMOVIMENTOSdet.codigo "
strSql = strSql & "AND tMOVIMENTOS.id_movimento = tMOVIMENTOSdet.id_movimento "
strSql = strSql & "GROUP BY tMOVIMENTOS.codigo,tMOVIMENTOS.ent_num, mid(tMOVIMENTOS.mov_docref, 5, 10),"
strSql = strSql & "tMOVIMENTOS.mov_tipo , tMOVIMENTOS.id_movimento, tMOVIMENTOS.Data "
strSql = strSql & "HAVING (tMOVIMENTOS.codigo =" & cod & ") AND (tMOVIMENTOS.id_movimento = '" & id & "')"
strSql = strSql & " ORDER BY tMOVIMENTOS.id_movimento, tMOVIMENTOS.codigo "
Set rstGuiaSelect = New ADODB.Recordset

rstGuiaSelect.CursorLocation = adUseClient
rstGuiaSelect.Open strSql, dbDados, adOpenKeyset, adLockReadOnly, adCmdText

Do While Not rstGuiaSelect.EOF
rstGuiaTemp.AddNew
rstGuiaTemp("Coddist") = rstGuiaSelect("codDist")
rstGuiaTemp("Coddest") = rstGuiaSelect("codDest")
rstGuiaTemp("Id_movimento") = rstGuiaSelect("Id_movimento")
rstGuiaTemp("Guia_num") = rstGuiaSelect("Guia_num")
rstGuiaTemp("Data") = rstGuiaSelect("Data")
rstGuiaTemp("Total") = rstGuiaSelect("Total")
rstGuiaTemp.Update
rstGuiaSelect.MoveNext
Loop
Set rstGuiaSelect = Nothing

'actualiza o cabeçalho com os Dados do Distribuidor

Do While Not rstGuiaTemp.EOF
rstGuiaTemp.MoveFirst

cod = CLng(rstGuiaTemp("CodDist"))

strSql = "SELECT tENTIDADES.ent_num,tENTIDADES.ent_num_contr as Distnumcontr, tENTIDADES.ent_nome AS dist,tENTIDADES.ent_morada AS distmorada,"
strSql = strSql & "tENTIDADES.ent_local AS distlocal,tENTIDADES.cpos_codig AS distcpost,"
strSql = strSql & "tENTIDADES.cpost_desig AS distcpostdesig, tENTIDADES.cpos_codig1 AS distcpost1,"
strSql = strSql & "tENTIDADES.ent_tel AS disttel, tENTIDADES.ent_fax AS distfax "
strSql = strSql & "FROM tENTIDADES "
strSql = strSql & "WHERE tENTIDADES.ent_num = " & cod & " "
strSql = strSql & "GROUP BY tENTIDADES.ent_num,tENTIDADES.ent_num_contr,tENTIDADES.ent_nome, tENTIDADES.ent_morada, tENTIDADES.ent_local,"
strSql = strSql & "tENTIDADES.cpos_codig, tENTIDADES.cpost_desig,"
strSql = strSql & "tENTIDADES.cpos_codig1, tENTIDADES.ent_tel,tENTIDADES.ent_fax "

Set rstEntidadesTemp = New ADODB.Recordset
rstEntidadesTemp.Open strSql, dbEntidades, adOpenKeyset, adLockReadOnly, adCmdText


rstGuiaTemp("Dist") = rstEntidadesTemp("Dist")
rstGuiaTemp("Distmorada") = rstEntidadesTemp("Distmorada")
rstGuiaTemp("Distlocal") = rstEntidadesTemp("Distlocal")
rstGuiaTemp("Distcpost") = rstEntidadesTemp("Distcpost")
rstGuiaTemp("Distcpost1") = rstEntidadesTemp("Distcpost1")
rstGuiaTemp("Distcpostdesig") = rstEntidadesTemp("Distcpostdesig")
rstGuiaTemp("Disttel") = IIf(rstEntidadesTemp("Disttel") > " ", rstEntidadesTemp("Disttel"), 0)
rstGuiaTemp("Distfax") = IIf(rstEntidadesTemp("Distfax") > "", rstEntidadesTemp("Distfax"), 0)

rstGuiaTemp.Update
rstGuiaTemp.MoveNext
Set rstEntidadesTemp = Nothing
Loop

'actualiza o cabeçalho com os dados do Destinatário

rstGuiaTemp.MoveFirst

Do While Not rstGuiaTemp.EOF

cod = CLng(rstGuiaTemp("Coddest"))

strSql = "SELECT tENTIDADES.ent_num_contr as Destnumcontr,tENTIDADES.ent_nome AS dest,tENTIDADES.ent_morada AS destmorada, "
strSql = strSql & "tENTIDADES.ent_local AS destlocal, tENTIDADES.cpos_codig AS destcpost,"
strSql = strSql & "tENTIDADES.cpos_codig1 AS destcpost1, tENTIDADES.cpost_desig AS destcpostdesig "
strSql = strSql & "FROM tENTIDADES "
strSql = strSql & "WHERE tENTIDADES.ent_num =" & cod & " "
strSql = strSql & "GROUP BY tENTIDADES.ent_num_contr,tENTIDADES.ent_nome, tENTIDADES.ent_morada,"
strSql = strSql & "tENTIDADES.ent_local, tENTIDADES.cpos_codig, "
strSql = strSql & "tENTIDADES.cpos_codig1, tENTIDADES.cpost_desig "


Set rstEntidadesTemp = New ADODB.Recordset
rstEntidadesTemp.Open strSql, dbEntidades, adOpenKeyset, adLockReadOnly, adCmdText

rstGuiaTemp("Dest") = rstEntidadesTemp("Dest")
rstGuiaTemp("Destnumcontr") = rstEntidadesTemp("Destnumcontr")
rstGuiaTemp("Destmorada") = rstEntidadesTemp("Destmorada")
rstGuiaTemp("Destlocal") = rstEntidadesTemp("Destlocal")
rstGuiaTemp("Destcpost") = rstEntidadesTemp("Destcpost")
rstGuiaTemp("Destcpost1") = rstEntidadesTemp("Destcpost1")
rstGuiaTemp("Destcpostdesig") = rstEntidadesTemp("Destcpostdesig")


rstGuiaTemp.Update
rstGuiaTemp.MoveNext
Set rstEntidadesTemp = Nothing
Loop


End With

Espero que ajude


Tópico encerrado , respostas não são mais permitidas