0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 5
|
|
1 | |
MySQL Ошибка сортировки в Delphi 64bit поля Decimal04.12.2018, 19:37. Показов 1069. Ответов 9
Метки нет (Все метки)
Всем привет! Спецы Delphi и MySQL нужна ваша помощь)
Имеется: Delphi XE8 + dbExpress + старенький сервер Mysql v5.0.45 win32 + база MyISAM и в таблице поле DECIMAL(5,2) со знаком. Таблица храниться как: Charset cp1251 Collation: cp1251_general_ci В Delphi использую TSQLConnection + TDataSource + TSimpleDataSet TSQLConnection в параметрах прописал ServerCharSet cp1251 Из таблицы делается простой Select и сортировка по полю DECIMAL. Пока программа компилировалась как 32-разрядная, все работало. Однако пришлось переделать ее под 64 бита и сразу же вылезла неприятная ошибка - перестала работать сортировка по этому полю. Если программу снова пересобрать под 32 - сортировка работает. То есть ошибка только в 64 разрядной программе. Опытным путем было установлено, что положительные числа сортирует правильно: 2.25 2.5 2.75 Однако числа со знаком отказываются сортироваться -0.25 0.25 -0.5 0.5 и тд Тип DECIMAL(5,2) выбрал потому, что очень важна точность. Число 2.75 так и должно храниться в базе и не искажаться. На данный момет я не понимаю, где случается засада. Тип DECIMAL(5,2) хранится как строка, переведя программу под 64 разряда я изменил ее представление в программе, но не ясно где проблема: - TSQLConnection + TDataSource + TSimpleDataSet? - проблема во взаимодействии клиента с сервером, кодировки, правила сравнения для кодировки? Можно все порешать переведя поле во FLOAT, но я переживаю из-за потери точности, хотелось бы решить проблему с сортировкой DECIMAL
0
|
04.12.2018, 19:37 | |
Ответы с готовыми решениями:
9
Ошибка Cannot convert from 'ref decimal' to 'ref decimal? Хранимая процедура сортировки числового поля для сортировки по алфавиту Валидация поля decimal на стороне клиента без влияния региональных настроек Не работает запрос с одинаковыми типами данных c# decimal, SQL Server Decimal(18,2) |
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 5
|
|
04.12.2018, 21:12 [ТС] | 3 |
Сорри, самое главное забыл)
Да, запрос совсем простой: select * table order by field field - DECIMAL(5,2) со знаком В 32-ух разрядной программе все работало, в 64 разрядной выдает такое: 0 -0.25 0.25 -0.5 -0.75 -1 То есть перестает знак учитывать. Я больше склоняюсь к ошибке при взаимодействии клиента и сервера, только не ясно куда копать.
0
|
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,566
|
|
04.12.2018, 22:11 | 4 |
0
|
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 5
|
|
04.12.2018, 22:29 [ТС] | 5 |
Заюзал MySQL Query Browser, запрос отработал корректно. Но этот MySQL Query Browser 32-ух разрядный. Если я свою прогу сейчас перекомпилю в 32-разряда - она тоже снова заработает. Через какую 64-ех разрядную программу протестить можно? Или все таки переехать на MySQL версии 5.1 64-разрядную и там будут утилиты тоже 64 бит?
0
|
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,566
|
|
04.12.2018, 22:39 | 6 |
Проверять надо из 64 битного ПК - из mysql workbench 64-ух разрядный. https://www.mysql.com/products/workbench/
0
|
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 5
|
|
04.12.2018, 22:42 [ТС] | 7 |
ПК 64 битный, MySQL Query Browser 64-ух разрядный попрубую поискать, спасибо за наводку
Стоит ли делать такое? 1. Проапгрейдить мускул до mysql-essential-5.1.72-winx64.msi Сервер будет тоже 64 бит, как и моя программа 2. Переконвертировать всю базу в utf-8. Думаю сделать через dump, руками поменять кодирувку и collation и снова залить 3. Все взаимодействие клиент-сервер перевести на utf-8 character_set_client - utf8 character_set_connection - utf8 character_set_database - utf8 character_set_results - utf8 character_set_server - utf8 character_set_system - utf8 collation_connection - utf8_general_ci collation_database - utf8_general_ci collation_server - utf8_general_ci
0
|
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,566
|
|
04.12.2018, 22:48 | 8 |
Через MySQL Workbench 8.0.13 проверяй https://dev.mysql.com/downloads/workbench/ кодировка лучше на utf8 да
Добавлено через 1 минуту и ещё лучше если будите подключить через MyDAC
0
|
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 5
|
|
05.12.2018, 13:10 [ТС] | 10 |
MySQL Workbench 8.0.13 с моим сервером работать отказался, поставил MySQL Workbench 6.2 64bits, он при старте ругается, что нужен мускул хотя бы 5.1, но запускается. Запрос отработал корректно. То есть дело в программе.
В Delphi обнаружил FireDAC, кинул на форму FDConnection + FDQuery и запрос тоже работает, то есть дело в dbExpress. Выбросил TSimpleDataSet, взял просто TSQLQuery и он тоже отработал норм. Проблема локализовалась в TSimpleDataSet. Он кеширует данные в памяти, создает двунаправленный курсор. Когда я перевел прогу под 64 бита, он стал как то по другому кешировать данные и вот вылезла проблема. qwertehok, похоже действительно в этом проблема. Потому что вот еще из справки, но уже для мускула 5.5: У меня сервер старый 5.0, а Delphi и dbExpress относительно новые Delphi XE8 + Dbxmys.dll 22.0.19908.869 Видимо драйвер dbExpress слишком новый и не понимает старый мускул. Может можно нарыть где в инете старый Dbxmys.dll, который был под сервер 5.1 написан и пока его заюзать? А потом уже не спеша проапгрейдить мускул до 5 версий Добавлено через 7 минут Проапгрейдить мускул до 5.5 версии
0
|
05.12.2018, 13:10 | |
05.12.2018, 13:10 | |
Помогаю со студенческими работами здесь
10
Delphi ошибка синтаксиса при определение поля Настройка IPv6 (Debian 7 64bit/CentOS 6 64bit) на VPS OpenGL и невидимый Bitmap: не всякая поверхность строится под Delphi XE2 64bit Condition Zero 1.2 на Win7 64bit. Ошибка file read failure Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Блоги программистов | |||||
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества
Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
|
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов.
. . .
|
С чего начать программировать микроконтроллеры
raxper 06.01.2025
Введение в мир микроконтроллеров
Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
|
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
|
Обновление сайта www.historian.by
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
|
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
|
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list):
s=^y]
p=x and y
for i in range(1,len(x)):
s. append((x^y)^p)
p=(x and y)or(p and (x or y))
return s
x=list()
y=list()
|
Это мы не проходили, это нам не задавали...(асихронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
|
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
|