powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ehlib и ключи бинарного типа.
25 сообщений из 25, страница 1 из 1
Ehlib и ключи бинарного типа.
    #40018711
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Ehlib если очень удобные пик-листы, основанные на TStrings.
Они прекрасно работают с целочисленными и строчными ключами.
Но иногда в БД приходится работать с ключами бинарного типа, н-р binary(8 , 16).
В том же 1C или различных телефониях.

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

Кто как решал подобную проблему ?
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40018745
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Кто как решал подобную проблему ?

Например, lookup поля использовать.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40018752
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
L_argo
Кто как решал подобную проблему ?

Например, lookup поля использовать.
Можно, но неудобно.
Хотелось бы поискать способ использования сабжа.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40018821
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoОни прекрасно работают с целочисленными и строчными ключами.

Как они работают с целочисленными ключами?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40018987
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

L_argoОни прекрасно работают с целочисленными и строчными ключами.
Как они работают с целочисленными ключами?
Текстом пишешь в KeyItems значения ключа и он работает с целочисленным полем датасета.

Очень удобно в живом гриде делать минисправочники.

Или я неправильно понял вопрос ?
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40018992
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo
Конечно можно преобразовывать байты в тхт-строку, но тогда будет проблема живого редактирования полей.

Что за проблема?
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019064
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
L_argo
Конечно можно преобразовывать байты в тхт-строку, но тогда будет проблема живого редактирования полей.

Что за проблема?
Как грид проапдейтит binary-поле датасета, если ему передать в него текстовое представление (дамп) типо 0х00ACBF9E45B1 ?
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019086
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написать обработчик TField.SetText не поможет?
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019088
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo
ъъъъъ
пропущено...

Что за проблема?
Как грид проапдейтит binary-поле датасета, если ему передать в него текстовое представление (дамп) типо 0х00ACBF9E45B1 ?

Да как хочешь. В OnGetTex/OnSetText.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019363
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck
Написать обработчик TField.SetText не поможет?
Пробовал писать.
По непонятной причине пишет ошибку:

Invalid variant type or size for field 'хххх'

юзаю FireDAC.

Поле Binary(1) mssql в датасете типа TBytesField. Передаю в него правильный Variant из одного байта.

в OnSetText пишу:
Sender.Value := HexToVar(Text);

HexToVar возвращает variant. Пробовал передать и явный байт. И с явным приведением Sender.AsVariant. Тож самое.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019369
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo
По непонятной причине пишет ошибку:

L_argo,
можно, конечно, сделать, чтобы "получилось".

Но - скажи, на кой чёрт вообще это нужно - ключевые поля "руками" редактировать?
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019372
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
L_argo
По непонятной причине пишет ошибку:

L_argo,
можно, конечно, сделать, чтобы "получилось".

Но - скажи, на кой чёрт вообще это нужно - ключевые поля "руками" редактировать?
Не ключевые поля, а поля с внешними ключами.
Ссылки на пункты справочника. Чтобы удобно в гриде менять значение с помощью выпадающего списка.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019385
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo
ъъъъъ
пропущено...

L_argo,
можно, конечно, сделать, чтобы "получилось".

Но - скажи, на кой чёрт вообще это нужно - ключевые поля "руками" редактировать?
Не ключевые поля, а поля с внешними ключами.
Ссылки на пункты справочника. Чтобы удобно в гриде менять значение с помощью выпадающего списка.


Неужели это удобно - из базы извлекать значения ключевых и отображаемых полей, преобразовывать их в текст и засовывать в keylist/picklist комбо-поля TDBGridEh?

Вместо того, чтобы просто указать лист-датасорц лукап-поля?
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019403
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo
Ссылки на пункты справочника. Чтобы удобно в гриде менять значение с помощью выпадающего списка.

А сами "бинарные" поля в гриде ты как отображаешь? В "бинарном" виде, или как?
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019404
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
L_argo
пропущено...
Не ключевые поля, а поля с внешними ключами.
Ссылки на пункты справочника. Чтобы удобно в гриде менять значение с помощью выпадающего списка.


Неужели это удобно - из базы извлекать значения ключевых и отображаемых полей, преобразовывать их в текст и засовывать в keylist/picklist комбо-поля TDBGridEh?

Вместо того, чтобы просто указать лист-датасорц лукап-поля?
Да, удобно. Это делает простая процедура.
В некот. случаях минисправочника в БД вообще нет (н-р Муж/Жен, Да/Нет, или дни недели). Есть подготовленные списки ключ/значение.

Я ответил на вопрос "для чего ?" ? :)

Осталось найти ответ, почему выдает ошибку в OnSetText....
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019406
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
L_argo
Ссылки на пункты справочника. Чтобы удобно в гриде менять значение с помощью выпадающего списка.

А сами "бинарные" поля в гриде ты как отображаешь? В "бинарном" виде, или как?
Если у поля есть пик-лист (ключ/значение), то поле выглядит как комбобокс с возможными значениями. Если пиклиста нет и поле бинарное, то по OnGetText выводится в виде 0xXXXXXXXXXXX.

пысы: Пиклист не у поля, а у колонки грида.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019421
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo
Да, удобно. Это делает простая процедура.

Ясно, ты научился "как-то", и другие способы "не катят".
Не за горами вопрос: "Долго отображается форма, что делать?".
Ну да ладно, не моё дело.
~~~~~~~~~~~~~~

L_argo
Осталось найти ответ, почему выдает ошибку в OnSetText....
L_argoInvalid variant type or size for field 'хххх'

юзаю FireDAC.

Поле Binary(1) mssql в датасете типа TBytesField.
У меня нет FireDac но вообще новых Дельфей, но я бы попробовал:
Код: pascal
1.
2.
var fB : byte = 123;
<Поле TBytesField>.SetData(@fB);


- и по результатам действовал дальше.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019429
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo,

я просто подумал, возможно и не в DBGridEh дело вообще.

Вот попробуйте, сможете ли выполнить (где DS - это ваш датасет) прямо из кода что-нибудь вроде

Код: pascal
1.
2.
3.
4.
DS.Edit();
DS.FieldByName('Name').AsString := 'Иванов Иван Иванович';
DS.FieldByName('Age').AsInteger := 65;
DS.Post();



ведь если так не пройдет, значит придется колдовать вокруг датасета
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019433
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

TField.SetData() действительно помогла. Спасибо ! .

Как-то упустил этот способ.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019434
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кроик Семён
Код: pascal
1.
DS.FieldByName('Name').AsString := 'Test';


У него тестовое поле размером в 1 байт...не всякий символ в 1 байт того... :)
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019445
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён
L_argo,

я просто подумал, возможно и не в DBGridEh дело вообще.

Вот попробуйте, сможете ли выполнить (где DS - это ваш датасет) прямо из кода что-нибудь вроде

Код: pascal
1.
2.
3.
4.
DS.Edit();
DS.FieldByName('Name').AsString := 'Иванов Иван Иванович';
DS.FieldByName('Age').AsInteger := 65;
DS.Post();



ведь если так не пройдет, значит придется колдовать вокруг датасета
Это прекрасно работает. Главное ключи датасета не забыть.

Кстати интересный прикол, если кому интересно:
Если явно не объявить первичные ключи в свойствах датасета, то ФайрДАК пытается сам найти первичные ключи. Но если в конструкции FROM имя таблицы идет в следующей строке, то этот поиск оказывается неудачным и ФайрДАК фейлит живой апдейт.
Правда фейлит не всегда. Пока закономерности не нашел.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019493
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo

Если явно не объявить первичные ключи в свойствах датасета, то ФайрДАК пытается сам найти первичные ключи. Но если в конструкции FROM имя таблицы идет в следующей строке, то этот поиск оказывается неудачным и ФайрДАК фейлит живой апдейт.
Правда фейлит не всегда. Пока закономерности не нашел.

У файрдака автоматика вообще иногда странно работает. Особенно на всяких RefreshRecord().
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019858
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpУ файрдака автоматика вообще иногда странно работает. Особенно на всяких RefreshRecord().

Поэтому лучше положить UpdateSQL и всё написать самому. Гораздо надёжнее
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40019866
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck
alekcvpУ файрдака автоматика вообще иногда странно работает. Особенно на всяких RefreshRecord().

Поэтому лучше положить UpdateSQL и всё написать самому. Гораздо надёжнее
Апдейты я и так руками делаю через отдельный query (не люблю редактирование в датасетах).
А вот как для RefreshRecord свой SQL написать?.. Собственно там даже писать ничего не надо, только один Where добавить, но он не справляется.
...
Рейтинг: 0 / 0
Ehlib и ключи бинарного типа.
    #40020166
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В UpdateSQL FireDac есть FetchRecordSQL
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ehlib и ключи бинарного типа.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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