Connettersi a 2 db contemporaneamente

  • Creatore Discussione Creatore Discussione max1850
  • Data di inizio Data di inizio

max1850

Utente Attivo
8 Gen 2007
107
0
16
Cosenza
www.net-site.it
Salve. Mi spiego subito.
Nello stesso sito, per il momento in locale, ho 2 database in access a cui dovrei collegarmi per passare dei dati da uno all'altro, o meglio da una tabella ad un'altra, le quali risiedono in 2 db differenti.
E' possibile effettuare 2 connessioni contemporaneamente ed aprirle insieme, così da gestire con 1 query l'intero passaggio?

Ho scritto il seguente codice, ma non capisco come aprire le 2 connessioni contemporaneamente e come fare la query per questo passaggio dei dati.

<%
Dim conn
Set conn = Server.CreateObject ("ADODB.Connection")
str = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/mdb-database/UTENTI.mdb")"
conn.Open str

Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "UPDATE ??? "
rs.Open sql, conn

rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
%>

La connessione che creo su è per 1 solo database. Come creo l'altra?

Grazie :)
Max!
 
Max, "semplicemente", crea 2 volte l'oggetto Connection e l'oggetto Recordset.

Apri le due connessioni, prendi i dati dal database 1, inseriscili nel database 2, chiudi le due connessioni.

Tutto qui :)
 
Max, "semplicemente", crea 2 volte l'oggetto Connection e l'oggetto Recordset.

Apri le due connessioni, prendi i dati dal database 1, inseriscili nel database 2, chiudi le due connessioni.

Tutto qui :)

Ciao Luke!
Ho provato già così tante volte..sbaglierò sicuramente qualcosa che non riesco a capire.
Posto qui una sintesi del codice:

<%
Dim conn, conn2
'creo i 2 oggetti
Set conn = Server.CreateObject ("ADODB.Connection")
Set conn2 = Server.CreateObject ("ADODB.Connection")

' usiamo i 2 dsn
str = "UTENTI"
str2 = "CLIENTI"

'apriamo le connessioni
conn.Open str
conn2.Open str2

Dim rs, rs2
'creo i 2 oggetti Recordset
Set rs = Server.CreateObject("ADODB.Recordset")
Set rs2 = Server.CreateObject("ADODB.Recordset")

sql = " ??? "
sql2 = " ??? "

'Eseguo le 2 query
rs.Open sql, conn
rs2.Open sql2, conn2

'chiudiamo e distruggiamo gli oggetti
rs.Close
Set rs = Nothing
rs2.Close
Set rs2 = Nothing

conn.Close
Set conn = Nothing
conn2.Close
Set conn2 = Nothing

%>

Non riesco a fare le 2 query. In pratica devo copiare la tabella2 in tabella1 che sono però in database diversi.
Mi fai un esempio di update? Ma non basta 1 sola query o ce ne vogliono 2?

Ciao
Max!
 
Ultima modifica:
Provo a correggere il tuco codice:

HTML:
<%
Dim conn, conn2
Set conn = Server.CreateObject ("ADODB.Connection")
Set conn2 = Server.CreateObject ("ADODB.Connection")

str = "UTENTI"
str2 = "CLIENTI"

conn.Open str
conn2.Open str2

Dim rs
Set rs = Server.CreateObject("ADODB.Recordset") 

rs.Open "SELECT campo_testo, campo_numerico FROM tabella2", conn, 1
conn2.Execute("INSERT INTO tabella1 (campo_testo, campo_numerico) VALUES (('" & Replace(rs("campo_testo"), "'", "''") & ', " & rs("campo_numerico") & "))")
rs.Close
Set rs = Nothing

conn.Close 
Set conn = Nothing
conn2.Close 
Set conn2 = Nothing

%>

NON l'ho testato.

Ho ucciso il secondo Recordset che non ti serve ed ho aggiunto il cursore al primo Recordset in fase di lettura. Una volta letti di dati, usi il Recordset sui vari campi per eseguire la INSERT.

Fammi sapere se va.
 
Ciao Luke!
Ho provato fin'ora e sono finalmente riuscito a far funzionare la query, modificandola perchè c'era un problema o di apici o di altro...
Ora è così:
conn2.Execute( "INSERT INTO Calciatori (Calciatore) VALUES (('" & Replace(rs("Nome"), "'", "''") & "' ))" )

e serve per inserire solo il campo di testo "Nome".
Il problema ora è che inserisce solo il campo Nome del primo record. A me serve inserire il campo Nome di tutti i records della tabella.
Come si fa?

Ciao
Max!
 
Ultima modifica:
Eddai, un po di fantasia :)

rs.Open "SELECT campo_testo, campo_numerico FROM tabella2", conn, 1
While rs.EOF = False
' qui la insert come l'hai scritta tu
rs.MoveNext
Wend
rs.Close

Funge? ;)
 
Eddai, un po di fantasia :)

rs.Open "SELECT campo_testo, campo_numerico FROM tabella2", conn, 1
While rs.EOF = False
' qui la insert come l'hai scritta tu
rs.MoveNext
Wend
rs.Close

Funge? ;)
Ah... pensavo ci fosse una query che copiasse la tabella tutta in 1 volta...
Funziona tutto! :fonzie:

Grazie dell'aiuto! Se non ci fossi tu... ;)
Ciao
Max!
 
Salve, posso riprendere questa vecchia discussione? Il titolo è appropriato.
Gli esempi sotto riportati si riferiscono all'utilizzo di due DB con query diverse, ma se la query fosse unica?
Mi spego :

Codice:
SELECT (DB1.dbo.T_CORPO.C_UFF_SEGN) as comandoD, (DB1.dbo.T_CORPO.ANNO) as annoD, (DB1.dbo.T_CORPO.PROGRESSIVO) as numeroD, (DB2.dbo.T_CORPO.C_UFF_SEGN) as comandoV, (DB2.dbo.T_CORPO.ANNO) as annoV, (DB2.dbo.T_CORPO.PROGRESSIVO) as numeroV, (DB2.dbo.T_CORPO.RFRCNMBR_SDI) as rifSDI 
FROM DB1.dbo.T_CORPO, DB2.dbo.T_CORPO

WHERE DB1.dbo.T_CORPO.RFRCNMBR = DB2.dbo.T_CORPO.RFRCNMBR_SDI
AND DB1.dbo.T_CORPO.D_SEGN = DB2.dbo.T_CORPO.D_SEGN
AND DB1.dbo.T_CORPO.RFRCNMBR IN (SELECT DB2.dbo.T_CORPO.RFRCNMBR_SDI FROM DB2.dbo.T_CORPO WHERE DB2.dbo.T_CORPO.NOTA LIKE '%testodacercare%')

ora, pur creando due connessioni, quando arrivo qui :

objRs.Open myquery, ConnSQL

come gli dico che la connessione deve interessare entrambi i DB?
Altra cosa, per me è importante che l'utente che interroga i DB abbia solo diritti di lettura.

Grazie
 
Beh, altrove mi è stato detto che non è possibile connettersi contemporaneamente a due DB, ma il mio problema è che il risultato della prima query mi serve per costruire la seconda, quindi ho fatto così:

Codice:
'**********************************************
' COSTRUISCO LA QUERY
'**********************************************
myquery = "SELECT (DB2.dbo.TABELLAx.C_UFF_SEGN) as ufficioV, (DB2.dbo.TABELLAx.ANNO) as annoV, (DB2.dbo.TABELLAx.PROGRESSIVO) as numeroV, (DB2.dbo.TABELLAx.RFRCNMBR_SDI) as rifSDI, (DB2.dbo.TABELLAx.D_SEGN) as dataV FROM DB2.dbo.TABELLAx WHERE "
'**********************************************
' Mi connetto ai DB
'**********************************************
Set ConnSQLD = Server.CreateObject ("ADODB.Connection")
Set ConnSQLV = Server.CreateObject ("ADODB.Connection")
ConnSQLD = "Provider=sqloledb;Data Source="&ipServer&";Initial Catalog=DB1;User Id="&UserId&";Password="&Password&";"
ConnSQLV = "Provider=sqloledb;Data Source="&ipServer&";Initial Catalog=DB2;User Id="&UserId&";Password="&Password&";"
'**********************************************
'collegamento ai DB
Set objRs = Server.CreateObject("ADODB.Recordset")
Set objRs2 = Server.CreateObject("ADODB.Recordset")
objRs.Open myquery, ConnSQLV
While objRs.EOF = false
query2 = "SELECT (DB1.dbo.TABELLAx.C_UFF_SEGN) as ufficioD, (DB1.dbo.TABELLAx.ANNO) as annoD, (DB1.dbo.TABELLAx.PROGRESSIVO) as numeroD FROM DB1.dbo.TABELLAx WHERE DB1.dbo.TABELLAx.RFRCNMBR = '" & objRs("rifSDI") & "'"

objRs2.Open query2, ConnSQLD
'**********************************************
'valorizzo le variabili 
DATO1 = objRs("ufficioV")
DATO2 = objRS("annoV")
DATO3 = objRs("numeroV")
DATO4V = DATO1 & " " & DATO2 & " " & DATO3
While objRs2.EOF = false

'valorizzo le variabili 
DATO1 = objRs2("ufficioD")
DATO2 = objRS2("annoD")
DATO3 = objRs2("numeroD")
DATO4D = DATO1 & " " & DATO2 & " " & DATO3
'**********************************************
' STAMPO RISULTATI
'**********************************************
%>
<br>
<p> <b><font size="2">- <%=DATO4V%>           <--->    <%=DATO4D%></font></b> 
<%
'**********************************************
objRs2.MoveNext
Wend
objRS2.Close()
objRs.MoveNext
Wend
' chiudo e distruggo tutto
Set objRS2 = Nothing
objRS.Close()
Set objRS = Nothing
'**********************************************
 

Discussioni simili