Вот такая у меня беда случилась.
Использую Lazarus 0.9.22 + sqllib.dll от MySQL 4.1 (это на рабочей машине, под winxp pro sp2).
На сервере - ASPLinux11.2 + MySQL Server v 4.1.20
В моем приложении есть куча запросов к БД, причем они только на чтение.
Запросы типа
- Код: Выделить всё
select customer_id from customers where( group_id=3)
но вот когда понадобилось сделать запрос с использованием группировки - вот тут и вылезло ... зло.
вот кусок кода приложения:
- Код: Выделить всё
SQLQuery3.Close;
SQLQuery3.SQL.Clear;
SQLQuery3.SQL.Append('SELECT');
SQLQuery3.SQL.Append('flows.dst_addr,');
SQLQuery3.SQL.Append('SUM(d_octets) AS field1');
SQLQuery3.SQL.Append('FROM');
SQLQuery3.SQL.Append('flows');
SQLQuery3.SQL.Append('WHERE');
SQLQuery3.SQL.Append('(src_addr = 12345) AND');
SQLQuery3.SQL.Append('(`timestamp` >= 20070703000000) AND');
SQLQuery3.SQL.Append('(`timestamp` <= 20070703235959)');
SQLQuery3.SQL.Append('GROUP BY');
SQLQuery3.SQL.Append('flows.dst_addr');
SQLQuery3.SQL.Append('ORDER BY');
SQLQuery3.SQL.Append('field1');
ShowMessage(SQLQuery3.SQL.Text);
SQLQuery3.ExecSQL;
не смотрите на громоздкость - просто уже перепробовал все возможные варианты. Вобчем этот код при исполнении дает ошибку. Причем ругается на GROUP.
Посмотрел в логах сервера и вот что вижу:
если по ShowMessage(SQLQuery3.SQL.Text); вижу нормальный запрос, без ничего лишнего, т.е.
- Код: Выделить всё
SELECT
flows.dst_addr,
SUM(d_octets) AS field1
FROM
flows
WHERE
(src_addr = 12345) AND
(`timestamp` >= 20070703000000) AND
(`timestamp` <= 20070703235959)
GROUP BY
flows.dst_addr
ORDER BY
field1
то на сервер он приходит в таком виде :
- Код: Выделить всё
SELECT
flows.dst_addr,
SUM(d_octets) AS field1
FROM(
flows
WHERE
(src_addr = 12345) AND
(`timestamp` >= 20070703000000) AND
(`timestamp` <= 20070703235959)
GROUP BY
flows.dst_addr
)ORDER BY
field1
Откуда появляются лишние скобки после FROM и перед ORDER ???
что их туда добавляет? Лазарус, библиотека клиента или сам сервер?
Как от этого можно избавиться?