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.
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 '***
"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
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
'***
"Gafish" <anonymous@discussions.microsoft.com> wrote in message
news:182001c426cb$dfb7ae70$a401280a@phx.gbl...
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.
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 '***
"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
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 '***
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
.
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=False;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
'***
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 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 '***
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.