Bonjour,

je migre une appli qui était en MySQL en MSSQL.
je dois donc reprendre toutes les requêtes utilisant "limit".
je me sers d'une fonction trouvé sur le site :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function getLimitMSSQL($start, $nbrows, $fields, $table, $where, $orderfield, $sort = 'asc') { 
	$top = $start + $nbrows ; 
	if ( $sort == 'asc' ) { 
	   $asc = 'asc' ; 
	   $desc = 'desc' ; 
	} else { 
	   $asc = 'desc' ; 
	   $desc = 'asc' ; 
	} 
	$sql = '' ; 
	   $sql = "SELECT * FROM ( 
				   SELECT TOP $nbrows $fields from ( 
				       SELECT TOP $top $fields 
				       FROM $table 
				       $where 
				       ORDER BY $orderfield $asc 
				   ) tbl1 ORDER BY $orderfield $desc 
		   ) as tbl2 order by $orderfield $asc 
	       " ; 
	return $sql ; 
}

Ca fonctionne bien pour certaines requêtes.
mais là j'ai une erreur que je ne comprends pas.
voici ma requête :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT * FROM ( SELECT TOP 50 UTILISATEUR.CODE_UTILISATEUR,
UTILISATEUR.IDENTIFIANT_UTILISATEUR, CLIENTS.NOM_CLIENT, 
CLIENTS.CODE_CLIENT, INTERLOCUTEURS.NOM_CONTACT, VALIDITE_COMPTE.DATE_CREATION_COMPTE,
TYPE_ACCES_UTILISATEUR.TYPE_ACCES_UTILISATEUR, UTILISATEUR.MOT_PASSE_UTILISATEUR,
VALIDITE_COMPTE.DATE_CLOTURE_COMPTE from ( SELECT TOP 50 UTILISATEUR.CODE_UTILISATEUR, 
UTILISATEUR.IDENTIFIANT_UTILISATEUR, CLIENTS.NOM_CLIENT, CLIENTS.CODE_CLIENT, INTERLOCUTEURS.NOM_CONTACT,
VALIDITE_COMPTE.DATE_CREATION_COMPTE, TYPE_ACCES_UTILISATEUR.TYPE_ACCES_UTILISATEUR, 
UTILISATEUR.MOT_PASSE_UTILISATEUR,VALIDITE_COMPTE.DATE_CLOTURE_COMPTE FROM VALIDITE_COMPTE, 
TYPE_ACCES_UTILISATEUR, CLIENTS, UTILISATEUR, INTERLOCUTEURS 
where UTILISATEUR.CODE_CONTACT=INTERLOCUTEURS.CODE_CONTACT 
and UTILISATEUR.CODE_VALIDITE_COMPTE=VALIDITE_COMPTE.CODE_VALIDITE_COMPTE 
and INTERLOCUTEURS.CODE_CLIENT=CLIENTS.CODE_CLIENT 
and VALIDITE_COMPTE.CODE_TYPE_ACCES_UTILISATEUR=TYPE_ACCES_UTILISATEUR.CODE_TYPE_ACCES_UTILISATEUR 
and VALIDITE_COMPTE.DATE_CLOTURE_COMPTE > '2006-07-03' ORDER BY CLIENTS.NOM_CLIENT asc ) 
tbl1 ORDER BY CLIENTS.NOM_CLIENT desc ) 
as tbl2 order by CLIENTS.NOM_CLIENT asc

j'obtiens ce message d'erreur :

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'UTILISATEUR.CODE_UTILISATEUR' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'UTILISATEUR.IDENTIFIANT_UTILISATEUR' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'CLIENTS.NOM_CLIENT' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'CLIENTS.CODE_CLIENT' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'INTERLOCUTEURS.NOM_CONTACT' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'VALIDITE_COMPTE.DATE_CREATION_COMPTE' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'TYPE_ACCES_UTILISATEUR.TYPE_ACCES_UTILISATEUR' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'UTILISATEUR.MOT_PASSE_UTILISATEUR' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'VALIDITE_COMPTE.DATE_CLOTURE_COMPTE' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'CLIENTS.NOM_CLIENT' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: message: L'identificateur en plusieurs parties 'CLIENTS.NOM_CLIENT' ne peut pas être lié. (severity 16) in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175

Warning: mssql_query() [function.mssql-query]: Query failed in D:\www\ExtranetClient\administration\suiviUtilisateurs.php on line 175
Requête invalide
ce que je ne comprends pas c'est que si j'isole la requête et lance seulement le "morceau" du milieu :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
SELECT TOP 50 UTILISATEUR.CODE_UTILISATEUR, 
UTILISATEUR.IDENTIFIANT_UTILISATEUR, CLIENTS.NOM_CLIENT, CLIENTS.CODE_CLIENT, INTERLOCUTEURS.NOM_CONTACT,
VALIDITE_COMPTE.DATE_CREATION_COMPTE, TYPE_ACCES_UTILISATEUR.TYPE_ACCES_UTILISATEUR, 
UTILISATEUR.MOT_PASSE_UTILISATEUR,VALIDITE_COMPTE.DATE_CLOTURE_COMPTE FROM VALIDITE_COMPTE, 
TYPE_ACCES_UTILISATEUR, CLIENTS, UTILISATEUR, INTERLOCUTEURS 
where UTILISATEUR.CODE_CONTACT=INTERLOCUTEURS.CODE_CONTACT 
and UTILISATEUR.CODE_VALIDITE_COMPTE=VALIDITE_COMPTE.CODE_VALIDITE_COMPTE 
and INTERLOCUTEURS.CODE_CLIENT=CLIENTS.CODE_CLIENT 
and VALIDITE_COMPTE.CODE_TYPE_ACCES_UTILISATEUR=TYPE_ACCES_UTILISATEUR.CODE_TYPE_ACCES_UTILISATEUR 
and VALIDITE_COMPTE.DATE_CLOTURE_COMPTE > '2006-07-03' ORDER BY CLIENTS.NOM_CLIENT asc ) 
tbl1 ORDER BY CLIENTS.NOM_CLIENT desc
ca fonctionne !
mais si j'exécute tte la requête, ça plante.
je ne comprends pas du tout le msg d'erreur
au départ je pensais que avec MSSQL on ne pouvait pas utiliser la syntaxe : table.Nom de champ ('UTILISATEUR.CODE_UTILISATEUR') mais ce n'est pas ça puisque le partie du milieu fonctionne.

quelqu'un peut-il m'aider ??

merci d'avance pour votre aide.