Ciao a tutti, ho un problema.
Sto cercando di inserire records da una tabella Temp a una definitiva facendo un ciclo + o - come questo:

Dim rsTemp
    set rsTemp = Server.CreateObject("ADODB.RecordSet")
    rsTemp.Open "select * from MaterialTemp where Id_Usuario="&Session("Id_Usuario") , baseDB, 3,3    
  if not rsTemp.EOF then
      while not rsTemp.EOF
          Dim rsDev
            set rsDev = Server.CreateObject("ADODB.RecordSet")
            rsDev.Open "MaterialDevuelto" , baseDB, 3,3
            'if not rsDev.EOF then
                while not rsDev.EOF
                    rsDev.AddNew
                    'rsDev("Id_Usuario")=Session("Id_Usuario")
                    rsDev("Id_Devolucion")=identificador
                    rsDev("Referencia")=rsTemp("Referencia")
                    rsDev("Upn")=rsTemp("Upn")
                    rsDev("Nombre")=rsTemp("Nombre")
                    rsDev("Lote")=rsTemp("Lote")
                    rsDev("FechaCaducidad")=rsTemp("FechaCaducidad")
                    rsDev("Unidades")=rsTemp("Unidades")
                    rsDev("Estado")=rsTemp("Estado")    
                    rsDev.Update
                    'rsDev.MoveNext
                wend
                rsDev.MoveNext
            'end if
         wend
         rsTemp.MoveNext
     end if    


così facendo mi copia solo il primo record invece che tutti e mi da un errore:

Tipo de error:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E2F)
[Microsoft][Controlador ODBC Microsoft Access] Los cambios solicitados en la tabla no se realizaron correctamente porque crearían valores duplicados en el índice, clave principal o relación. Cambie los datos en el campo o los campos que contienen datos duplicados, quite el índice o vuelva a definir el índice para permitir entradas duplicadas e inténtelo de nuevo.
/psi_bsidevol2006/securetrans/devoluciones_edicion.asp, line 256


Come posso risolverlo? forse usando arrays?
thx
37 messaggi dal 12 ottobre 2005
ti da errore perchè cerchi di duplicare l'indice (chiave primaria) della tabella. devi controllare che tipo di dato è e se non è un contatore devi provvedere tu a incrementare la chiave primaria
37 messaggi dal 12 ottobre 2005
in ogni caso è sbagliato il ciclo. secondo me dovresti fare:
Dim rsTemp 
set rsTemp = Server.CreateObject("ADODB.RecordSet") 
rsTemp.Open "select * from MaterialTemp where Id_Usuario="&Session("Id_Usuario") , baseDB, 3,3 " 
if not rsTemp.EOF then
Dim strsql 
conn.begintrans
while not rsTemp.EOF 
strsql="insert into [nometabella] ([elenco dei campi]) values ([elenco dei valori])"
conn.execute strsql
rsTemp.MoveNext 
loop
conn.commitrans
end if

a grandi linee dovrebbe essere corretto

ps che figata access in spagnolo
ho provato così, non da errori ma non salva nella seconda tabella:

 Dim rsTemp
    Set rsTemp = Server.CreateObject("ADODB.Recordset")
    rsTemp.ActiveConnection = baseDB
    rsTemp.CursorType = adOpenForwardOnly
    rsTemp.LockType = adLockOptimistic
    rsTemp.Source = "SELECT * FROM MaterialTemp WHERE Id_Usuario=" & Session("Id_Usuario")
    rsTemp.Open

  set traslate_table = Server.CreateObject("ADODB.Command")
  traslate_table.ActiveConnection = baseDB
  traslate_table.CommandType = 1
  traslate_table.CommandTimeout = 0
  traslate_table.Prepared = true
    if not rsTemp.EOF then
      while rsTemp.EOF
        traslate_table.CommandText = "INSERT INTO MaterialDevuelto (Id_Devolucion, Referencia, Upn, Nombre, Lote, FechaCaducidad, Unidades, Estado) VALUES (" & identificador & ",'" & rsTemp("Referencia") & "','" & rsTemp("Upn") & "','" & rsTemp("Nombre") & "','" & rsTemp("Lote") & "','" & rsTemp("FechaCaducidad") & "'," & rsTemp("Unidades") & ",'" & rsTemp("Estado") & "')"
        traslate_table.Execute()
        
        rsTemp.Movenext
      wend
    end if


adesso provo anke la tua. thx.

ps: non ho solo access in spagnolo, ma tutto il resto visto ke faccio il programmatore (e vivo) a Madrid.Ciauz!
37 messaggi dal 12 ottobre 2005
non per farmi gli affari tuoi, ma si lavora bene in spagna (a livello di mercato del lavoro e retribuzione)? ho sempre avuto il pallino di andarci a vivere..
Ciao, su questo argomento ti rispondo nel forum OT-Lavorare in Spagna.
11.886 messaggi dal 09 febbraio 2002
Contributi
non puoi semplicemente fare una insert?

INSERT INTO tabellaDestinazione (campo1, campo2, campo3) SELECT campoA, campoB, campoC FROM tabellaSorgente WHERE campoA='parametro'

Enjoy learning and just keep making
Provato anche così, non da errori ma non salva nella seconda tabella... le tabelle sono simili ma non uguali.
materialtemp(sorgente) ha i seguenti campi: id_materialtemp,id_usuario,Referencia, Upn, Nombre, Lote, FechaCaducidad, Unidades, Estado.
materialdevuelto(destinazione) ha i seguenti campi: id_devolucion,Referencia, Upn, Nombre, Lote, FechaCaducidad, Unidades, Estado.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.