powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сравнение компонентов для доступа к данным
9 сообщений из 34, страница 2 из 2
Сравнение компонентов для доступа к данным
    #39137605
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zladeyka,

Вообще-то у юнидаковских датасетов есть вкладка "Data Type Mapping", где можно указать, какого именно типа поля возвращаются в запросе -- как раз на случай, если их анализатор сам справится не может.
...
Рейтинг: 0 / 0
Сравнение компонентов для доступа к данным
    #39137608
zladeyka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZeroMQА для чего вы вообще на новую версию переходили? Ну вот у вас есть "огромнейший проект", все в нем
работает, известные проблемы обойдены теми или иными способами. Вы решили дернуть удачу за хвост?

Как я уже писал в своем предыдущем посте, иногда нам приходится урезать какую-то часть своего функционала, если UniDAC содержит такие ошибки, где собственными силами исправить их не представляется возможным. В это новой версии эти баги были исправлены и мы решили обновить версию, дабы обратно включить часть нашего функционала.

Впоследствии, нам пришлось откатиться обратно на предыдущую версию UniDAC 6.2.8, т.к. лучше урезать часть своих функций, чем вообще испортить клиентские учетные БД неверными числами.
...
Рейтинг: 0 / 0
Сравнение компонентов для доступа к данным
    #39137616
ZeroMQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zladeykaZeroMQА для чего вы вообще на новую версию переходили? Ну вот у вас есть "огромнейший проект", все в нем
работает, известные проблемы обойдены теми или иными способами. Вы решили дернуть удачу за хвост?

Как я уже писал в своем предыдущем посте, иногда нам приходится урезать какую-то часть своего функционала, если UniDAC содержит такие ошибки, где собственными силами исправить их не представляется возможным. В это новой версии эти баги были исправлены и мы решили обновить версию, дабы обратно включить часть нашего функционала.

Впоследствии, нам пришлось откатиться обратно на предыдущую версию UniDAC 6.2.8, т.к. лучше урезать часть своих функций, чем вообще испортить клиентские учетные БД неверными числами.
Ну, любой опыт - он положительный.

Мы вот уже много лет используем одну из последних версий FIB+ 6.9.
Точно так же пару раз нарывались на грабли, когда "просто так" переходили на новые версии.

И версию Delphi меняем очень нечасто, по той же причине.
...
Рейтинг: 0 / 0
Сравнение компонентов для доступа к данным
    #39138006
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я вот недавно (недели две назад) обновил VirtualTreeView с версии 5.0.0 на 6.2.1.
Уже 7 или 8 правок пришлось внести.
Где-то на 5й правке сильно задумался, может вернуть всё взад? Но сейчас вроде работает стабильно, местами чуть быстрее..

Конечно это не сравнить с проблемами доступа к данным, но для себя отметил, что действительно не стоит торопиться с обновлениями того, что и так работает.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сравнение компонентов для доступа к данным
    #39932552
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zladeyka
UniDAC для работы с большими таблицами > 300к записей не годится - потребляет очень много памяти. Их новая фича "SmartFetch" призвана это дело побороть, но вот уже сколько билдов подряд, начиная с версии 5.3 её не могут довести до ума. Постоянно AV-шки, assert'ы на равном месте (то при удалении\изменении записи, то на RAISERROR в триггере MS SQL UniDAC валится стопкой AV-шек). Эти баги правят, но на это зачастую уходят месяцы от релиза до релиза. В новом билде эти ошибки исправлены, но с ним приходит и стопка новых багов. Написать какой-то мало-мальски серьезный коммерческий продукт становится невозможным.


Сейчас у меня версия 8.0.1.
И снова проблема.

Есть запрос с макросом
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  A.ID,
  A.NAME NAME_USER,
  A.REMARK

  FROM TABLE1 A
  &TYPES



Включаем SmartFetch.

В коде указываем текст макроса:
Код: pascal
1.
2.
3.
4.
  UniQuery1.MacroByName('TYPES').Value := 'LEFT JOIN TYPES T ON T.ID = A.ID_TYPE AND T.USERNAME = :USERNAME';
  UniQuery1.ParamByName('USERNAME').AsString := 'user';

  UniQuery1.open;



Получаем
Project raised exception class EIBCError with message 'Dynamic SQL Error
SQL error code = -204
Ambiguous field name between table TYPES and table TABLE1 ID'.

При этом UniQuery1.FinalSQL выдает рабочий код, который в IBExpert нормально отрабатывает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  A.ID,
  A.NAME NAME_USER,
  A.REMARK

  FROM TABLE1 A
  LEFT JOIN TYPES T ON T.ID = A.ID_TYPE AND T.USERNAME = :USERNAME



Если отключить SmartFetch, код работает нормально.
...
Рейтинг: 0 / 0
Сравнение компонентов для доступа к данным
    #39932553
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Если отключить SmartFetch, код работает нормально.

Значит, SmartFetch как-то меняет значение FinalSQL. Лови то, что на сервер уходит.
...
Рейтинг: 0 / 0
Сравнение компонентов для доступа к данным
    #39932561
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще до конца не понимаю, что такое SmartFetch и с чем его едят?
Соответственно, не понимаю, а нужно ли мне оно вообще?
Например, если у меня 1000 или 10000 записей в таблице, откуда выполняется Select?
...
Рейтинг: 0 / 0
Сравнение компонентов для доступа к данным
    #39932568
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

там строится свой запрос, исключающий загрузку больших полей, вроде фактически грузятся лишь ключевые поля. Ну и генератор запросов налажал.
Например, у тебя в табличке есть поле FK c именем вроде ИМЯFKТАБЛИЧКИ_ID, а генератор создал алиас с таким же именем для поля PK ключа, ну вот тебе и "аmbiguous field name between", панимаш...

Ну ты посмотри в отадчике, что на самом деле, в точке иксцепшна - интересно же.
...
Рейтинг: 0 / 0
Сравнение компонентов для доступа к данным
    #39933123
Фотография devart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

При открытии таблицы в режиме SmartFetch, считываются только значения ключевых полей и полей указанных в свойстве PrefetchedFields для всех записей, возвращаемых запросом. После открытия таблицы, происходит чтение полей для количества строк, указанных в свойстве FetchRows. Остальные поля будут прочтены непосредственно при обращении к ним.
Эффективность работы SmartFetch при извлечении любых данных таблицы зависит от используемых в этой таблице типов полей.
Наибольший прирост производительности наблюдается при использовании SmartFetch для типов данных с большими значениями, таких как long string, BLOB, и т.д.
При использовании SmartFetch режима UniDAC, если свойство TUniQuery.SmartFetch.SQLGetKeyValues установлено в пустую строку, UniDAC пытается составить и выполнить запрос на чтение ключевых полей и полей указанных в свойстве PrefetchedFields.
Когда SQL запрос является сложным, как в вашем случае, автоматически сгенерированный запрос может быть некорректным. В таком случае вам следует в свойстве TUniQuery.SmartFetch.SQLGetKeyValues.Text указать запрос на получения полей, которые будут уникально идентифицировать запись. Например:
Код: pascal
1.
2.
3.
4.
SELECT
  A.ID
  FROM TABLE1 A
  LEFT JOIN TYPES T ON T.ID = A.ID_TYPE AND T.USERNAME = :USERNAME
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сравнение компонентов для доступа к данным
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]