Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récuperer le type d'un champs SQL Server

2 réponses
Avatar
Gafish
Bonjour,

Je suis en train de faire un ActiveX en VB sous SQL Server.
J'aimerai savoir comment je peux conna=EEtre le type d'un=20
champs pr=E9cis. Avec Access je sais, via TableDefs, Fields=20
et type, mais avec SQL je n'ai pas la syntaxe exacte, car=20
=E0 mon avis elle doit diff=E9rer entre DAO et ADO.

Merci d'avance

Arnaud

2 réponses

Avatar
Zoury
Salut Arnaud! :O)

Regarde du côté de la procédure stockée sp_columns.

ex ADO, le test est effectué sur la bd NorthWind.. tu peux modifier la
connection et la table à ta guise.. :
'***
' Ajouter la référence Microsoft Data Objects Library 2.X
' Module1
Option Explicit

Private Sub Main()
Call PrintTableColumnsInfo("Customers", "Provider=SQLOLEDB.1;Persist
Security Infoúlse;User ID=sa;Initial Catalog=northwind;Data
Source=gcodev;")
End Sub

Private Sub PrintTableColumnsInfo(ByRef sTableName As String, ByRef
sConnectionString As String)

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim f As ADODB.Field
Dim s As String
Const PAD_LENGHT As Long = 20

Set cn = New ADODB.Connection
Call cn.Open(sConnectionString)

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
Call rs.Open("sp_columns '" & sTableName & "'", cn, adOpenForwardOnly,
adLockReadOnly)

If (rs.RecordCount > 0) Then

Debug.Print String$(PAD_LENGHT * rs.Fields.Count, "*")
Debug.Print "Nom de la table : " & sTableName
Debug.Print String$(PAD_LENGHT * rs.Fields.Count, "-")

' imprime l'entête des colonnes
For Each f In rs.Fields
s = s & PadLeft(f.Name, PAD_LENGHT)
Next f
Debug.Print s
Debug.Print String$(PAD_LENGHT * rs.Fields.Count, "-")

' imprime les données
Do Until rs.EOF
s = ""
For Each f In rs.Fields
s = s & PadLeft(rs.Fields(f.Name).Value & "", PAD_LENGHT)
Next f
Debug.Print s
rs.MoveNext
Loop
Debug.Print String$(PAD_LENGHT * rs.Fields.Count, "*")

Else
Debug.Print "Aucune information n'a été trouvé pour la table : " &
sTableName
End If

Call rs.Close
Call cn.Close

End Sub

Private Function PadLeft(ByRef sText As String, ByRef lLenght As Long) As
String
PadLeft = Left$(sText & Space$(lLenght), lLenght)
End Function
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

"Gafish" wrote in message
news:182001c426cb$dfb7ae70$
Bonjour,

Je suis en train de faire un ActiveX en VB sous SQL Server.
J'aimerai savoir comment je peux connaître le type d'un
champs précis. Avec Access je sais, via TableDefs, Fields
et type, mais avec SQL je n'ai pas la syntaxe exacte, car
à mon avis elle doit différer entre DAO et ADO.

Merci d'avance

Arnaud
Avatar
Gafish
Merci Yannick pour cette réponse !
Donc si j'ai bien compris, l'info se trouve ici dans le
recordset avec sp_column qui se base sur la table que
j'aurai entré en paramètre de PrintTableColumnsInfo

Je vais regarder cela de plus près et essayer ! :)

Merci encore!


-----Message d'origine-----
Salut Arnaud! :O)

Regarde du côté de la procédure stockée sp_columns.

ex ADO, le test est effectué sur la bd NorthWind.. tu


peux modifier la
connection et la table à ta guise.. :
'***
' Ajouter la référence Microsoft Data Objects Library 2.X
' Module1
Option Explicit

Private Sub Main()
Call PrintTableColumnsInfo


("Customers", "Provider=SQLOLEDB.1;Persist
Security Infoúlse;User ID=sa;Initial


Catalog=northwind;Data
Source=gcodev;")
End Sub

Private Sub PrintTableColumnsInfo(ByRef sTableName As


String, ByRef
sConnectionString As String)

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim f As ADODB.Field
Dim s As String
Const PAD_LENGHT As Long = 20

Set cn = New ADODB.Connection
Call cn.Open(sConnectionString)

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
Call rs.Open("sp_columns '" & sTableName & "'", cn,


adOpenForwardOnly,
adLockReadOnly)

If (rs.RecordCount > 0) Then

Debug.Print String$(PAD_LENGHT *


rs.Fields.Count, "*")
Debug.Print "Nom de la table : " & sTableName
Debug.Print String$(PAD_LENGHT *


rs.Fields.Count, "-")

' imprime l'entête des colonnes
For Each f In rs.Fields
s = s & PadLeft(f.Name, PAD_LENGHT)
Next f
Debug.Print s
Debug.Print String$(PAD_LENGHT *


rs.Fields.Count, "-")

' imprime les données
Do Until rs.EOF
s = ""
For Each f In rs.Fields
s = s & PadLeft(rs.Fields(f.Name).Value


& "", PAD_LENGHT)
Next f
Debug.Print s
rs.MoveNext
Loop
Debug.Print String$(PAD_LENGHT *


rs.Fields.Count, "*")

Else
Debug.Print "Aucune information n'a été trouvé


pour la table : " &
sTableName
End If

Call rs.Close
Call cn.Close

End Sub

Private Function PadLeft(ByRef sText As String, ByRef


lLenght As Long) As
String
PadLeft = Left$(sText & Space$(lLenght), lLenght)
End Function
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -


http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml -


http://www.mztools.com/

"Gafish" wrote in


message
news:182001c426cb$dfb7ae70$
Bonjour,

Je suis en train de faire un ActiveX en VB sous SQL


Server.
J'aimerai savoir comment je peux connaître le type d'un
champs précis. Avec Access je sais, via TableDefs, Fields
et type, mais avec SQL je n'ai pas la syntaxe exacte, car
à mon avis elle doit différer entre DAO et ADO.

Merci d'avance

Arnaud


.