Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2013, 02:21   #1
Igor_kud
Пользователь
 
Регистрация: 04.10.2013
Сообщений: 10
По умолчанию SQL

Если кто знает подскажите пожалуйста! В очередной раз завис так сказать на месте, перечитал много чего, но ответа не нашел, хотя по логике все правильно, и бывают запросы покруче и поболее чем этот, но тем не менее

Код:
   Query3.Active := false;
   Query3.SQL.Clear;
Query3.SQL.Add('INSERT INTO Itog1.db (Vopros_1, Vopros_2, Vopros_3, Vopros_4, Vopros_5)');
Query3.SQL.Add('SELECT SUM(Vopros_1)/count(Vopros_1) as Vopros_1, SUM(Vopros_2)/count(Vopros_1) as ');
Query3.SQL.Add('Vopros_2, SUM(Vopros_3)/count(Vopros_1) as Vopros_3, SUM(Vopros_4)/count(Vopros_1)');
Query3.SQL.Add('as Vopros_4, SUM(Vopros_5)/count(Vopros_1) as Vopros_5 FROM Itog.db');
   Query3.ExecSQL;
   Query3.close;

Без строки
Код:
Query3.SQL.Add('INSERT INTO Itog1.db (Vopros_1, Vopros_2, Vopros_3, Vopros_4, Vopros_5)');
все работает, с ней выдает ошибку "Type mismatch in expression", все везде цифра.
Заранее благодарен.
Igor_kud вне форума Ответить с цитированием
Старый 28.10.2013, 05:28   #2
Vad33
Участник клуба
 
Аватар для Vad33
 
Регистрация: 24.07.2009
Сообщений: 638
По умолчанию

Хорошо бы еще структуру Itog.db чтобы убедиться, что типы полей соответствуют.
** Удача терпелива. **
Vad3333@inbox.ru
Vad33 вне форума Ответить с цитированием
Старый 28.10.2013, 08:19   #3
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

а поля Vopros_1, Vopros_2, Vopros_3, Vopros_4, Vopros_5 в бд случаем не целочисленные?
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 28.10.2013, 09:13   #4
Igor_kud
Пользователь
 
Регистрация: 04.10.2013
Сообщений: 10
По умолчанию

Таблица Itog и таблица Itog1 имеет одинаковую структуру (Vopros_1;Vopros_2;Vopros_3;Vopros_ 4;Vopros_5) , тип данных=Числовой
Код:
 Add('Vopros_1',ftInteger,0,false);
      Add('Vopros_2',ftInteger,0,false);
      Add('Vopros_3',ftInteger,0,false);
      Add('Vopros_4',ftInteger,0,false);
      Add('Vopros_5',ftInteger,0,false);
Пробовал менять названия колонок в Itog1, результат то же.
Igor_kud вне форума Ответить с цитированием
Старый 28.10.2013, 09:24   #5
Vad33
Участник клуба
 
Аватар для Vad33
 
Регистрация: 24.07.2009
Сообщений: 638
По умолчанию

Цитата:
Сообщение от Igor_kud Посмотреть сообщение
Таблица Itog и таблица Itog1 имеет одинаковую структуру (Vopros_1;Vopros_2;Vopros_3;Vopros_ 4;Vopros_5) , тип данных=Числовой
Код:
 Add('Vopros_1',ftInteger,0,false);
      Add('Vopros_2',ftInteger,0,false);
      Add('Vopros_3',ftInteger,0,false);
      Add('Vopros_4',ftInteger,0,false);
      Add('Vopros_5',ftInteger,0,false);
Пробовал менять названия колонок в Itog1, результат то же.
Чтобы в целочисленное поле пихать дробный результат, его сначала
нужно округлить до целого. Намек понятен?
** Удача терпелива. **
Vad3333@inbox.ru
Vad33 вне форума Ответить с цитированием
Старый 28.10.2013, 09:33   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Похоже парадокс? В sql не обязательно деление целого на целого дает вещественное. В сиквеле, например, дает целое. В парадоксе судя по ошибке - вещественное, значит результат не просто округить, а округлить и преобразовать в целое. А по логике - попытка получить некое среднее, и после преобразования в целое это среднее какое-то очень уж усредненное получится, не кажется?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.10.2013, 09:43   #7
Vad33
Участник клуба
 
Аватар для Vad33
 
Регистрация: 24.07.2009
Сообщений: 638
По умолчанию

Во многих нормальных SQL базах данных работает неявное преобразование типов
данных. Paradox сложно назвать нормальной SQL БД. Что-то работает, что-то нет.
** Удача терпелива. **
Vad3333@inbox.ru
Vad33 вне форума Ответить с цитированием
Старый 28.10.2013, 14:25   #8
Igor_kud
Пользователь
 
Регистрация: 04.10.2013
Сообщений: 10
По умолчанию

Спасибо, я в принципе так и подумал после того как написали "дай структуру". Буду сейчас искать как впихнуть дробное число.
Igor_kud вне форума Ответить с цитированием
Старый 28.10.2013, 15:17   #9
Igor_kud
Пользователь
 
Регистрация: 04.10.2013
Сообщений: 10
По умолчанию

Все получилось поменяв Integer на Currency. А не знает никто как можно ограничить Currency например на сотые? При создании таблицы это не реально?

Код:
Add('Vopross_1',ftCurrency,0,false);
Igor_kud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строки с помощью SQL запроса (Query1.SQL.ADD('Delete....')) Schutze Помощь студентам 6 29.11.2009 22:15
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15