2016-08-17 1 views
2

J'essaie d'obtenir la gauche 7 caractères d'une colonne, et la totalité d'une deuxième colonne d'une table dans ma base de données. Le code que j'utilise pour faire cela ressemble à ceci (moins la chaîne de connexion, je ne veux pas le donner).ASP classique Comment se référer à un champ, je changeai avec GAUCHE

Set conn=Server.CreateObject("ADODB.Connection") 
conn.Provider="Microsoft.Jet.OLEDB.4.0" 
conn.Open "myConnectionString" 
Set rs=Server.CreateObject("ADODB.Recordset") 

rs.Open "SELECT DISTINCT LEFT(Location,7), StopID FROM LocStop", conn 

do until rs.eof 
    Response.Write(rs("Location")) 
    Response.Write(rs("StopID")) 
    rs.movenext 
loop 

Cela donne l'erreur « erreur ADODB.Recordset « 800a0cc1 » article ne se trouve dans la collection correspondant au nom demandé ou ordinal. » sur la ligne Response.Write(rs("Location")). L'utilisation rs.fields("Location") échoue de la même manière

Quand je lance ce code sans GAUCHE appeler cela fonctionne très bien. Ma conjecture est que le nom de colonne Location n'est pas pris ou est changé quand j'utilise LEFT dessus. Je ne sais pas comment je suis maintenant censé obtenir cette information maintenant. Est-ce que quelqu'un sait si ma supposition était correcte, et comment obtenir l'information dont j'ai besoin?

+0

Une fois que vous tournez une colonne dans une * colonne calculée (appliquer une fonction pour changer le résultat) * vous ne référencez plus cette colonne particulière, mais une colonne calculée maintenant séparée qui doit être aliasé . Cependant, il n'y a aucune raison de ne pas utiliser le nom de colonne existant i.e 'LEFT (Location, 7) [Location]' fonctionnera par exemple. – Lankymart

+0

Encore un autre doublon possible [jeu d'enregistrements ASP Classic impossible de voir les colonnes avec le format 'table.column_name' après la conversion MySQL] (http://stackoverflow.com/q/33263086/692942) * (ignorer la partie MySQL même problème s'applique à travers plusieurs fournisseurs qui utilisent ADODB) *. – Lankymart

Répondre

2

deux façons:

  • Donnez-lui un alias :

    SELECT DISTINCT LEFT(Location,7) as Location, StopID 
    FROM LocStop 
    

    puis reportez-vous à l'aide du nom d'alias:

    Response.Write(rs("Location")) 
    
  • Ou vous pourriez faire référence par son index: (le nom du champ n'aura pas d'importance)

    Response.Write(rs(0)) 
    
+0

Ce n'est pas quelque chose de nouveau et a été répondu à de nombreuses reprises auparavant. – Lankymart