Récuperer le type d'un champs SQL Server

Le
Gafish
Bonjour,

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

Merci d'avance

Arnaud
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Zoury
Le #14666891
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" 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
Gafish
Le #14712571
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 Infolse;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"

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


.



Publicité
Poster une réponse
Anonyme