wilKs
|
ITABORAÍ RJ - BRASIL
|
|
Postada em 30/06/2004 10:14 hs
Olá! Abri a Tabela1 de um Arquivo.mdb, e criei a Tabela2 "virtual" (ou seja, sem gravá-la em algum arquivo). Preciso saber como faço para copiar o conteúdo da Tabela1 dentro da Tabela2, sem que as alterações que eu fizer no conteúdo da Tabela2, alterem o conteúdo da Tabela1. Pois este comando não deixa a Tabela2 independente: Set Tabela2.DataSource = Tabela1 A quem puder ajudar, grato.
|
TÓPICO EDITADO
|
|
|
|
|
|
Postada em 30/06/2004 13:36 hs
Wilks, mesmo que você tente não irá conseguir usando recordsets pois, Eles herdam a definição da tabela ao qual ele foi gerado. Se vc alterar um registro ou adicionar o mesmo direto no recordset resultante de uma consulta (Ex.:"SELECT * FROM Tabela") mesmo não sendo a tabela propriamente dita isso irá ocorrer. O que voce pode fazer é declarar um tipo definido(Type...End Type) E jogar cada registro(Dentro do Type vc declara as váriáveis e seus respectivos tipos) e gravar dentro de um array, dinâmico ou não, e após isso usar um loop para incluir esses dados à sua tabela. Bem espero ter ajudado, Abraços, Sidnei Espero
|
|
|
wilKs
|
ITABORAÍ RJ - BRASIL
|
|
Postada em 30/06/2004 15:30 hs
X-Crow, valeu a força!! Mas é difícil acreditar que não exista nenhum comando ou meio predefinido de se copiar uma tabela, sem criar dependência entre elas...
|
|
|
|
Postada em 30/06/2004 17:57 hs
É possível criar sim mas vc teria de criar outra tabela para isso. Uma tabela temporária entende? Aí sim funcionaria... Mas vc teria de usar drop table toda vez com isso. Bem qualquer coisa tamos ae... Abraços, Sidnei
|
|
|
|
Postada em 01/07/2004 11:49 hs
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.MoveMin
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.MoveMin
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 É claro que os dados a transitar para a recordset serão apenas os existentes no momento da sua criação. Também é claro que pode fazer com uma recordset tudo o que faz com uma tabela(bem... quase tudo)
Espero que ajude
João Mateus
|
|
|
|