2010-02-22 8 views
1

J'ai une fonction VBA, et je veux ajouter le SQL suivant, mais étant un débutant, je ne sais pas comment casser la requête dans le code.SQL dans la fonction VBA

La requête:

strSQL = "select (SELECT COUNT (DISTINCT CUSTOMER_ACCOUNT.ID) AS NUMBER_OF_ACCOUNTS_NOT_DELETED FROM  CUSTOMER_ACCOUNT INNER JOIN 
ACCOUNT ON CUSTOMER_ACCOUNT.ACCOUNT_ID=ACCOUNT.ID 
WHERE 
Convert(datetime,convert(char(10),[CUSTOMER_ACCOUNT].CREATED_ON,101)) 
BETWEEN '2009-01-01' AND '2009-12-31' AND CUSTOMER_ACCOUNT.DELETED!='1' AND  ACCOUNT.DELETED !='1' 
) 
- 
(SELECT COUNT (DISTINCT dLOAD_ACCOUNT_DETAIL.ACCOUNT_NUMBER) AS NOT_ACTIVE_ACCOUNTS 

FROM   dbo.LOAD_ACCOUNT_DETAIL LEFT OUTER JOIN 
        ACCOUNT ON dbo.LOAD_ACCOUNT_DETAIL_0.ID = dbo.ACCOUNT.ID WHERE 
ACCOUNT_STATUS !='1') AS DIFFERENCE 

Buting la chose entre guillemets ne fonctionnent pas ...!

+0

1. que, exactement, voulez-vous dire par cela ne fonctionne pas? 2. Je ne suis pas sûr que votre SQL est correct en premier lieu. Cette déclaration n'a pas beaucoup de sens pour moi. – moleboy

Répondre

1
Dim myString As String 

myString = "You can " & _ 
    "use '& _' to concatenate " & _ 
    "strings over multiple lines." 
+0

+1 il y a une limite supérieure sur le nombre de concaténations - quelque part entre 20 et 30 - dans une seule déclaration de sorte que vous pourriez avoir à construire une très longue déclaration par étapes – barrowc

2

Selon la façon dont vous exécutez votre requête, vous avez souvent de casser votre requête en morceaux plus petits (moins de ~ 200 caractères, j'oublier montant exact).

Cela se fait en découpant en un tableau de chaînes:

Soit:

QueryArry = Array("Your ","Query ","here ") 

En utilisant la méthode de Marg cela devient:

QueryArry = Array("Your ", _ 
    "Query ", _ 
    "here ") 

Ou vous pouvez le faire comme ceci:

Dim QueryArry(0 to 100) as String 
QueryArry(0)="Your " 
QueryArry(1)="Query " 
QueryArry(2)="Here " 

AVERTISSEMENT: Dans tous les cas, assurez-vous d'ajouter un espace avant la fin de chaque citation ... car ces lignes sont ajoutées ensemble et sans l'espace supplémentaire serait "YourQueryHere" au lieu de "Your Query Here".

Dan

+0

okkk ..... mais comment puis-je exécuter le array? .. avec une requête j'ai utilisé ceci Set rsData = objConn.Execute (strSQL) .. maintenant avec le tableau? en utilisant cette méthode: Dim QueryArry (0 à 100) sous forme de chaîne QueryArry (0) = "Votre" QueryArry (1) = "Requête" QueryArry (2) = "Ici" – andreas

+0

Oui. Définissez rsData = objConn.Execute (QueryArry) ... bien que cela dépende du reste de votre code, mais cela devrait fonctionner. Si vous obtenez des messages d'erreur étranges du SQL, essayez d'exécuter le SQL dans une autre application ... Excel ne donne pas de messages d'erreur informatifs, d'autres programmes vous diront où dans le code il y a un problème. – Dan

1

Vous pouvez également le casser comme ça:

strSQL = "select (" 
strSQL = strSQL & "SELECT COUNT (DISTINCT CUSTOMER_ACCOUNT.ID) AS NUMBER_OF_ACCOUNTS_NOT_DELETED FROM  CUSTOMER_ACCOUNT INNER JOIN " 
strSQL = strSQL & "ACCOUNT ON CUSTOMER_ACCOUNT.ACCOUNT_ID=ACCOUNT.ID " 
... 

Je préfère cette façon la strSQL = "..." & _ "..." & _ » .. . "sur plusieurs lignes, mais pomme de terre/pomme de terre ...

Questions connexes