Помогите с результатом запроса [MySQL]
От: Pacman Казахстан  
Дата: 18.05.09 15:24
Оценка:
Здравствуйте!

Я работаю в 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 — там тоже результат выводиться сплошным текстом (не в виде таблицы)

Никак не могу понять в чём загвоздка
Re: Помогите с результатом запроса [MySQL]
От: Роман Дубров Украина Я@Blogspot
Дата: 18.05.09 15:51
Оценка:
Pacman пишет:

> Сначала думал дело в функции SUM и убирал но результат такой же: Memo.

> Проверял запрос в phpmyadmin — там тоже результат выводиться сплошным
> текстом (не в виде таблицы)

ну дык запрос же возвращает одно поле — зачем тут таблица?

> Никак не могу понять в чём загвоздка


с дельфи не знаком, но если надо чтобы обязательно возвращалась запись,
а не просто значение, мож извернуться как-нить вроде
SELECT ROUND(SUM(t1.p1 * t2.p1 / 1000), 4) AS rez, 1 AS dummy

?
Posted via RSDN NNTP Server 2.1 beta
http://www.linkedin.com/in/romandubrov .::. http://roman-dubrov.blogspot.com/ .::. http://www.flickr.com/photos/romandubrov/
Re[2]: Помогите с результатом запроса [MySQL]
От: Pacman Казахстан  
Дата: 18.05.09 18:25
Оценка:
Здравствуйте, Роман Дубров, Вы писали:

РД>Pacman пишет:


>> Сначала думал дело в функции SUM и убирал но результат такой же: Memo.

>> Проверял запрос в phpmyadmin — там тоже результат выводиться сплошным
>> текстом (не в виде таблицы)

РД>ну дык запрос же возвращает одно поле — зачем тут таблица?


не так выразился, я хотел сказать в виде нормального значения, которое можно прочитать как AsFloat и т.п.

>> Никак не могу понять в чём загвоздка


РД>с дельфи не знаком, но если надо чтобы обязательно возвращалась запись,

РД>а не просто значение, мож извернуться как-нить вроде
РД>
РД>SELECT ROUND(SUM(t1.p1 * t2.p1 / 1000), 4) AS rez, 1 AS dummy
РД>

РД>?

Это, к сожалению, не помогает.
Ну никак не считывается результирующее значение. Пробовал разместить DBMemo (значение отображается), а считать по прежнему не могу
Re: Помогите с результатом запроса [MySQL]
От: Nonmanual Worker  
Дата: 19.05.09 03:49
Оценка:
Здравствуйте, Pacman, Вы писали:

Известный мне баг. Это фича некоторых версий (не скожу точно каких, может всех) MySQL. MySQL (или клиентская либа, дальше не копал) возвращает клиенту неверный тип поля в случае использования некоторых групповых функций типа SUM.
Читайте как мемо поле как блобстрим, потом в строку, потом во флоат. Ну или можете поправить зеос, дабы он с помощью вашей "подсказки" представлял это поле как TFloatField.
Re[2]: Помогите с результатом запроса [MySQL]
От: Pacman Казахстан  
Дата: 19.05.09 13:36
Оценка:
Здравствуйте, 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
Re[3]: Помогите с результатом запроса [MySQL]
От: Nonmanual Worker  
Дата: 20.05.09 06:15
Оценка:
Здравствуйте, Pacman, Вы писали:

P>Это я пытался, но не получилось. Ошибок не выводило, но всё равно NULL.


Странно, верно выводится ли число, если его показать в чем-то типа TDBMemo?
Если да, то вы как-то его неверно читаете из поля.
Re[3]: Помогите с результатом запроса [MySQL]
От: G0ga  
Дата: 28.05.09 10:20
Оценка:
Здравствуйте, 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
Re[4]: Помогите с результатом запроса [MySQL]
От: Pacman Казахстан  
Дата: 28.05.09 17:53
Оценка:
Здравствуйте, G0ga, Вы писали:

G>Проверь схему на правильность установки типа поля и параметр MaxLength


Я уже разобрался с этим, спасибо!
Просто по видимому я периодически данные с ошибками ввожу в скриптах.

А изначальный вопрос просто неверный тип результата всё ещё стоит. Если у кого есть какие советы, буду очень благодарен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.