Newsgroup: it.comp.appl.access
Titolo: Proprieta' campo REQUIRED che non funziona

Sto trasportando struttura e dati di un db Firebird, acceduto via odbc 
da Access (2013), su un Sql Server sempre via odbc
Quando vado a leggere la struttura del db sorgente, per ricrearla sul db 
destinazione, devo riconoscere i campi 'not null' per definirli 
correttamente sul db destinazione
Ho provato a leggere la proprieta' REQUIRED dei singoli campi ma viene 
restituita sempre false, anche per i campi db sorgente che hanno il 'not 
null'
Da premettere che se da Access collego le tabelle, poi vado nella 
struttura della tabella, vedo la proprieta' RICHIESTO correttamente 
settata, in base a questo penso di poter escludere malfunzionamenti del 
drver odbc usato
Se provo ad eseguire il frammento di codice in fondo a questa pagina
 
https://msdn.microsoft.com/en-us/library/office/ff192247.aspx
 
 
mi viene restituito sempre FALSE, anche per i campi che sono 'not null'
Allora ho provato la proprieta Attributes dei singoli campi, 
mascherandole con i valori corrispondenti all'attributo che mi 
interessava, seguendo questo esempio
 
http://www.tek-tips.com/viewthread.cfm?qid=1408567
 
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/fieldattributeenum
 
 
Ma ne' filtrando col  adFldIsNullable  ne' col adFldMayBeNull  viene 
restituito qualcosa diverso dal False
Inzomma, se vedo la proprieta' RICHIESTO nella struttura della tabella 
collegata, come mai non lo leggo da codice Vba?
Sballio nome proprieta'?
 
-----------------------------------------------------------
 
Set MyDbSorg = DAO.OpenDatabase(nome_dsn, False, False, "ODBC;DSN=" & 
nome_dsn)
For Count_Tabella = 0 To MyDbSorg.TableDefs.count - 1
             nome_tabella = MyDbSorg.TableDefs(Count_Tabella).name
 
             For Count_Campo = 0 To 
MyDbSorg.TableDefs(nome_tabella).Fields.count - 1
                  nome_campo = 
UCase$(MyDbSorg.TableDefs(nome_tabella).Fields(Count_Campo).name)
                  tipo_campo = 
MyDbSorg.TableDefs(nome_tabella).Fields(Count_Campo).Type
 
                  If 
MyDbSorg.TableDefs(nome_tabella).Fields(Count_Campo).Attributes And 
adFldMayBeNull Then
                      Flag_1 = 1
                      Else
                      Flag_1 = 0
                      End If
 
                  If 
MyDbSorg.TableDefs(nome_tabella).Fields(Count_Campo).Attributes And 
adFldIsNullable Then
                      flag_2 = 1
                      Else
                      flag_2 = 0
                      End If
 
                  att = 
MyDbSorg.TableDefs(nome_tabella).Fields(Count_Campo).Attributes
 
                  If 
MyDbSorg.TableDefs(nome_tabella).Fields(Count_Campo).Required Then
                      flag_3 = 1
                      Else
                      flag_3 = 0
                      End If
 
                  Debug.print  nome_tabella & " " & nome_campo & " " & 
tipo_campo_provenienza & " " & flag_1 & "  " & flag_2 & " " & att & " " 
& flag_3
                  Next Count_Campo
 
 


Stessa cosa se creo ex-novo una tabella su Sql Server, con due campi 
'not null' e due nullabili
Lanciata la routine di test, sempre via odbc, mi restituisce sempre 
tutti nullabili
Evidentemente sbaglio proprieta' da testare
Indi, qual'e' la proprieta' giusta per capire se un campo e' 'not null' 
oppure no?
 
 


Stessa routine, se lanciata su tabelle collegate, funziona nel senso che 
mi mostra i campi Required true/false come mi attendo che siano
Ed allora com'e' sta cosa?
Se vado su un db via  Set MyDbSorg =OpenDatabase(nome_dsn, False, False, 
"ODBC;DSN=" &  nome_dsn)  non funziona, se invece vado via Set MyDbSorg 
=CurrentDb  funziona?
Perche' ?