2008-10-30 5 views
4

J'essaie de tirer des données d'un système de données d'appel ACD, Nortel Contact Center 6.0 pour être exact, et si vous utilisez ce système particulier, ce que j'essaie de capturer est l'appel quotidien par appel. Cependant, lorsque j'utilise ce codeErreur de table de requête SQL VBA

(SCW est une chaîne de texte commun qui équivaut à eCallByCallStat et sDate est

dDate = Format(Month(deffDate) & "/" & iStartDay & "/" & Year(deffDate), "mm/dd/yyyy")

sDate = Format(dDate, "yyyymmdd") )

sSql = "" 
     sConn = "ODBC;DSN=Aus1S002;UID=somevaliduser;PWD=avalidpassword;SRVR=Thecorrectserver;DB=blue" 
     sSql = "SELECT " & sCW & sDate & ".Timestamp, " 
     sSql = sSql & sCW & sDate & ".CallEvent, " 
     sSql = sSql & sCW & sDate & ".CallEventName, " 
     sSql = sSql & sCW & sDate & ".CallID, " 
     sSql = sSql & sCW & sDate & ".TelsetLoginID, " 
     sSql = sSql & sCW & sDate & ".AssociatedData, " 
     sSql = sSql & sCW & sDate & ".Destination, " 
     sSql = sSql & sCW & sDate & ".EventData, " 
     sSql = sSql & sCW & sDate & ".Source, " 
     sSql = sSql & sCW & sDate & ".Time " & vbCrLf 
     sSql = sSql & "FROM blue.dbo.eCallByCallStat" & sDate & " " & sCW & sDate & vbCrLf 
     sSql = sSql & " ORDER BY " & sCW & sDate & ".Timestamp" 


     Set oQT = ActiveSheet.QueryTables.Add(Connection:=sConn, Destination:=Range("A1"), Sql:=sSql) 

     oQT.Refresh BackgroundQuery:=False 

     Do While oQT.Refreshing = True 
     Loop" 

Quand je lance ce que je reçois un message d'erreur impair à oQT.Refresh BackgroundQuery: = False

Étrangement il a travaillé pour un mois puis vient de mourir


@ Loopo En fait, j'ajouté le "" à la chaîne de connexion et ont en fait le nom d'utilisateur et mot de passe codés en dur dans la requête avec les citations, je ont depuis les pour plus de clarté dans l'affichage


l'erreur que je reçois est

erreur d'exécution « -2147417848 (80010108) » : Méthode 'Actualiser "de l'objet" _QueryTable' n'a pas pu


Merci pour votre contribution Kevin. La base de données n'est jamais dans un état où personne n'y accède, c'est un système de traitement d'appel qui est sur 24 x 7 et toujours connecté aux clients. Au moins c'est ma compréhension. Si je le fais manuellement via Excel, je ne reçois jamais d'erreur, ou j'ai des problèmes seulement quand je le fais via une macro, cela me donne des problèmes qui me font penser que c'est mon code qui cause le problème.

Je me connecte à la base de données via ODBC comme recommandé par le fabricant, mais je me demande si ils ont déjà envisagé ce genre de chose.

Je vais voir si je peux tirer parti de cela dans un projet .NET et voir si cela aide.

+0

Quel est le message d'erreur? – Taptronic

+0

idem, quel est le numéro d'erreur et le message que vous obtenez? –

Répondre

1

On dirait une erreur avec la requête elle-même ...

Si vous pouvez parcourir votre code et d'afficher le contenu de sSQL, il serait probablement aider à résoudre ...

Quand vous allez à travers elle , assurez-vous que les citations sont correctement échappées.

1

Il semble que votre chaîne de connexion comporte des guillemets doubles. Cela pourrait être dû à une analyse par le site

vous devriez probablement mettre sConn en utilisant « double double » entre guillemets, comme dans:

sConn = "ODBC;DSN=Aus1S002;UID=""somevaliduser"";PWD=""avalidpassword"";SRVR=""Thecorrectserver"";DB=blue" 
0

Je commence par la suppression du contenu de sSQL avec sSql=""

après cela, parce que la requête est exécutée dans une boucle for je construis la requête dans chacune des lignes suivantes, chaque ligne se construit sur la ligne précédente, je l'ai fait de sorte qu'il serait plus facile de modifier et de comprendre par la prochaine gars.

Après avoir parcouru l'sSQL ressemble à ceci

sSQL=SELECT eCallByCallStat20081001.Timestamp, eCallByCallStat20081001.CallEvent, 
eCallByCallStat20081001.CallEventName, eCallByCallStat20081001.CallID, 
eCallByCallStat20081001.TelsetLoginID, eCallByCallStat20081001.AssociatedData, 
eCallByCallStat20081001.Destination, eCallByCallStat20081001.EventData, 
eCallByCallStat20081001.Source, eCallByCallStat20081001.Time FROM 
blue.dbo.eCallByCallStat20081001 eCallByCallStat20081001 ORDER BY 
eCallByCallStat20081001.Timestamp 
+0

La table existe, toutes ces colonnes existent, etc., oui? Pouvez-vous poster le message d'erreur exact? Merci. –

1

Quel est le message d'erreur réel que vous obtenez?

Dans la clause FROM, essayez-vous de sélectionner à partir de 2 tables différentes, avec le même nom dans différents espaces de noms? (Dans ce cas, je pense qu'ils devraient être séparés par une virgule plutôt qu'un espace)

Ou est-il censé être un autre '.' au lieu de l'espace dans la clause FROM? Ou est-ce un alias?

Avez-vous besoin de spécifier le tableau pour chaque champ? pourquoi ne pas simplement faire:

SELECT Timestamp, CallEvent, ... ,Time 
     FROM blue.dbo.eCallByCallStat" & sDate & " ORDER BY Timestamp 
+0

J'ai essayé votre notation et j'ai reçu une erreur de syntaxe. – CABecker

1

Tout d'abord, si vous vous connectez à une base de données non générique (SQL Server, Oracle, etc.), essayez d'utiliser une connexion de base de données qui est spécifique à ce. Deuxièmement, puisque vous avez dit que cette erreur va et vient, pouvez-vous tester si cela se produit quand personne d'autre n'accède au système? Peut-être un problème avec certaines lignes étant verrouillé pendant que votre requête tente de les lire ...

Troisièmement, soit passer à une méthode de rapports différents ou trouver un autre moyen pour obtenir les données. Il existe des limites à ce type d'appel dans Excel. Bien que, oui, cela vous permette certainement de vous connecter à des bases de données et d'extraire des données, vous risquez de ne pas être à la hauteur si vous travaillez avec de grands ensembles de données, des requêtes complexes ou des connexions de bases de données compliquées.