Я работаю в Delphi7+MySQL+ZeosDB.
У меня такая проблема: в базе есть запрос, результатом которого как я понимаю должно быть одно число типа DOUBLE, но результат возвращается типа MEMO. Просто выводить результат в DBMemo не требуется, результат необходим для дальнейших расчетов, но я никак немогу его прочитать.
Никакие ZQuery1.FieldByName('rez').AsString, AsFloat, Value результат не отображают (NULL).
хотя ZQuery1.RecordCount = 1 и ZQuery1.FieldByName('rez').DataType = ftMemo.
Вот запрос:
SELECT ROUND(SUM(t1.p1 * t2.p1 / 1000), 4) AS "rez"
FROM t1 INNER JOIN t2
ON t1.id = t2.id
WHERE (t1.p2 <> 0)
AND (t2.p2 = '2009-05-18');
Сначала думал дело в функции SUM и убирал но результат такой же: Memo.
Проверял запрос в phpmyadmin — там тоже результат выводиться сплошным текстом (не в виде таблицы)
Pacman пишет:
> Сначала думал дело в функции SUM и убирал но результат такой же: Memo. > Проверял запрос в phpmyadmin — там тоже результат выводиться сплошным > текстом (не в виде таблицы)
ну дык запрос же возвращает одно поле — зачем тут таблица?
> Никак не могу понять в чём загвоздка
с дельфи не знаком, но если надо чтобы обязательно возвращалась запись,
а не просто значение, мож извернуться как-нить вроде
SELECT ROUND(SUM(t1.p1 * t2.p1 / 1000), 4) AS rez, 1 AS dummy
Здравствуйте, Роман Дубров, Вы писали:
РД>Pacman пишет:
>> Сначала думал дело в функции SUM и убирал но результат такой же: Memo. >> Проверял запрос в phpmyadmin — там тоже результат выводиться сплошным >> текстом (не в виде таблицы)
РД>ну дык запрос же возвращает одно поле — зачем тут таблица?
не так выразился, я хотел сказать в виде нормального значения, которое можно прочитать как AsFloat и т.п.
>> Никак не могу понять в чём загвоздка
РД>с дельфи не знаком, но если надо чтобы обязательно возвращалась запись, РД>а не просто значение, мож извернуться как-нить вроде РД>
РД>SELECT ROUND(SUM(t1.p1 * t2.p1 / 1000), 4) AS rez, 1 AS dummy
РД>
РД>?
Это, к сожалению, не помогает.
Ну никак не считывается результирующее значение. Пробовал разместить DBMemo (значение отображается), а считать по прежнему не могу
Известный мне баг. Это фича некоторых версий (не скожу точно каких, может всех) MySQL. MySQL (или клиентская либа, дальше не копал) возвращает клиенту неверный тип поля в случае использования некоторых групповых функций типа SUM.
Читайте как мемо поле как блобстрим, потом в строку, потом во флоат. Ну или можете поправить зеос, дабы он с помощью вашей "подсказки" представлял это поле как TFloatField.
Здравствуйте, Nonmanual Worker, Вы писали:
NW>Здравствуйте, Pacman, Вы писали:
NW>Известный мне баг. Это фича некоторых версий (не скожу точно каких, может всех) MySQL. MySQL (или клиентская либа, дальше не копал) возвращает клиенту неверный тип поля в случае использования некоторых групповых функций типа SUM. NW>Читайте как мемо поле как блобстрим, потом в строку, потом во флоат. Ну или можете поправить зеос, дабы он с помощью вашей "подсказки" представлял это поле как TFloatField.
Это я пытался, но не получилось. Ошибок не выводило, но всё равно NULL.
Но всё равно спасибо.
Тут я пытался обойти ешё одной таблицой и двумя подряд запросами:
UPDATE table_rez
SET rez = (SELECT (SUM(t1.p1 * t2.p1) / 1000)
FROM t2 INNER JOIN t1
ON (t2.id = t1.id)
WHERE (t2.p2 <> 0)
AND (t1.p2 = '2009-05-19'));
SELECT rez FROM table_rez;
но теперь ошибка: #1265 — Data truncated for column 'rez' at row 5
Здравствуйте, Pacman, Вы писали:
P>Здравствуйте, Nonmanual Worker, Вы писали:
NW>>Здравствуйте, Pacman, Вы писали:
NW>>Известный мне баг. Это фича некоторых версий (не скожу точно каких, может всех) MySQL. MySQL (или клиентская либа, дальше не копал) возвращает клиенту неверный тип поля в случае использования некоторых групповых функций типа SUM. NW>>Читайте как мемо поле как блобстрим, потом в строку, потом во флоат. Ну или можете поправить зеос, дабы он с помощью вашей "подсказки" представлял это поле как TFloatField.
P>Это я пытался, но не получилось. Ошибок не выводило, но всё равно NULL. P>Но всё равно спасибо.
P>Тут я пытался обойти ешё одной таблицой и двумя подряд запросами: P>UPDATE table_rez P>SET rez = (SELECT (SUM(t1.p1 * t2.p1) / 1000) P> FROM t2 INNER JOIN t1 P> ON (t2.id = t1.id) P> WHERE (t2.p2 <> 0) P> AND (t1.p2 = '2009-05-19')); P>SELECT rez FROM table_rez;
P>но теперь ошибка: P>#1265 — Data truncated for column 'rez' at row 5
Проверь схему на правильность установки типа поля и параметр MaxLength