Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

Problemi creazione campo di una tabella Precisione Doppia

  1. #1
    L'avatar di Elimar
    Elimar non è in linea Scribacchino
    Ciao a tutti,
    ho provato a cercare in rete una soluzione al mio problema, ma per miei limiti, non sono giunto a capo del mio problema.
    Ho la necessità di aggiungere un campo in una tabella che creo in questo modo:

      strSQL = "SELECT SupportoDettaglio.[Acr Contr], SupportoDettaglio.[Descrizione Contratto], SupportoDettaglio.Elemento, SupportoDettaglio.[Codice Titolo], SupportoDettaglio.ISIN, SupportoDettaglio.[Des VM], SupportoDettaglio.Valore, SupportoDettaglio.[Descrizione Ente Emittente], SupportoDettaglio.[Patrimonio Dossier], SupportoDettaglio.[% su Patr Dossier], Null as [Ricalcola %], Null AS Sforamento, First(SupportoDatasim.[Perce min]) AS [Perce min], First(SupportoDatasim.[Perce MAX]) AS [Perce MAX], First(SupportoDatasim.[Linea Gestione]) AS [Linea Gestione], Null AS Tipologia INTO NEWSupportoDettaglio"
      strSQL = strSQL + " FROM SupportoDettaglio INNER JOIN SupportoDatasim ON (SupportoDettaglio.[Acr Contr] = SupportoDatasim.[Acr contratto]) AND (SupportoDettaglio.Elemento = SupportoDatasim.[Raggr Titoli])"
      strSQL = strSQL + " GROUP BY SupportoDettaglio.[Acr Contr], SupportoDettaglio.[Descrizione Contratto], SupportoDettaglio.Elemento, SupportoDettaglio.[Codice Titolo], SupportoDettaglio.ISIN, SupportoDettaglio.[Des VM], SupportoDettaglio.Valore, SupportoDettaglio.[Descrizione Ente Emittente], SupportoDettaglio.[Patrimonio Dossier], SupportoDettaglio.[% su Patr Dossier], Null, Null"
    
    visto che così facendo i campi che mi crea sono Binari, (vedi sotto i campi)
    Null as [Ricalcola %],
    Null AS Sforamento,
    Null AS Tipologia
    
    ho pensato di bypassare il problema in questo modo:
      If campoEsiste(CurrentDb, "NEWSupportoDettaglio", "Tipologia") = False Then DBEngine(0)(0).Execute "ALTER TABLE NEWSupportoDettaglio ADD COLUMN Tipologia TEXT(3)"
      If campoEsiste(CurrentDb, "NEWSupportoDettaglio", "Sforamento") = False Then DBEngine(0)(0).Execute "ALTER TABLE NEWSupportoDettaglio ADD COLUMN Sforamento TEXT(25)"
      If campoEsiste(CurrentDb, "NEWSupportoDettaglio", "Ricalcola%") = False Then DBEngine(0)(0).Execute "ALTER TABLE NEWSupportoDettaglio ADD COLUMN Ricalcola% DOUBLE"
    
    
    unico problema nella parte in rosso che mi restituisce il seguente errore "ERRORE DI SINTASSI NELLA DEFINIZIONE DEL CAMPO."
    non riesco assolutamente a capire come correggerlo.

    Grazie a tutti per eventuali dritte.

    Ciaoooooo
    ℹ️ Leggi di più su Elimar ...

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Hai provato a mettere
    cDbl(0) As ....
    
    Ovviamente viene valorizzato a Zero... ma siccome un DOUBLE non supporta Null il tuo metodo non va bene.

    Io non uso MAI quei metodi per modificare campi in Tabelle, sono nella sostanza incontrollabili..., se hai come BE JET, meglio di usare il codice....

    https://docs.microsoft.com/en-us/off...eld-method-dao

    P.S. Attenzione ai caratteri SPECIALI... e [%] è molto molto pericoloso usato come hai fatto tu...!

    Se vuoi usare un comando DDL
    DBEngine(0)(0).Execute "ALTER TABLE NEWSupportoDettaglio ADD COLUMN Ricalcola Double(Fixed,3)"
    
    Ma non l'ho provato... e non sono certissimo che DAO supporti i comandi DDL...
    Ultima modifica di @Alex; 25-02-2020 16:51 
    ℹ️ Leggi di più su @Alex ...

  3. #3
    L'avatar di Elimar
    Elimar non è in linea Scribacchino
    Grazie Alex preziosissimo come al solito.

    Ho risolto in questo modo:
    nella prima creazione della tabella ometto i 3 campi che mi danno problemi.


    Successivamente ho sostituito i comandi SQL con il seguente codice:

    Dim fld As DAO.Field
      
      If campoEsiste(CurrentDb, "NEWSupportoDettaglio", "Tipologia") = False Then
        Set fld = CurrentDb.TableDefs("NEWSupportoDettaglio").CreateField("Tipologia", dbText, 3)
        CurrentDb.TableDefs("NEWSupportoDettaglio").Fields.Append fld
      Else: MsgBox ("Il campo che si vuole aggiungere esiste già nella tabella, per tanto non verrà effettuata nessuna operazione")
      End If
      
      If campoEsiste(CurrentDb, "NEWSupportoDettaglio", "Sforamento") = False Then
        Set fld = CurrentDb.TableDefs("NEWSupportoDettaglio").CreateField("Sforamento", dbText, 25)
        CurrentDb.TableDefs("NEWSupportoDettaglio").Fields.Append fld
      Else: MsgBox ("Il campo che si vuole aggiungere esiste già nella tabella, per tanto non verrà effettuata nessuna operazione")
      End If
      
      If campoEsiste(CurrentDb, "NEWSupportoDettaglio", "Ricalcola") = False Then
        Set fld = CurrentDb.TableDefs("NEWSupportoDettaglio").CreateField("Ricalcola", dbDouble)
        CurrentDb.TableDefs("NEWSupportoDettaglio").Fields.Append fld
      Else: MsgBox ("Il campo che si vuole aggiungere esiste già nella tabella, per tanto non verrà effettuata nessuna operazione")
      End If
      Set fld = Nothing
    
    ℹ️ Leggi di più su Elimar ...

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Prendi in considerazione anche questa opzione nativa che sfrutta CreateField, la sostanza è la medesima ma risulta più pulito:
    
    Dim tdf As DAO.Tabledef
    
    Set tdf= CurrentDb.TableDefs("NEWSupportoDettaglio")
    If campoEsiste(CurrentDb, "NEWSupportoDettaglio", "Tipologia") = False Then
        tdf.Fields.Append tdf.CreateField("Tipologia", dbText,3) 
    Else: MsgBox ("Il campo che si vuole aggiungere esiste già nella tabella, per tanto non verrà effettuata nessuna operazione")
    End If
    
    If campoEsiste(CurrentDb, "NEWSupportoDettaglio", "Sforamento") = False Then
        tdf.Fields.Append tdf.CreateField("Sforamento", dbText,25) 
    Else: MsgBox ("Il campo che si vuole aggiungere esiste già nella tabella, per tanto non verrà effettuata nessuna operazione")
    End If
      
    If campoEsiste(CurrentDb, "NEWSupportoDettaglio", "Ricalcola") = False Then
        tdf.Fields.Append tdf.CreateField("Ricalcola", dbDouble) 
    Else: MsgBox ("Il campo che si vuole aggiungere esiste già nella tabella, per tanto non verrà effettuata nessuna operazione")
    End If
    
    Set tdf=Nothing
    
    Personalmente però avrei scritto la funzione in questo modo, mi pare decisamente più tecnica e leggibile:
    Function AddField()
        On Error GoTo Err_Handler
        Dim tdf As DAO.TableDef
        
        Set tdf = DBEngine(0)(0).TableDefs("NEWSupportoDettaglio")
        tdf.Fields.Append tdf.CreateField("Tipologia", dbText, 3)
        tdf.Fields.Append tdf.CreateField("Sforamento", dbText, 25)
        tdf.Fields.Append tdf.CreateField("Ricalcola", dbDouble)
    
    Exit_Here:
        Set tdf=Nothing
        Exit Function
    
    Err_Handler:
        Select Case Err.Number
            Case 3191:
                MsgBox ("Il campo che si vuole aggiungere esiste già nella tabella, per tanto non verrà effettuata nessuna operazione")
                Resume Next
            Case Else
                MsgBox Err.Number & vbNewLine & Err.Description
                Resume Exit_Here
        End Select
    End Function
    
    Ultima modifica di @Alex; 26-02-2020 11:15 
    ℹ️ Leggi di più su @Alex ...

  5. #5
    L'avatar di Elimar
    Elimar non è in linea Scribacchino
    Grazie Alex
    ℹ️ Leggi di più su Elimar ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Problemi SQL Server creazione tabella, errore non chiaro
    Da lenna85 nel forum Microsoft SQL Server
    Risposte: 11
    Ultimo Post: 07-11-2014, 00:12
  2. Aiuto creazione cartella clinica-aggiornamento campo tabella
    Da radiatorista nel forum Microsoft Access
    Risposte: 24
    Ultimo Post: 26-12-2012, 22:32
  3. Risposte: 5
    Ultimo Post: 18-04-2012, 11:59
  4. Doppia ricerca su tabella
    Da alimax88 nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 10-04-2011, 22:49
  5. Precisione doppia imprecisa?
    Da Gpanz nel forum Visual Basic .Net
    Risposte: 2
    Ultimo Post: 20-01-2008, 23:17