Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71

Сортировка AdoTable по дате. Несовпадение типов

11.03.2015, 12:42. Показов 3888. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Есть DbGridEh, в котором очень нужна автосортировка по дате. При компиляции программы-все работает, все замечательно, но как только дело доходит до сортировки вот таким вот способом:
fdm.Adotable1.Sort := 'Дата DESC'
Возникает ошибка "Несовпадение типов". БД Access, поле Дата, как и положено в DateTime.
Уважаемые асы, такая проблема возникает только у меня? И можно ли это как-то исправить, не используя sql?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2015, 12:42
Ответы с готовыми решениями:

Сортировка ADOTable по дате. Выборка из таблицы по дате
Доброго вечера! Пытался решить проблему сам - не получилось. Тезисно: имеется программа, сделанная в c++ Builder; из бд Accsess в программе...

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

Несовпадение типов
Сабж, судя по всему проблема связана с Mid(), остальная часть кода выполняется 'пузырьковая сортировка массива состоящего из строк,...

18
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
11.03.2015, 15:04
Из мануала по EhLib:
Использование DBGridEh для сортировки и фильтрации данных в DataSet.
DBGridEh не может сортировать или фильтровать данные самостоятельно. Но он может послать команду для сортировки или фильтрации специальному объекту, который сделает это в DataSet'е. Вы можете выбрать 2 типа сортировки (локальная и серверная) используя свойство SortLocal и два типа фильтрации (также локальная и серверная), но реальная возможность применения каждого типа операции зависит от типа DataSet'а.
Библиотека имеет набор специальные объекты для сортировки/фильтрации стандартных типов DataSet'ов поставляемых вместе с Delphi.
Для автоматической фильтрации/сортировки данных в dataset'е требуется добавить один из модулей EhLibXXX (EhLibADO, EhLibBDE, EhLibCDS ... в зависимости от dataset'а, подключенного к grid') в раздел 'uses' любого модуля вашего проекта. Эти EhLibXXX модули содержат код для регистрации класса который наследуется от TDatasetFeaturesEh (специальный объект) и осуществляет фильтрацию/сортировку в DataSet'е.
Настройка сетки для сортировки данных:
TDBGridEh позволяет отображать специальные sortmarking bitmaps (маленькие треугольники) в правой части заголовков столбцов. Для отображения sortmarking bitmaps добавьте dghAutoSortMarking в свойство OptionsEh. Добавьте также dghMultiSortMarking в OptionsEh для обеспечения одновременной пометки сортировки по нескольким столбцам. Установите Column.Title.TitleButton в True для заголовков, у которых вы хотите изменять sortmarkers в run-time.
1
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71
11.03.2015, 18:09  [ТС]
Спасибо, разобралась!

Добавлено через 1 минуту
Но только все-равно ошибка "Несовпадение типов"

Добавлено через 42 секунды
Как ее исправить? Замучила она меня.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
11.03.2015, 18:34
Если "разобралась", то ошибки этой быть не должно.
Инструкция к библиотеке EhLib предполагает реализацию сортировки, в том числе, и без какого либо кода вообще. Т.е. нет кода - не должно быть проблемы.
А предъявленный текст ошибки не позволяет дать рекомендации. Узнать причину ее появления без отладки проекта довольно сложно.
1
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71
11.03.2015, 18:45  [ТС]
указывает на это
Delphi
1
2
3
4
5
6
7
8
9
procedure TCustomADODataSet.Activatetextfilter(const Filtertext: text);
begin
  try
    Recordset.Filter := Filtertext;
  except
    CursorPosChanged;
    raise;
  end;
end;
Добавлено через 2 минуты
Код есть, немного:
Delphi
1
2
3
4
5
procedure TfEditor.FormShow(Sender: TObject);
begin
DBGridEh1.Columns[1].Title.SetNextSortMarkerValue(False);
DBGridEh1.DefaultApplySorting;
end;
Добавлено через 4 минуты
Просто без этого кода он автоматически не сортирует, все-равно надо кликать по title
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
11.03.2015, 19:00
А что запрещает использовать в DataSet'е SQL запросы для фильтрации данных?
Не было бы вышеназванной проблемы.
Появились бы другие
1
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71
11.03.2015, 19:06  [ТС]
не, других мне не надо, у меня итак проблем море. SQL не могу, т.к. программа почти готова ( осталась только сортировка) и не хочется AdoConnection c AdoTable и DataSource'ом менять на AdoQuery
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
11.03.2015, 19:14
Непонятно тогда при чем здесь ADODataset (в процедуре выше)...?
Кстати, слово Дата, вряд ли можно применять в качестве имени поля.
Или может быть его взять в квадратные скобки (хотя АДО в Дельфи не признает скобки в именах таблиц и полей, но что-то пытаться делать надо).
1
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71
11.03.2015, 19:54  [ТС]
Дату брала в скобки, та же ошибка. Сейчас попробую переименовать имя поля, посмотрим, может, поможет.

Добавлено через 32 минуты
Смена имени поля не помогает...

Добавлено через 5 минут
ОБОЖЕМОЙ, как меня достала эта ошибка! Уже чего только не пробовала. Даже мысли возникали, что чертову дату надо конвертировать в integer и тогда уже сортировать
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
11.03.2015, 20:16
А выложить здесь проект нет возможности?
1
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71
11.03.2015, 20:19  [ТС]
есть, не вопрос! Вот:
Вложения
Тип файла: rar проект.rar (800.2 Кб, 18 просмотров)
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
11.03.2015, 20:33
Хорошо, а сейчас проблема в сортировке или при установке фильтра?
1
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71
11.03.2015, 20:39  [ТС]
В сортировке, на форме Editor
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
11.03.2015, 21:15
Можно порекомендовать такой прием.
Форму fEditor убрать из автосоздания (меню Project->Options, раздел Forms, в левом списке отметить fEditor и нажать кнопочку ">", Ок).
На событие кнопки "Изменить" главной формы сделать так:
Delphi
1
2
3
4
5
6
7
8
9
procedure TfMain.Button3Click(Sender: TObject);
begin
  fEditor := TfEditor.Create(nil);
  try
    fEditor.ShowModal;
  finally
    fEditor.Free;
  end;
end;
Ошибка исчезнет.

---
При добавлении новой строки в грид на форме редактирование выползает ошибка из-за того что Text у едитов не может быть пустым. Там должна быть какая-то цифра. Видимо ноль.
1
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71
11.03.2015, 21:33  [ТС]
Ошибка не исчезла, к сожалению((

Добавлено через 5 минут
Появляется после того, как заходишь на форму editor, закрываешь ее, потом перемещаешься на следущую запись верхней таблицы основной формы
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
11.03.2015, 21:39
Лучший ответ Сообщение было отмечено Aiky как решение

Решение

У меня ошибки нет. А была именно такая.
А форму надо уничтожать.
В прицепе исходники проекта (без базы). Можно в какой-нибудь другой папке потестить.
Вложения
Тип файла: zip Aiky.zip (85.8 Кб, 26 просмотров)
1
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71
11.03.2015, 21:53  [ТС]
Обалдеть О_о Как так-то? У меня все то же самое, но косяк остается, а у вас его нету. Потестила в другой папке-нет ошибки!
Ай да Скандербег, ай спасибо!
Жирнейший плюс в карму! Огромное спасибо!

Добавлено через 7 минут
-____- Дико извиняюсь, но теперь другая чушь-в Editor добавляешь запись, все замечательно, стоит только закрыть Editor - на главное форме при клике на radiobutton "история передачи показаний" перестает отображаться нижняя таблица
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
11.03.2015, 22:06
Издержки методики древних приемов работы с компонентами доступа к БД.
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TfMain.Button3Click(Sender: TObject);
begin
  fEditor := TfEditor.Create(nil);
  try
    fEditor.ShowModal;
  finally
    fEditor.Free;
    fDM.ADOTable2.Open; //<--надо добавить открытие таблицы заново
  end;
end;
1
 Аватар для Aiky
5 / 3 / 2
Регистрация: 14.12.2014
Сообщений: 71
11.03.2015, 22:10  [ТС]
Ну да, я уже поняла))

Добавлено через 13 секунд
Еще раз-Большое спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2015, 22:10
Помогаю со студенческими работами здесь

несовпадение типов
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key='e' then e:=1; говорит -...

Несовпадение типов
Подскажите,выдает ошибку а понять что именно не нравится что-то не могу.Какой тип не подходит. Заранее благодарен. unit Z433_17; ...

Несовпадение типов
Сделал простенький проект шахматных часов, но захотел осуществить идею смены времени партии через меню...например нажал в меню на -(Партия...

Несовпадение типов
Здравствуйте! Такой вопрос возник: как переменной типа BitMap присвоить картинку, открытую через opeFileDialog(так как картинка изначально...

Несовпадение типов
Всем добрый день))) Сегодня столкнулся с такой проблемой: У меня есть столбец &quot;Дата&quot;, где они хранятся в таком вот формате:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru