Domando su ADO

di il
2 risposte

Domando su ADO

Salve a tutti.
Io programmo in visual c++ e da poco utilizzo come accesso dati ADO. Devo trasformare in campo di una mia tabella access da intero a stringa. Qualcuno mi può dire come posso fare?
Grazie per l'aiuto, che sicuramente non tarderà ad arrivare.

Buona giornata

Barbara

2 Risposte

  • Re: Domando su ADO

    Questo codice lo preso da un sito che si occupa solo di access e programmazione guarda se ti può servire

    Quando manualmente si modificano le proprietà di un campo di una tabella, Access esegue durante questa operazione alcune azioni:
    - Aggiunge un nuovo campo con le proprietà richieste
    - Copia i dati dal campo originale al nuovo campo
    - Elimina il vecchio campo

    Per questo se si vuole effettuare questa operazione via codice si deve effettuare la stessa sequenza di operazioni.
    Quì trovate un demo di funzione che tramite predicato SQL esegue questo.
    Purtroppo ci sono proprietà che via SQL non possono essere modificate per questo motivo è obbligatorio appoggiarsi a DAO (come in questo caso per rinominare il campo).

    Sub sChangeField(strTableName As String, strFieldName As String, strFieldType As String)
    Dim db As DAO.Database
    Dim strSQL As String
    Set db = CurrentDb
    ' Aggiunge il Nuovo Campo nella Tabella con un Nome Temporaneo(TempField)
    strSQL = "ALTER TABLE [" & strTableName & "] ADD COLUMN [TempField] " & strFieldType & ";"
    db.Execute strSQL
    ' Copia i Dati dal Campo Esistente al Nuovo
    strSQL = "UPDATE DISTINCTROW [" & strTableName & "] SET [" & strFieldName & "]=[TempField];"
    db.Execute strSQL
    ' Elimina il Vecchio campo
    strSQL = "ALTER TABLE [" & strTableName & "] DROP COLUMN [" & strFieldName & "];"
    db.Execute strSQL
    ' Rinomina il Nuovo Campo con il nome del campo esistente
    db.TableDefs(strTableName).Fields("TempField").Name = strFieldName
    Set db = Nothing
    End Sub
    La Sub sChangeField() può essere richiamata nel seguebte modo:

    Call sChangeField("tblName","fldName","TEXT(100)")
    Come già accennato precedentemente, nella Sub sChangeField() si fa riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva ad Access 97, è necessario aggiungere tale libreria ai riferimenti del database.
    Se, sempre tramite DAO, si ha la necessità di aggiungere altre proprietà e/o attributi al nuovo campo, vedere quanto realizzato con il codice VBA pubblicato nella Sezione Tables del Sito Comune nella FAQ di Enrico Oemi intitolata 1.9 Modificare la struttura dati del BE via codice, direttamente dal FE.

    Nota di Giorgio Rancati
    Quanto scritto sopra è necessario solo se si usa Access 97; se si ha invece una versione di Access >= 2000 è sufficiente un Alter Column, come fra l'altro indicato nella KB Microsoft nell'articolo 275561:

    Description of the new features that are included in Microsoft Jet 4.0 Modifying existing tables
    http://support.microsoft.com/default.aspx?scid=kb;en-us;275561

    Ovvero:
    Currentdb.Execute "Alter Table NomeTabella Alter Column NomeCampo Datetime"
    ovviamente i dati nel tipo di campo testo devono rispettare il formato Data

    la fortuna aiuta la mente preparata
  • Re: Domando su ADO

    Grazie mille per l'aito. Provo subito a metterlo in pratica.

    Ciao
Devi accedere o registrarti per scrivere nel forum
2 risposte