Newsgroup: it.comp.lang.visual-basic
Titolo: Copiare contenuto di un recordset su una tabelle di un altro DB

Avrei la necessita' di copiare il risultato di una select da un DB
Pervasive in una tabella temporanea di un DB SQL Server.
Naturalmente non posso utilizzare select into e non vorrei "scrivere"
campo per campo, sono circa un centinaio....
Qualche idea "alternativa" ?
Grazie a tutti, ciao,
LittleWave

 Qualche idea "alternativa" ?
Fatti una funzione che da un AdoRecordset restituisce la stringa INSERT
INTO, qualcosa del tipo :
Dim Campi As String, Valori As String, mySQL As String
Dim Rs As ADODB.Recordset
Dim Campo As ADODB.Field
'supponendo che rs sia la tua select sorgente 
'e adocn la connection sul nuovo db
Do Until Rs.EOF
    Campi = "":   Valori = ""
    For Each Campo In Rs.Fields
        Campi = Campi & Chr$(34) & Campo.Name & Chr$(34) & ","
        Valori = Valori & TypeCampo(Campo) & ","	'formatto il campo per DB
    Next
    If Len(Campi) > 0 Then Campi = Left$(Campi, Len(Campi) - 1)
    If Len(Valori) > 0 Then Valori = Left$(Valori, Len(Valori) - 1)
    mySQL = "INSERT INTO " & NomeTab & " (" & Campi & ") VALUES (" & Valori
& ");"
    AdoCN.Execute mySQL
    Rs.MoveNext
Loop

 campo per campo, sono circa un centinaio....
Quella sarebbe una puttanata da un minuto, in recordset c'è .fields che 
ti espone tutte le colonne con nome, tipo, dimensione, precisione, 
ecc..., per cui la copia si farebbe con un do while e una 
concatenazione.
Però devi usare SELECT INTO.
L'alternativa è un linked server...
Alberto
-- 
Noi ammazziamo solo per motivi buoni.
E quando sono buoni, sta a noi indicarlo.
[Guccini]

 LittleWave
Ciao, Vincenzo 

On 5 Feb, 09:31, "Andrea [Work]" <andrea.isworkDELET...@gmail.invalid>
wrote:

Grazie per il suggerimento, in effetti nel frattempo avevo adottato
una soluzione simile; ma nel tuo suggerimento non manca la creazione
della tabella di destinazione?
Cosa ho poi fatto:
- leggendo i .fields del recordset mi sono creato la stringa SQL di
creazione della tabella mantenendo le caratteristiche di ogni campo
- poi mi ho fatto una copia recordset su recordset
una cosa simile:
Do While Not lRstIn.EOF
     lRstOut.AddNew
     For lI = 0 To lRstIn.Fields.Count - 1
           lRstOut(lI).Value = lRstIn(lI).Value
     Next lI
     lRstOut.Update
     lRstContratti.MoveNext
Loop
Grazie di nuovo, ciao,
LittleWave

 Complimenti a chi ha progettato il db! ;-)
Grazie per il suggerimento ma non ho ancora un sufficiente livello di
conoscenze....
Ma cosa centrano i complimenti?
Ciao,
LittleWave


 Però devi usare SELECT INTO.
Grazie del suggerimento ma non ho capito, ciao,
LittleWave


Ma cosa centrano i complimenti?
Non hai visto la faccina... era ironico!
100 campi in una tabella di solito sono sintomo di una cattiva analisi! 
Possibile che giostrando un pò con le relazioni non sia possibile scomporre 
quella tabella in n tabelle?
Ciao, Vincenzo 

 Grazie di nuovo, ciao,
Imho, meglio utilizzare l'SQL INSERT che la value dei recordset, metti due
DB differenti gestiscano alcuni tipi di dato in maniera differente, o
comunque hai meno controllo su quello che succede.

 quella tabella in n tabelle?
Il discorso č anche, č comodo a livello di programma?
A livello di struttura sicuramente, ma se lavori sempre a corsa, se c'č da
aggiungere un campo nell'articolo a volte si fa prima, putroppo, a metterlo
in tabella.
Aggiungi oggi e aggiungi domani, alla fine hai 20 campi in piů :)

 server
Ad ogni modo non tutti i DB hanno questa funzionalitą. Qualcuno non lo fa
neanche fra un altro DB del suo stesso tipo.