OVH Cloud OVH Cloud

ADO et Requete SQL

10 réponses
Avatar
Marty
Bonjour,

Je programme en VB6 et je veux accéder à une DB SQL Server. J'y
connecte sans problème avec ce string de connection (avec un object
ADODB.Connection):

Private dbConnector As New ADODB.Connection
strConnect = "Provider=SQLOLEDB;" & _
"Data Source=" & strServerName & ";" & _
"Initial Catalog=" & strDBDatabaseName & ";" & _
"Integrated Security=SSPI;"
dbConnector.ConnectionString = strConnect
dbConnector.open

Ensuite je veux faire une requète et c'est là que c'est problématique.
Y a-t-il une syntaxe à respecter autre que celle-ci pour faire un SELECT:

SELECT monChampNumeriqueA FROM maTable WHERE monChampNumeriqueB = 10

Merci!
Marty

10 réponses

Avatar
Patrice
Cela me semble ok. Le plus simple est de nous dire quelle est l'erreur que
tu obtiens....

Patrice

--

"Marty" a écrit dans le message de
news:KNg5e.9744$
Bonjour,

Je programme en VB6 et je veux accéder à une DB SQL Server. J'y
connecte sans problème avec ce string de connection (avec un object
ADODB.Connection):

Private dbConnector As New ADODB.Connection
strConnect = "Provider=SQLOLEDB;" & _
"Data Source=" & strServerName & ";" & _
"Initial Catalog=" & strDBDatabaseName & ";" & _
"Integrated Security=SSPI;"
dbConnector.ConnectionString = strConnect
dbConnector.open

Ensuite je veux faire une requète et c'est là que c'est problématique.
Y a-t-il une syntaxe à respecter autre que celle-ci pour faire un SELECT:

SELECT monChampNumeriqueA FROM maTable WHERE monChampNumeriqueB = 10

Merci!
Marty


Avatar
Synopsis
Dans ton code tu n'ouvre qu'une connexion sur le server sql.
Il faut passer par l'objet recordset pour retourner un jeu de données.

1) Il peut être instancié à la volée
Dim rs as adodb.recordset

set rs = conn.execute(sql)

rs.close
set rs = nothing

2) Le déclarer proprement
Dim rs as new adob.recordset

rs.open sql, conn, adsOpenKeyset

While not rs.eof
rs.movenext
Wend

rs.close
set rs = nothing



"Marty" a écrit dans le message de
news:KNg5e.9744$
Bonjour,

Je programme en VB6 et je veux accéder à une DB SQL Server. J'y
connecte sans problème avec ce string de connection (avec un object
ADODB.Connection):

Private dbConnector As New ADODB.Connection
strConnect = "Provider=SQLOLEDB;" & _
"Data Source=" & strServerName & ";" & _
"Initial Catalog=" & strDBDatabaseName & ";" & _
"Integrated Security=SSPI;"
dbConnector.ConnectionString = strConnect
dbConnector.open

Ensuite je veux faire une requète et c'est là que c'est problématique.
Y a-t-il une syntaxe à respecter autre que celle-ci pour faire un SELECT:

SELECT monChampNumeriqueA FROM maTable WHERE monChampNumeriqueB = 10

Merci!
Marty


Avatar
Marty
Bonjour Synopsis,

Voici, ci-bas, ma fonction qui reçoit une string SQL, l'exécute et
retourne l'object ADODB.Recordset qui contient les datas.

Mon problème, est qu'il n'y a pas d'erreurs d'exécution et que le
rstRecordSet.recordcount = -1 donc il n'a pas récupéré de data de la DB,
et ce, même si je lui fait exécuter "SELECT * FROM maTable". Pourtant il
y a du data dans la DB.

Donc je me demandais qu'il pourrait y avoir une syntaxe spéciale à
respecter vu que c'est SQL Server et non MSAccess qui reçoit la
commande. Est-ce possible?

Est-ce que je fais quelques chose d'incorrect? Pourtant j'ai toujours
réussi lorsque je connecte avec MSAccess.

Est-ce ce serait le string de connection que j'ai cité dans le précédent
message qui serait problématique?

Public Function processThisSQLQuery(strSQLQuery As String) As
ADODB.Recordset
On Error GoTo ErrHandler

If (dbConnector.State = 1) Then
Dim rstRecordSet As New ADODB.Recordset
rstRecordSet.Open strSQLQuery, dbConnector, adOpenDynamic
Set processSQLQueryRead = rstRecordSet
rstRecordSet.Close
Set rstRecordSet = Nothing
Else
MsgBox "DBConnector not open"
End If

Exit Function
ErrHandler:
Call displayError(Err, _
"clsDBHandler", _
"processSQLQueryRead", _
Err.Description & _
" " & _
strSQLQuery)
End Function

Merci beaucoup de ton aide,
Martin


Synopsis wrote:
Dans ton code tu n'ouvre qu'une connexion sur le server sql.
Il faut passer par l'objet recordset pour retourner un jeu de données.

1) Il peut être instancié à la volée
Dim rs as adodb.recordset

set rs = conn.execute(sql)

rs.close
set rs = nothing

2) Le déclarer proprement
Dim rs as new adob.recordset

rs.open sql, conn, adsOpenKeyset

While not rs.eof
rs.movenext
Wend

rs.close
set rs = nothing



"Marty" a écrit dans le message de
news:KNg5e.9744$

Bonjour,

Je programme en VB6 et je veux accéder à une DB SQL Server. J'y
connecte sans problème avec ce string de connection (avec un object
ADODB.Connection):

Private dbConnector As New ADODB.Connection
strConnect = "Provider=SQLOLEDB;" & _
"Data Source=" & strServerName & ";" & _
"Initial Catalog=" & strDBDatabaseName & ";" & _
"Integrated Security=SSPI;"
dbConnector.ConnectionString = strConnect
dbConnector.open

Ensuite je veux faire une requète et c'est là que c'est problématique.
Y a-t-il une syntaxe à respecter autre que celle-ci pour faire un SELECT:

SELECT monChampNumeriqueA FROM maTable WHERE monChampNumeriqueB = 10

Merci!
Marty







Avatar
Marty
Bonjour Patrice,

J'ai écrit une réponse détaillée à Synopsis, est-ce tu la vois?
Merci de ton aide,
Martin

Patrice wrote:

Cela me semble ok. Le plus simple est de nous dire quelle est l'erreur que
tu obtiens....

Patrice



Avatar
Synopsis
Il faut ouvrir ton recordset en adOpenKeyset
sinon la propriété recordcount = toujours à -1 (idem pour absolutePosition,
absolutePage....)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdprocursortype.asp

Pour savoir s'il y a des données, tu test juste après ta commande sql, le
Eof ou (Bof )


rs.open sql, conn, adOpenKeySet
if rs.eof then
' pas de données
else
' exécute
end if

If rs.state = 1 then rs.close
Set rs = nothing


"Marty" a écrit dans le message de
news:nNv6e.17128$
Bonjour Synopsis,

Voici, ci-bas, ma fonction qui reçoit une string SQL, l'exécute et
retourne l'object ADODB.Recordset qui contient les datas.

Mon problème, est qu'il n'y a pas d'erreurs d'exécution et que le
rstRecordSet.recordcount = -1 donc il n'a pas récupéré de data de la DB,
et ce, même si je lui fait exécuter "SELECT * FROM maTable". Pourtant il
y a du data dans la DB.

Donc je me demandais qu'il pourrait y avoir une syntaxe spéciale à
respecter vu que c'est SQL Server et non MSAccess qui reçoit la
commande. Est-ce possible?

Est-ce que je fais quelques chose d'incorrect? Pourtant j'ai toujours
réussi lorsque je connecte avec MSAccess.

Est-ce ce serait le string de connection que j'ai cité dans le précédent
message qui serait problématique?

Public Function processThisSQLQuery(strSQLQuery As String) As
ADODB.Recordset
On Error GoTo ErrHandler

If (dbConnector.State = 1) Then
Dim rstRecordSet As New ADODB.Recordset
rstRecordSet.Open strSQLQuery, dbConnector, adOpenDynamic
Set processSQLQueryRead = rstRecordSet
rstRecordSet.Close
Set rstRecordSet = Nothing
Else
MsgBox "DBConnector not open"
End If

Exit Function
ErrHandler:
Call displayError(Err, _
"clsDBHandler", _
"processSQLQueryRead", _
Err.Description & _
" " & _
strSQLQuery)
End Function

Merci beaucoup de ton aide,
Martin


Synopsis wrote:
> Dans ton code tu n'ouvre qu'une connexion sur le server sql.
> Il faut passer par l'objet recordset pour retourner un jeu de données.
>
> 1) Il peut être instancié à la volée
> Dim rs as adodb.recordset
>
> set rs = conn.execute(sql)
>
> rs.close
> set rs = nothing
>
> 2) Le déclarer proprement
> Dim rs as new adob.recordset
>
> rs.open sql, conn, adsOpenKeyset
>
> While not rs.eof
> rs.movenext
> Wend
>
> rs.close
> set rs = nothing
>
>
>
> "Marty" a écrit dans le message de
> news:KNg5e.9744$
>
>>Bonjour,
>>
>>Je programme en VB6 et je veux accéder à une DB SQL Server. J'y
>>connecte sans problème avec ce string de connection (avec un object
>>ADODB.Connection):
>>
>> Private dbConnector As New ADODB.Connection
>> strConnect = "Provider=SQLOLEDB;" & _
>> "Data Source=" & strServerName & ";" & _
>> "Initial Catalog=" & strDBDatabaseName & ";" & _
>> "Integrated Security=SSPI;"
>> dbConnector.ConnectionString = strConnect
>> dbConnector.open
>>
>>Ensuite je veux faire une requète et c'est là que c'est problématique.
>>Y a-t-il une syntaxe à respecter autre que celle-ci pour faire un


SELECT:
>>
>>SELECT monChampNumeriqueA FROM maTable WHERE monChampNumeriqueB = 10
>>
>>Merci!
>>Marty
>
>
>


Avatar
Marty
Ça marche, merci et bonne journée :)
Martin

Synopsis wrote:

Il faut ouvrir ton recordset en adOpenKeyset
sinon la propriété recordcount = toujours à -1 (idem pour absolutePosition,
absolutePage....)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdprocursortype.asp

Pour savoir s'il y a des données, tu test juste après ta commande sql, le
Eof ou (Bof )


rs.open sql, conn, adOpenKeySet
if rs.eof then
' pas de données
else
' exécute
end if

If rs.state = 1 then rs.close
Set rs = nothing


"Marty" a écrit dans le message de
news:nNv6e.17128$

Bonjour Synopsis,

Voici, ci-bas, ma fonction qui reçoit une string SQL, l'exécute et
retourne l'object ADODB.Recordset qui contient les datas.

Mon problème, est qu'il n'y a pas d'erreurs d'exécution et que le
rstRecordSet.recordcount = -1 donc il n'a pas récupéré de data de la DB,
et ce, même si je lui fait exécuter "SELECT * FROM maTable". Pourtant il
y a du data dans la DB.

Donc je me demandais qu'il pourrait y avoir une syntaxe spéciale à
respecter vu que c'est SQL Server et non MSAccess qui reçoit la
commande. Est-ce possible?

Est-ce que je fais quelques chose d'incorrect? Pourtant j'ai toujours
réussi lorsque je connecte avec MSAccess.

Est-ce ce serait le string de connection que j'ai cité dans le précédent
message qui serait problématique?

Public Function processThisSQLQuery(strSQLQuery As String) As
ADODB.Recordset
On Error GoTo ErrHandler

If (dbConnector.State = 1) Then
Dim rstRecordSet As New ADODB.Recordset
rstRecordSet.Open strSQLQuery, dbConnector, adOpenDynamic
Set processSQLQueryRead = rstRecordSet
rstRecordSet.Close
Set rstRecordSet = Nothing
Else
MsgBox "DBConnector not open"
End If

Exit Function
ErrHandler:
Call displayError(Err, _
"clsDBHandler", _
"processSQLQueryRead", _
Err.Description & _
" " & _
strSQLQuery)
End Function

Merci beaucoup de ton aide,
Martin


Synopsis wrote:

Dans ton code tu n'ouvre qu'une connexion sur le server sql.
Il faut passer par l'objet recordset pour retourner un jeu de données.

1) Il peut être instancié à la volée
Dim rs as adodb.recordset

set rs = conn.execute(sql)

rs.close
set rs = nothing

2) Le déclarer proprement
Dim rs as new adob.recordset

rs.open sql, conn, adsOpenKeyset

While not rs.eof
rs.movenext
Wend

rs.close
set rs = nothing



"Marty" a écrit dans le message de
news:KNg5e.9744$


Bonjour,

Je programme en VB6 et je veux accéder à une DB SQL Server. J'y
connecte sans problème avec ce string de connection (avec un object
ADODB.Connection):

Private dbConnector As New ADODB.Connection
strConnect = "Provider=SQLOLEDB;" & _
"Data Source=" & strServerName & ";" & _
"Initial Catalog=" & strDBDatabaseName & ";" & _
"Integrated Security=SSPI;"
dbConnector.ConnectionString = strConnect
dbConnector.open

Ensuite je veux faire une requète et c'est là que c'est problématique.
Y a-t-il une syntaxe à respecter autre que celle-ci pour faire un







SELECT:

SELECT monChampNumeriqueA FROM maTable WHERE monChampNumeriqueB = 10

Merci!
Marty













Avatar
Patrice
Vu et je vois que c'est réglé. Good ! Comme indiqué par "Synopis", le -1
n'indique PAS qu'aucune donnée n'est lue. Il indique le nombre de lignes
n'est pas connu (notamment c'est le cas si le curseur choisi ne provoque pas
la lecture immédiate de toutes les lignes).

Le plus simple est toujours de donner d'emblée le problème exact
rencontré...

Patrice

--

"Marty" a écrit dans le message de
news:LQv6e.17206$
Bonjour Patrice,

J'ai écrit une réponse détaillée à Synopsis, est-ce tu la vois?
Merci de ton aide,
Martin

Patrice wrote:

> Cela me semble ok. Le plus simple est de nous dire quelle est l'erreur


que
> tu obtiens....
>
> Patrice
>


Avatar
Marty
Merci Patrice, c'est l'fun d'avoir de l'aide à proximité (virtuellement).

J'ai une autre question, lorsque je fais une requète comme celle-ci:
SELECT * form maTable WHERE maDate = '20050411'

Est-ce uqe j'utilise la bonne syntaxe pour la date? J'ai vu des
exemples qui précisent la date avec #20050411#, et dans ce cas j'obtient
une erreur, dans l'autre ('20050411'), aucun data.

Quelle syntaxe dois-je utiliser? Merci :)

Merci

Patrice wrote:

Vu et je vois que c'est réglé. Good ! Comme indiqué par "Synopis", le -1
n'indique PAS qu'aucune donnée n'est lue. Il indique le nombre de lignes
n'est pas connu (notamment c'est le cas si le curseur choisi ne provoque pas
la lecture immédiate de toutes les lignes).

Le plus simple est toujours de donner d'emblée le problème exact
rencontré...

Patrice



Avatar
Marty
Bonjour Patrice,

Juste pour te dire que j'ai résolu mon problème, bonne journée!
Martin


Marty wrote:

Merci Patrice, c'est l'fun d'avoir de l'aide à proximité (virtuellement).

J'ai une autre question, lorsque je fais une requète comme celle-ci:
SELECT * form maTable WHERE maDate = '20050411'

Est-ce uqe j'utilise la bonne syntaxe pour la date? J'ai vu des
exemples qui précisent la date avec #20050411#, et dans ce cas j'obtient
une erreur, dans l'autre ('20050411'), aucun data.

Quelle syntaxe dois-je utiliser? Merci :)

Merci

Patrice wrote:

Vu et je vois que c'est réglé. Good ! Comme indiqué par "Synopis", le -1
n'indique PAS qu'aucune donnée n'est lue. Il indique le nombre de lignes
n'est pas connu (notamment c'est le cas si le curseur choisi ne
provoque pas
la lecture immédiate de toutes les lignes).

Le plus simple est toujours de donner d'emblée le problème exact
rencontré...

Patrice





Avatar
Patrice
Vu. Juste au cas où.

Cette syntaxe est la meilleure (date ISO) car indépendante de la config du
serveur. Le # est la notation Access...

Patrice

--

"Marty" a écrit dans le message de
news:B7x6e.21018$
Merci Patrice, c'est l'fun d'avoir de l'aide à proximité (virtuellement).

J'ai une autre question, lorsque je fais une requète comme celle-ci:
SELECT * form maTable WHERE maDate = '20050411'

Est-ce uqe j'utilise la bonne syntaxe pour la date? J'ai vu des
exemples qui précisent la date avec #20050411#, et dans ce cas j'obtient
une erreur, dans l'autre ('20050411'), aucun data.

Quelle syntaxe dois-je utiliser? Merci :)

Merci

Patrice wrote:

> Vu et je vois que c'est réglé. Good ! Comme indiqué par "Synopis", le -1
> n'indique PAS qu'aucune donnée n'est lue. Il indique le nombre de lignes
> n'est pas connu (notamment c'est le cas si le curseur choisi ne provoque


pas
> la lecture immédiate de toutes les lignes).
>
> Le plus simple est toujours de donner d'emblée le problème exact
> rencontré...
>
> Patrice
>