Скопируйте SQL из Access в Delphi Script - PullRequest
0 голосов
/ 21 мая 2010

Я обнаружил трудности с SQL на Delphi, я использую ADOconnection и ADOQuery.

Вот эти запросы

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

Это Query Above имеет ошибку .... Я пытаюсь исправить, но все еще есть ошибка. Я надеюсь, что вы можете помочь моей проблеме, пожалуйста, исправьте этот запрос. Я использую Ms.Access XP для базы данных, если я запускаю этот запрос на Accsess, ошибка ничего не значит.

Я использую три объекта T_Customer, QUnionSAPiutang и QSumSAPiutang.

Где красный текст является частью QSumSAPiutang. Потому что QSumSAPiutang не соединяется напрямую с остальными, это вызов с DSum.

Пожалуйста, помогите мне, спасибо за ваше время. Я надеюсь, что ответ от вас скоро ....

Ответы [ 2 ]

0 голосов
/ 19 июля 2013

DSUM не является SQL. Это расширенная хранимая процедура, предоставляемая MSACCESS. В приложении Access он фактически ссылается на объект CurrentDB.

Если вы не выполняете этот запрос в Access, нет объекта Access Application.CurrentDB и расширенной хранимой процедуры DSUM.

Создан еще один сохраненный запрос в базе данных, который использует совокупный запрос для суммирования, а затем присоединяется к нему вместо использования DSUM.

Можно использовать объект Access для выполнения ваших запросов вместо использования объекта ADO. Но обычно это даже сложнее, медленнее и ненадежнее, чем использование другого агрегированного запроса.

0 голосов
/ 22 мая 2010

Похоже, вы пытаетесь сделать выборочное соединение между компонентами TQuery.Это невозможно AFAIK.

Вам необходим компонент TQuery против вашей БД, ссылающейся на таблицы БД (никаких других TQuery)

SQL.Text = "select myDBtable1.field1, myDBtable2.fieldxmyDBTable1 внутреннее соединение myDBtable2 ... "

...