Newsgroup: it.comp.lang.visual-basic
Titolo: DUPLICARE UNA TABELLA IN UN DATABASE

Buona giornata a chi mi legge !!
sono come al solito a richiedere qualche suggerimento.
problema :
database DB
con varie tabelle , vorrei duplicarne una cambiandole nome,
ho cercato di risolvere il problema cosi :
Private Sub CreateAmbi()
    EnterRecordset ("ARC-AMBI")  ***** tabella da copiare **********
    Dim i As Integer
    For i = 0 To RS.Fields.Count - 1
    If i = 0 Then
    DB.Execute "CREATE TABLE AMBI0107 (" & RS.Fields(i).Name & " TEXT (" & 
RS.Fields(i).Size & "))"
    Else:
    If RS.Fields(i).Type = 20 Then DB.Execute "ALTER TABLE AMBI0107 ADD 
COLUMN " & RS.Fields(i).Name & " SINGLE "
    If RS.Fields(i).Type = 3 Then DB.Execute "ALTER TABLE AMBI0107 ADD 
COLUMN " & RS.Fields(i).Name & " INT "
    If RS.Fields(i).Type <> 20 And RS.Fields(i).Type <> 3 Then DB.Execute 
"ALTER TABLE AMBI0107 ADD COLUMN " & RS.Fields(i).Name & " TEXT (" & 
RS.Fields(i).Size & ")"
    End If
    Next i
    Set RS = DB.OpenRecordset("ARC-AMBI", dbOpenDynaset) ***** tabella da 
copiare *****
    Set R2 = DB.OpenRecordset("AMBI0107", dbOpenDynaset)   ***** tabella 
copiata *******
    Do While Not RS.EOF
    R2.AddNew
    For i = 0 To RS.Fields.Count - 1
    R2.Fields(i) = RS.Fields(i)
    Next i
    R2.Update
    RS.Delete
    RS.MoveNext
    Loop
    End Sub
il problema che il tipo dato non corrisponde nelle due tabelle , cioè non 
riesco a fare in modo che un certo campo della tabella si di tipo numerico 
decimale , in quanto usando DECIMAL non viene riconosciuto come tipo dato,
in poche parole sapete quali sono i tipi di dati oltre INTEGER LONG SINGLE 
TEXT che si possono utilizzare ( mi interesserebbero decimale e intero  If 
RS.Fields(i).Type = 20 e RS.Fields(i).Type = 3
spero di essere stato chiaro, grazie a tutti e buona giornata !! 

 
hai varie strade possibili, se vuoi semplicemente ricopiare una tabella, 
senza ricreare indici e cose varie, e' sufficiente questo statement SQL:
"SELECT * INTO AMBI0107 FROM ARC-AMBI;"
questo crea la tabella e ci copia i dati dentro ( nota dopo il FROM ci 
puo' essere anche una query completa quindi con selezione parziale di 
campi, con WHERE per selezionare i record ed addiruttura JOIN )
per creare una tabella puoi passare tramite l'oggetto "tabledef" ed i 
suoi "field " anche in scrittura, in questo caso i tipi corrispondono 
1-1 con i tipi dei fields dei recordset , maggiori dettagli li trovi 
nell'help di VB
probabilmente il tipo DECIMAL che cerchi tu si chiama CURRENCY o MONEY 
per il Jet, anche qui una lista dei tipi li trovi nell'help di VB alla 
voce :
"Equivalent ANSI SQL Data Types"

 spero di essere stato chiaro, grazie a tutti e buona giornata !!
Dipende da qualche database utilizzi, ad esempio firebird ha delle tabelle
di sistema dove c'č la definizione del tipo e ti puoi ricostruire la
stringa SQL, altri avranno qualcosa di piů o meno automatico
-- 
DBMS Firebird
VB6 + Ado

 "Equivalent ANSI SQL Data Types"
Mi sono sempre domandato perché SQL, originariamente nato con lo scopo di 
*standardizzare* la sintassi del colloquio con una base dati, si sia poi 
evoluto nel tempo in almeno un "centinaio di dialetti"...
E' una cosa che, ancora oggi a pensarci, mi manda in bestia!! :-(
B.

 "SELECT * INTO AMBI0107 FROM ARC-AMBI;"
Grazie per il suggerimento, ma forse devo impostare qualche altra cosa, in 
quanto con il comando
   DB.Execute "SELECT * INTO AMBI0107 FROM ARC-AMBI;"
mi viene un errore tipo 3131 errore di sintassi nella proposizione FROM
e con
   DB.Execute "SELECT * INTO AMBIpro FROM (ARC-AMBI);"
mi viene un errore tipo 3135 errore di sintassi nella operazione JOIN
la tabella è di tipo acces2000 e uso
        Public Declare Function ShellExecute Lib "shell32.dll" Alias 
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal 
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, 
ByVal nShowCmd As Long) As Long

 
non capisco a cosa serva la shellexecute , o forse non ho capito bene in 
che ambiente stai lavorando, io facevo riferimento a VB6 ed all'uso di 
DAO ( visto come apri i recordset la sintassi mi sembrava quella ) ed ad 
oggetti DataBase

 mare di confusione su queste cose ) dia problemi di questo tipo
HO provato cambiando il nome della tabella da ARC-AMBI a ARCAMBI e ora 
funziona, ma per non dover cambiare tutto il progetto, qualcuno sa come 
farlo accettare dal computer il nome ARC-AMBI,
ho provato con le parentesi quadre e non funziona ....
grazie a tutti in ogni caso 


perche' nella grande bonta' dal parser SQL di microsoft "-" e' 
riconosciuto come operatore ( di sottrazione )
e' strano pero' che con le quadre non venga accettato, infatti il solito 
DAO3.51 lo accetta cosi'
"SELECT * INTO AMBI0107 FROM [ARC-AMBI];"
nota bene il mio test su di un mio DB e' stato questo:
"select * into [cippolo]  from [cippolo-1]"
comunquec evito accuratamente tutti i caratteri strani nei nomi delle 
tabelle, evito cosi' l'uso delle parentesi quadre , preferisco risolvere 
il problema alla radice :-)
tra l'altro evita anche di usare come nome ( di campo/tabella ) NOTE, e' 
anch'esso un token riservato ed il SQL non lo gradisce
