2010-05-21 12 views
-1

J'ai trouvé un problème avec SQL sur Delphi, j'utilise ADOconnection et ADOQuery.Copier SQL de l'accès au script Delphi

Voici ces requêtes

With ADOQuery Do 
     Begin 
SQL.Text:='SELECT QUnionSAPiutang.kd_Customer, T_Customer.nama_customer, '    
+'CDbl(IIf(IsNull(DSum("SA","QSumSAPiutang","kd_Customer='" & [QUnionSAPiutang].[kd_Customer] & "' AND ' +'Tgl<#1/1/2010# ")),0,DSum("SA","QSumSAPiutang","kd_Customer='" & [QUnionSAPiutang].[kd_Customer] & "' ' +'AND Tgl<#1/1/2010# "))) AS SA1, Sum(QUnionSAPiutang.D) AS Debit, Sum(QUnionSAPiutang.K) AS Kredit, ' +'[SA1]+[Debit]-[Kredit] AS SAkh ' 
+'FROM QUnionSAPiutang INNER JOIN T_Customer ON ' 
+'QUnionSAPiutang.kd_Customer = T_Customer.kd_customer ' 
+'WHERE (((QUnionSAPiutang.Tgl) Between #1/1/2010# And #1/31/2010#)) ' 
+'GROUP BY QUnionSAPiutang.kd_Customer, T_Customer.nama_customer'; 
     End 

Cette requête ci-dessus a une erreur .... J'essaie de corriger, mais encore une erreur. J'espère que vous pouvez aider mon problème, s'il vous plaît corriger cette requête. J'utilise MsAccess XP pour la base de données, si je cours cette requête sur Accsess, l'erreur n'est rien. J'utilise trois objets T_Customer, QUnionSAPiutang et QSumSAPiutang.

Lorsque le texte rouge fait partie de QSumSAPiutang. coz QSumSAPiutang pas directement Joignez-vous aux autres, c'est appelez avec DSum.

S'il vous plaît aidez-moi, merci pour votre temps. J'espère que vous répondrez bientôt ....

+0

Est-ce que les tables existent dans MSAccess ou est MSAccess utilisant des tables SQL Server? –

+1

Quelle est l'erreur? –

Répondre

0

Il semble que vous essayez d'effectuer une jointure sélective entre les composants TQuery. Ce n'est pas possible AFAIK.

Vous avez besoin d'un composant TQuery contre vous DB référencement tables DB (aucune autre) TQuery de

SQL.Text = "select myDBtable1.field1, myDBtable2.fieldx de myDBTable1 jointure myDBtable2 ..."

0

DSUM n'est pas SQL. C'est une procédure stockée étendue fournie par MSACCESS. Dans une application Access, il fait référence à l'objet CurrentDB.

Si vous n'exécutez pas cette requête dans Access, il n'existe aucun objet Access Application.CurrentDB et aucune procédure stockée étendue DSUM.

Création d'une autre requête stockée dans la base de données qui utilise une requête agrégée pour effectuer la somme, puis se joindre à celle-ci au lieu d'utiliser DSUM.

Il est possible d'utiliser un objet Access pour exécuter vos requêtes au lieu d'utiliser un objet ADO. Mais c'est normalement encore plus difficile, plus lent et plus flou que d'utiliser une autre requête agrégée.