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

Problèmes de résultats VB SQL Server

6 réponses
Avatar
Romuald Aubin
Bonjour,

J'ai à écrire une requête dans VB, celle-ci fonctionne très bien dans
l'analyseur de requête et me renvoi bien des lignes, mais lors de son
éxecution dans VB, aucun résultat ne me parviens et je me retouve face à un
EOF.

Il s'agit d'une requête de sélection entre deux bases distinctes uniquement,
après je boucle.

Config :
- VB6 SP6
- ADO 2.8
- SQL 2005


Chaine de connexion à SQL Server 2005 :
SQL2005.ConnectionString="Provider=SQLNCLI;Server=" & server & ";Database="
& Mid$(ID_Traitement, 2, Len(ID_Traitement) - 2) &
";DataTypeCompatibility=80;Uid=" & Usr & ";Pwd=" & pwd & ";"


Requête :
FicClient.Open "SELECT * FROM [Travail] AS Client INNER JOIN " & server &
".[bdd_test].dbo.[INF] AS Referentiel ON
Client.CLE_DEDUP_INT=Referentiel.CLE_DEDUP COLLATE French_CI_AS ORDER BY
Client.CLE_DEDUP_INT", SQL2005, adOpenDynamic, adLockOptimistic

Je précise que les paramètres de connexion sont issus d'un fichier INI qui
contient bien les données et la chaine de connexion ainsi que la requête en
tiennent bien compte.

Le nombre champs retourné est variable, peut dépasser les 100 champs dans
certains cas.

Quelqu'un a-t-il déjà rencontré ce problème et surtout m'indiquer la marche
à suivre pour le résoudre (d'autant qu'une seconde requête du même type suit
celle-là) ?

Merci

6 réponses

Avatar
SAISAS
Bonjour,

as-tu vérifié qu'il n'y a pas d'erreur dans l'ordre SQL. Il est possible que
le "adLockOptimistic" génère une erreur (je ne vois pas bien comment tu peux
mettre à jour ta table).

Cordialement.

"Romuald Aubin" a écrit :

Bonjour,

J'ai à écrire une requête dans VB, celle-ci fonctionne très bien dans
l'analyseur de requête et me renvoi bien des lignes, mais lors de son
éxecution dans VB, aucun résultat ne me parviens et je me retouve face à un
EOF.

Il s'agit d'une requête de sélection entre deux bases distinctes uniquement,
après je boucle.

Config :
- VB6 SP6
- ADO 2.8
- SQL 2005


Chaine de connexion à SQL Server 2005 :
SQL2005.ConnectionString="Provider=SQLNCLI;Server=" & server & ";Database="
& Mid$(ID_Traitement, 2, Len(ID_Traitement) - 2) &
";DataTypeCompatibility€;Uid=" & Usr & ";Pwd=" & pwd & ";"


Requête :
FicClient.Open "SELECT * FROM [Travail] AS Client INNER JOIN " & server &
".[bdd_test].dbo.[INF] AS Referentiel ON
Client.CLE_DEDUP_INT=Referentiel.CLE_DEDUP COLLATE French_CI_AS ORDER BY
Client.CLE_DEDUP_INT", SQL2005, adOpenDynamic, adLockOptimistic

Je précise que les paramètres de connexion sont issus d'un fichier INI qui
contient bien les données et la chaine de connexion ainsi que la requête en
tiennent bien compte.

Le nombre champs retourné est variable, peut dépasser les 100 champs dans
certains cas.

Quelqu'un a-t-il déjà rencontré ce problème et surtout m'indiquer la marche
à suivre pour le résoudre (d'autant qu'une seconde requête du même type suit
celle-là) ?

Merci





Avatar
jerome crevecoeur
Si c'est juste de la lecture pourquoi ne pas faire la jointure dans une
vue sur la base "serveur"?

L'utilisateur a-t-il les droits?

Cordialement

Romuald Aubin a écrit :
Bonjour,

J'ai à écrire une requête dans VB, celle-ci fonctionne très bie n dans
l'analyseur de requête et me renvoi bien des lignes, mais lors de son
éxecution dans VB, aucun résultat ne me parviens et je me retouve f ace à un
EOF.

Il s'agit d'une requête de sélection entre deux bases distinctes un iquement,
après je boucle.

Config :
- VB6 SP6
- ADO 2.8
- SQL 2005


Chaine de connexion à SQL Server 2005 :
SQL2005.ConnectionString="Provider=SQLNCLI;Server=" & server & "; Database="
& Mid$(ID_Traitement, 2, Len(ID_Traitement) - 2) &
";DataTypeCompatibility€;Uid=" & Usr & ";Pwd=" & pwd & ";"


Requête :
FicClient.Open "SELECT * FROM [Travail] AS Client INNER JOIN " & server &
".[bdd_test].dbo.[INF] AS Referentiel ON
Client.CLE_DEDUP_INT=Referentiel.CLE_DEDUP COLLATE French_CI_AS ORDER BY
Client.CLE_DEDUP_INT", SQL2005, adOpenDynamic, adLockOptimistic

Je précise que les paramètres de connexion sont issus d'un fichier INI qui
contient bien les données et la chaine de connexion ainsi que la requ ête en
tiennent bien compte.

Le nombre champs retourné est variable, peut dépasser les 100 champ s dans
certains cas.

Quelqu'un a-t-il déjà rencontré ce problème et surtout m'indiqu er la marche
à suivre pour le résoudre (d'autant qu'une seconde requête du mê me type suit
celle-là) ?

Merci




Avatar
Romuald Aubin
Bonjour,

J'ai testé toutes les combinaisons pour le type de verrouillage et de
curseur, rien n'y fait, j'utilise toujours le "adlockoptimistic" et je n'ai
jamais eu de problème avec, peux-tu me donner un peu plus de détails
concernant ta remarque sur la mise à jour, que je fais par le biais d'une
réaffectation de valeur (ex ficclient!Nom="toto") suivie d'une validation de
mise à jour (ex ficclient.update)

Concernant l'ordre SQL, dans la mesure où les résultats sont retournés par
l'analyseur de requête, je le suppose bon, peux-tu détailler ?

Merci

Romuald

"SAISAS" a écrit dans le message de news:

Bonjour,

as-tu vérifié qu'il n'y a pas d'erreur dans l'ordre SQL. Il est possible
que
le "adLockOptimistic" génère une erreur (je ne vois pas bien comment tu
peux
mettre à jour ta table).

Cordialement.

"Romuald Aubin" a écrit :

Bonjour,

J'ai à écrire une requête dans VB, celle-ci fonctionne très bien dans
l'analyseur de requête et me renvoi bien des lignes, mais lors de son
éxecution dans VB, aucun résultat ne me parviens et je me retouve face à
un
EOF.

Il s'agit d'une requête de sélection entre deux bases distinctes
uniquement,
après je boucle.

Config :
- VB6 SP6
- ADO 2.8
- SQL 2005


Chaine de connexion à SQL Server 2005 :
SQL2005.ConnectionString="Provider=SQLNCLI;Server=" & server &
";Database="
& Mid$(ID_Traitement, 2, Len(ID_Traitement) - 2) &
";DataTypeCompatibility€;Uid=" & Usr & ";Pwd=" & pwd & ";"


Requête :
FicClient.Open "SELECT * FROM [Travail] AS Client INNER JOIN " & server &
".[bdd_test].dbo.[INF] AS Referentiel ON
Client.CLE_DEDUP_INT=Referentiel.CLE_DEDUP COLLATE French_CI_AS ORDER BY
Client.CLE_DEDUP_INT", SQL2005, adOpenDynamic, adLockOptimistic

Je précise que les paramètres de connexion sont issus d'un fichier INI
qui
contient bien les données et la chaine de connexion ainsi que la requête
en
tiennent bien compte.

Le nombre champs retourné est variable, peut dépasser les 100 champs dans
certains cas.

Quelqu'un a-t-il déjà rencontré ce problème et surtout m'indiquer la
marche
à suivre pour le résoudre (d'autant qu'une seconde requête du même type
suit
celle-là) ?

Merci







Avatar
Romuald Aubin
Bonjour,

En fait, il n'y pas que lecture, certains champs sont testés afin que
d'autres soient mit à jour.

Oui et non, le process est lancé via une page aspx avec un compte
administrateur, mais aucun utilisateur n'est sensé pouvoir le lancer
manuellement.

Merci

Romuald

"jerome crevecoeur"
a écrit dans le message de news: OyMoQ$
Si c'est juste de la lecture pourquoi ne pas faire la jointure dans une
vue sur la base "serveur"?

L'utilisateur a-t-il les droits?

Cordialement

Romuald Aubin a écrit :
Bonjour,

J'ai à écrire une requête dans VB, celle-ci fonctionne très bien dans
l'analyseur de requête et me renvoi bien des lignes, mais lors de son
éxecution dans VB, aucun résultat ne me parviens et je me retouve face à
un EOF.

Il s'agit d'une requête de sélection entre deux bases distinctes
uniquement, après je boucle.

Config :
- VB6 SP6
- ADO 2.8
- SQL 2005


Chaine de connexion à SQL Server 2005 :
SQL2005.ConnectionString="Provider=SQLNCLI;Server=" & server &
";Database=" & Mid$(ID_Traitement, 2, Len(ID_Traitement) - 2) &
";DataTypeCompatibility€;Uid=" & Usr & ";Pwd=" & pwd & ";"


Requête :
FicClient.Open "SELECT * FROM [Travail] AS Client INNER JOIN " & server &
".[bdd_test].dbo.[INF] AS Referentiel ON
Client.CLE_DEDUP_INT=Referentiel.CLE_DEDUP COLLATE French_CI_AS ORDER BY
Client.CLE_DEDUP_INT", SQL2005, adOpenDynamic, adLockOptimistic

Je précise que les paramètres de connexion sont issus d'un fichier INI qui
contient bien les données et la chaine de connexion ainsi que la requête
en tiennent bien compte.

Le nombre champs retourné est variable, peut dépasser les 100 champs dans
certains cas.

Quelqu'un a-t-il déjà rencontré ce problème et surtout m'indiquer la
marche à suivre pour le résoudre (d'autant qu'une seconde requête du même
type suit celle-là) ?

Merci



Avatar
SAISAS
Bonjour,

il n'existe qu'un standard SQL, mais il en existe de nombreuses
interprétations et extensions par base de données. Je ne suis plus très à
jour dans les différents moteurs, mais parmi les différences notables :

- les caractères spéciaux de recherche de chaîne (pour l'opérateur LIKE)
- les tableaux croisés dynamiques
- les recherches dans les arbres
- les fonctions de conversion, conceténation, ...

En ce qui te concerne, une des différences concerne la possibilité de mettre
à jour les jointures entre tables et les tables triées. Normalement, cette
mise à jour est intredite, mais certains moteurs et en particulier ACCESS la
tolèrent. Je n'ai jamais regardé comment ACCESS gère les incohérences que
cela peut engendrer (lorsque tu modifies les valeurs de jointure par exemple).

En résumé, si tu veux être compatible avec plusieurs bases de données, il ne
te faut utiliser que du SQL standard, sous peine d'avoir des déconvenues avec
des moteurs différents. Tu n'es même pas toujours à l'abri, certaines valeurs
en retour (sur les count, les sum ou les opérations avec Null) pouvant
différer d'un moteur à l'autre (un grand classique est le count(*) d'une
table vide!).

Personnellement, j'ai résolu le problème en passant systématiquement par une
base ACCESS qui sert de relais avec des tables liées via ODBC. Cela me permet
d'utiliser toutes les capacités de ACCESS et de travailler sur n'importe
quelle base de données.

A ta disposition.

"Romuald Aubin" a écrit :

Bonjour,

J'ai testé toutes les combinaisons pour le type de verrouillage et de
curseur, rien n'y fait, j'utilise toujours le "adlockoptimistic" et je n'ai
jamais eu de problème avec, peux-tu me donner un peu plus de détails
concernant ta remarque sur la mise à jour, que je fais par le biais d'une
réaffectation de valeur (ex ficclient!Nom="toto") suivie d'une validation de
mise à jour (ex ficclient.update)

Concernant l'ordre SQL, dans la mesure où les résultats sont retournés par
l'analyseur de requête, je le suppose bon, peux-tu détailler ?

Merci

Romuald

"SAISAS" a écrit dans le message de news:

> Bonjour,
>
> as-tu vérifié qu'il n'y a pas d'erreur dans l'ordre SQL. Il est possible
> que
> le "adLockOptimistic" génère une erreur (je ne vois pas bien comment tu
> peux
> mettre à jour ta table).
>
> Cordialement.
>
> "Romuald Aubin" a écrit :
>
>> Bonjour,
>>
>> J'ai à écrire une requête dans VB, celle-ci fonctionne très bien dans
>> l'analyseur de requête et me renvoi bien des lignes, mais lors de son
>> éxecution dans VB, aucun résultat ne me parviens et je me retouve face à
>> un
>> EOF.
>>
>> Il s'agit d'une requête de sélection entre deux bases distinctes
>> uniquement,
>> après je boucle.
>>
>> Config :
>> - VB6 SP6
>> - ADO 2.8
>> - SQL 2005
>>
>>
>> Chaine de connexion à SQL Server 2005 :
>> SQL2005.ConnectionString="Provider=SQLNCLI;Server=" & server &
>> ";Database="
>> & Mid$(ID_Traitement, 2, Len(ID_Traitement) - 2) &
>> ";DataTypeCompatibility€;Uid=" & Usr & ";Pwd=" & pwd & ";"
>>
>>
>> Requête :
>> FicClient.Open "SELECT * FROM [Travail] AS Client INNER JOIN " & server &
>> ".[bdd_test].dbo.[INF] AS Referentiel ON
>> Client.CLE_DEDUP_INT=Referentiel.CLE_DEDUP COLLATE French_CI_AS ORDER BY
>> Client.CLE_DEDUP_INT", SQL2005, adOpenDynamic, adLockOptimistic
>>
>> Je précise que les paramètres de connexion sont issus d'un fichier INI
>> qui
>> contient bien les données et la chaine de connexion ainsi que la requête
>> en
>> tiennent bien compte.
>>
>> Le nombre champs retourné est variable, peut dépasser les 100 champs dans
>> certains cas.
>>
>> Quelqu'un a-t-il déjà rencontré ce problème et surtout m'indiquer la
>> marche
>> à suivre pour le résoudre (d'autant qu'une seconde requête du même type
>> suit
>> celle-là) ?
>>
>> Merci
>>
>>
>>





Avatar
Romuald Aubin
Bonjour,

Merci pour ces informations, je comprends mieux ta remarque maintenant.
Dans mon cas, le passage par Access ne me permet même pas de visualiser le
contenu des tables (#Supprimé dans chaque cellules) 19.502.727 lignes dans
la table "référentiel".

A coté de ça, pour résoudre mon problème (lié en parti à un timeout), je
suis passé par un ADO.Command qui me permet de récupérer mes données, après
dans al mesure où j'ai un identifiant unique, je fais une requête update.

Merci encore de ton aide.

Romuald


"SAISAS" a écrit dans le message de news:

Bonjour,

il n'existe qu'un standard SQL, mais il en existe de nombreuses
interprétations et extensions par base de données. Je ne suis plus très à
jour dans les différents moteurs, mais parmi les différences notables :

- les caractères spéciaux de recherche de chaîne (pour l'opérateur LIKE)
- les tableaux croisés dynamiques
- les recherches dans les arbres
- les fonctions de conversion, conceténation, ...

En ce qui te concerne, une des différences concerne la possibilité de
mettre
à jour les jointures entre tables et les tables triées. Normalement, cette
mise à jour est intredite, mais certains moteurs et en particulier ACCESS
la
tolèrent. Je n'ai jamais regardé comment ACCESS gère les incohérences que
cela peut engendrer (lorsque tu modifies les valeurs de jointure par
exemple).

En résumé, si tu veux être compatible avec plusieurs bases de données, il
ne
te faut utiliser que du SQL standard, sous peine d'avoir des déconvenues
avec
des moteurs différents. Tu n'es même pas toujours à l'abri, certaines
valeurs
en retour (sur les count, les sum ou les opérations avec Null) pouvant
différer d'un moteur à l'autre (un grand classique est le count(*) d'une
table vide!).

Personnellement, j'ai résolu le problème en passant systématiquement par
une
base ACCESS qui sert de relais avec des tables liées via ODBC. Cela me
permet
d'utiliser toutes les capacités de ACCESS et de travailler sur n'importe
quelle base de données.

A ta disposition.

"Romuald Aubin" a écrit :

Bonjour,

J'ai testé toutes les combinaisons pour le type de verrouillage et de
curseur, rien n'y fait, j'utilise toujours le "adlockoptimistic" et je
n'ai
jamais eu de problème avec, peux-tu me donner un peu plus de détails
concernant ta remarque sur la mise à jour, que je fais par le biais d'une
réaffectation de valeur (ex ficclient!Nom="toto") suivie d'une validation
de
mise à jour (ex ficclient.update)

Concernant l'ordre SQL, dans la mesure où les résultats sont retournés
par
l'analyseur de requête, je le suppose bon, peux-tu détailler ?

Merci

Romuald

"SAISAS" a écrit dans le message de
news:

> Bonjour,
>
> as-tu vérifié qu'il n'y a pas d'erreur dans l'ordre SQL. Il est
> possible
> que
> le "adLockOptimistic" génère une erreur (je ne vois pas bien comment tu
> peux
> mettre à jour ta table).
>
> Cordialement.
>
> "Romuald Aubin" a écrit :
>
>> Bonjour,
>>
>> J'ai à écrire une requête dans VB, celle-ci fonctionne très bien dans
>> l'analyseur de requête et me renvoi bien des lignes, mais lors de son
>> éxecution dans VB, aucun résultat ne me parviens et je me retouve face
>> à
>> un
>> EOF.
>>
>> Il s'agit d'une requête de sélection entre deux bases distinctes
>> uniquement,
>> après je boucle.
>>
>> Config :
>> - VB6 SP6
>> - ADO 2.8
>> - SQL 2005
>>
>>
>> Chaine de connexion à SQL Server 2005 :
>> SQL2005.ConnectionString="Provider=SQLNCLI;Server=" & server &
>> ";Database="
>> & Mid$(ID_Traitement, 2, Len(ID_Traitement) - 2) &
>> ";DataTypeCompatibility€;Uid=" & Usr & ";Pwd=" & pwd & ";"
>>
>>
>> Requête :
>> FicClient.Open "SELECT * FROM [Travail] AS Client INNER JOIN " &
>> server &
>> ".[bdd_test].dbo.[INF] AS Referentiel ON
>> Client.CLE_DEDUP_INT=Referentiel.CLE_DEDUP COLLATE French_CI_AS ORDER
>> BY
>> Client.CLE_DEDUP_INT", SQL2005, adOpenDynamic, adLockOptimistic
>>
>> Je précise que les paramètres de connexion sont issus d'un fichier INI
>> qui
>> contient bien les données et la chaine de connexion ainsi que la
>> requête
>> en
>> tiennent bien compte.
>>
>> Le nombre champs retourné est variable, peut dépasser les 100 champs
>> dans
>> certains cas.
>>
>> Quelqu'un a-t-il déjà rencontré ce problème et surtout m'indiquer la
>> marche
>> à suivre pour le résoudre (d'autant qu'une seconde requête du même
>> type
>> suit
>> celle-là) ?
>>
>> Merci
>>
>>
>>