Newsgroup: it.comp.appl.access
Titolo: Consiglio per problemino con copia record (con recordset)

Salve al NG, ritorno con un piccolo problemino che per voi
  dovrebbe essere una cosa banale... ^_^
In Access 2007.
Ho una maschera in visualizzazione "Maschere continue",
  nella quale cliccando un pulsante mi clona il record
  corrispondente a quel pulsante in un nuovo record.
Anche scegliendo a caso i record da copiare, tali record vengono copiati 
correttamente fino a quando si presentano 2 casi di errore:
1° se scelgo di copiare l'ultimo record nell'elenco
2° dopo un tot di record copiati (il numero dei record copiati, prima
    che si presenti l'errore, non è costante), cominciano a crearsi
    nuovi record completamente vuoti
Riporto brevemente ciò che è scritto a codice:
----------------------------------
[In modulo]
----------------------------------
  Public RecCorr As Integer
Sub COPIArec(TABdaCopiare As String)
Set RS = CurrentDb.OpenRecordset(TABdaCopiare)
  RS.MoveFirst
  RS.Move RecCorr - 1
Set RS2 = CurrentDb.OpenRecordset(TABdaCopiare)
   RS2.AddNew
   RS2.Update
   RS2.MoveLast
   For i = 1 To RS.Fields.Count - 1
       If Not (IsNull(RS.Fields(i).Value)) Then
          RS2.Edit
          RS2.Fields(i) = RS.Fields(i)
          RS2.Update
       End If
   Next i
  RS.Close
  RS2.Close
End Sub
----------------------------------
[In Maschera]
----------------------------------
Private Sub ComandoCopia_click()
      RecCorr = Me.CurrentRecord
      DoCmd.Close acForm, "Copia"
COPIArec ("Tabella1")
COPIArec ("Tabella2")
COPIArec ("Tabella3")
      DoCmd.OpenForm "Copia"
      DoCmd.GoToRecord , , acLast
      DoCmd.Maximize
End Sub
Suggerimendi? :-}
-- 
Giovanni.


Ciao Giovanni,
a quanto vedo manca il reìiferimento esplicito al record da copiare.
Me.CurrentRecord questo è il numero di record visualizzato nella form
e non l'id univoco del record.
supponiamo che la tabella1 abbia un campo di tipo contatore e univoco
di nome ID
alla routine Sub COPIArec(TABdaCopiare As String) dovrai passare anche
il valore dell'id
es.
 Public RecCorr As Integer
 Sub COPIArec(TABdaCopiare As String, vId as long)
 dim sql as string
sql = "Select * From " & TABdaCopiare & " Where id = " & vid
 Set RS = CurrentDb.OpenRecordset(sql, 4 )
 Set RS2 = CurrentDb.OpenRecordset(TABdaCopiare)
    RS2.AddNew
    For i = 1 To RS.Fields.Count - 1
                  ' ATTENZIONE IN QUESTA FASE DEVI SANTARE LA COPIA
DEL CAMPO ID IN QUANTO È CONTATORE
              If Not RS.Fields(i).NAME <> "ID" Then
                  If Not (IsNull(RS.Fields(i).Value)) Then
                      RS2.Fields(i) = RS.Fields(i)
                  End If
              END IF
    Next i
RS2.Update
   RS.Close
   RS2.Close
 End Sub
 ----------------------------------
 [In Maschera]
 ----------------------------------
 Private Sub ComandoCopia_click()
      if newrcord() then exit sub
      COPIArec ("Tabella1", 
me.id
)
 End Sub
'
Andrea Papi
http://www.papiandrea.it

 e non l'id univoco del record.
Premesso che ho capito che suggerisci di prendere il numero del record
  dal campo contatore (quindi univoco) anziché dal me.CurrentRecord.
Perdona la mia cocciutaggine / voglia di capire ^_^
La cosa che non riesco a capire, magari è una banalità che non riesco a
  vedere...
Se nella maschera non ci sono ordinamenti/filtri e vedo che al record
  N visualizzato nella maschera corrisponde effettivamente il record N
  della tabella (avendo messo una casella che mostra il contatore in
  ogni record/riga della maschera...)
Quindi quando clicco sul pulsante "del record N" già in quel momento il
  Me.CurrentRecord diviene il numero del record N, come vedo
  ulteriormente da codice con MsgBox RecCorr
(dove RecCorr = me.CurrentRecord)
Se le righe del codice fossero completamente sbagliate, il copia non
  funzionerebbe mai correttamente... o no?
Non riesco a capire perché dopo un tot di copie, comincia a non
  funzionare pur "dicendomi" (msgbox) che ha copiato il record N che ho
  selezionato...
Posso capire l'eventuale risposta:
  "Fai come ho detto e non rompere più le @@..." :-D
-- 
A.Giovanni.B.

 Suggerimendi? :-}
Do.
--
ac

 Do.
Tnk ^_^
-- 
LEOrap on SoFàzer600 '04
IHMS-Bergamo

  trascurabile, perdita di tempo nel continuo salvare)
Secondo me il tuo problema non deriva dalle update ripetute ma succede 
qualcosa sul record su cui stai facendo la update. Potrebbe non essere 
quello giusto.
Inoltre non capisco per quale motivo riapri il recordset da copiare, li 
c'e' un altro possibile elemento di errore nel fare il riposizionamento.
Passa alla sub il record da copiare e amen (mi sembra che gia' lo salvi 
nella funzione chiamante)
ahhh... tra l'altro forse io avrei eliminato la if
--
ac