1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
'------------------------------------------------------
'FONCTION QUI RENVOIE UN TABLEAU DES VALEURS PAR DEFAUT D'UNE TABLE DE LA BDD
Public Function Array_default_value_bdd(ByVal conn As ADODB.Connection, ByVal schema As String, ByVal table As String) As Variant
Dim requete As String
Dim a, b, c, n As Long
Dim resultat() As Variant
On Error GoTo Finalisation
ReDim resultat(1 To 1, 1 To 1)
resultat(1, 1) = False
'Ecriture de la requête sql
requete = "SELECT *" & Chr(10) & _
"FROM INFORMATION_SCHEMA.COLUMNS" & Chr(10) & _
"WHERE TABLE_SCHEMA = '" & schema & "'" & Chr(10) & _
"AND TABLE_NAME = '" & table & "'"
'Vérification de la connexion
If conn.State = False Then
conn.Open
End If
'Lancement de la requête dans la base de données
Dim rec As New ADODB.Recordset
rec.Open requete, connection_postgres, adOpenForwardOnly, adLockReadOnly
rec.MoveFirst
n = 1
ReDim resultat(1 To 5, 1 To n)
'ligne 1 : nom du champ
'ligne 2 : si la valeur null est admise
'ligne 3 : type de champ
'ligne 4 : s'il y a une valeur par défaut
'ligne 5 : valeur par défaut
Do While Not rec.EOF
ReDim Preserve resultat(1 To 5, 1 To n)
resultat(1, n) = rec.Fields("COLUMN_NAME").Value
resultat(2, n) = rec.Fields("IS_NULLABLE").Value
resultat(3, n) = rec.Fields("DATA_TYPE").Value
If Not IsNull(rec.Fields("COLUMN_DEFAULT")) Then
If rec.Fields("COLUMN_DEFAULT").Value <> "" And Not rec.Fields("COLUMN_DEFAULT").Value Like "*nextval*" Then
resultat(4, n) = True
resultat(5, n) = rec.Fields("COLUMN_DEFAULT").Value
'Traitement de la valeur du résultat
resultat(5, n) = net_val_bdd(resultat(5, n))
'Format du résultat
If resultat(3, n) Like "*integer*" Then
resultat(5, n) = CLng(resultat(5, n))
ElseIf resultat(3, n) Like "*char*" Then
resultat(5, n) = CStr(resultat(5, n))
ElseIf resultat(3, n) Like "*date*" Or resultat(3, n) Like "*time*" Then
resultat(5, n) = CDate(resultat(5, n))
ElseIf resultat(3, n) Like "*boolean*" Then
resultat(5, n) = CBool(resultat(5, n))
Else
resultat(5, n) = CVar(resultat(5, n))
End If
Else
resultat(4, n) = False
resultat(5, n) = ""
End If
Else
resultat(4, n) = False
resultat(5, n) = ""
End If
n = n + 1
rec.MoveNext
Loop
rec.Close
Set rec = Nothing
Array_default_value_bdd = resultat
Exit Function
'Finalisation de la procédure
Fin:
MsgBox "Erreur lors de l'exécution d'une requête. cf : debug.print"
If conn.State = True Then
conn.Close
End If
Debug.Print requete
If Not rec Is Nothing Then
rec.Close
Set rec = Nothing
End If
On Error GoTo 0
Stop
End Function |
Partager