2012-05-10 1 views
0

Je suis en train d'exécuter l'instruction SQL suivante (construit et contrôlé SQL Server 2005)sql instruction select sur un fichier csv, en utilisant le pilote JET.OLEDB

Select * 
From mytesttable 
where myPk in 
(
     select t3 from (
      select field1, substring(field3, charindex(":", field3),6) t2, min(mypk) t3 
      from mytesttable 
      group by field2, substring(field3, charindex(":", field3),6) 
    ) t 
) 

Je sais que je ne peux pas utiliser substring ou charindex. Donc, le choix le plus interne ressemble à ceci dans vbs:

strsql = "select mid(field3, instr(1, field3, ":")), min(mypk) from " 
strsql = strsql & myCSVFileName 
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ":")) " 

Cela fonctionne très bien. Mais quand j'essaie d'ajouter la sélection suivante pour envelopper la sélection la plus interne, elle échoue. Le code ressemble à ceci:

strsql = "select mypk from (select mid(field3, instr(1, field3, ":")), min(mypk)  from " 
strsql = strsql & myCSVFileName 
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ":")))" 

Le message d'erreur que je reçois est qu'il ya

Aucune valeur donnée pour un ou plusieurs paramètres requis

Toutes les suggestions? Merci.

Répondre

0

Il y a quelques erreurs dans votre chaîne, mais fournir un alias pour une table dérivée n'est pas nécessaire dans Jet.

Vous avez répété la ligne avec le nom csv, vous avez utilisé des guillemets lorsque des guillemets simples ou deux guillemets doubles doivent être utilisés, et vous n'avez pas de champ appelé mypk à renvoyer. Cela fonctionne pour moi, mais seulement si le champ 3 contient toujours du texte avec un deux-points.

myCSVFileName = "Table.csv" 
strsql = "select pk from (select mid(field3, instr(1, field3, ':')), min(mypk) as pk from " 
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ':')))" 
1

Je ne connais pas Jet, mais dans SQL Server et d'autres plates-formes, les tables dérivées doivent être aliasées. En d'autres termes, vous auriez besoin

... FROM (select ...) AS YouMustProvideAnAliasForThisDerivedTable 

aussi faire attention à utiliser le même boîtier chaque fois que vous mentionnez une colonne (mypk contre myPk), bien que cela ne semble pas être le problème.

+0

Il n'est pas nécessaire d'alias des tables dérivées lorsque vous travaillez avec MS Access (Jet/ACE) – Fionnuala

Questions connexes