Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Из грида добраться до XSQLVAR / 25 сообщений из 54, страница 1 из 3
11.02.2015, 12:07
    #38876799
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Собственно, само упоминание XSQLVAR должно отпугнуть от ответов тех, кто про него не знает. :-)

А вопрос такой.
Допустим, есть IBX, FIBPlus, FireDAC, или любые другие компоненты прямого доступа (это важно), которые сами по себе предоставляют доступ к XSQLDA и XSQLVAR.
Мне надо из TDBGrid, например из события

Код: pascal
1.
2.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);


получить доступ к XSQLVAR конкретного столбца.

Собственно, на первый взгляд столбец (поле) выколупнуть вроде как все просто -
Column.Field
Но тут мы получаем TField, и значит надо или делать приведение типов (но не очень ясно, куда), или ...

Я пока зарылся в код IBX, пытаюсь найти, теряется XSQLVAR/XSQLDA при фетче записей в TField и буфер датасета, или нет. Если теряется, то это пипец.

Если прямо совсем конкретно, то мне нужен доступ к XSQLVAR.sqlind. Как его получить у IBSQL, - понятно. Как это получить у датасета - х.з.
...
Рейтинг: 0 / 0
11.02.2015, 12:13
    #38876805
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Оно?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  TIBCustomDataSet = class(TDataSet)
  protected
    {Likely to be made public by descendant classes}
    property SQLParams: TIBXSQLDA read GetSQLParams;
    property Params: TIBXSQLDA read GetSQLParams;
    property InternalPrepared: Boolean read FInternalPrepared;
    property QDelete: TIBSQL read FQDelete;
    property QInsert: TIBSQL read FQInsert;
    property QRefresh: TIBSQL read FQRefresh;
    property QSelect: TIBSQL read FQSelect;
    property QModify: TIBSQL read FQModify;
...
Рейтинг: 0 / 0
11.02.2015, 12:13
    #38876806
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Hello, Kdv!
You wrote on 11 февраля 2015 г. 12:12:22:

Kdv> Как его получить у IBSQL, - понятно. Как это получить у датасета - х.з.
у датасета есть 4 штуки "внутренних" TIBSQL.
я не в курсе видны ли они снаружи в современных версиях компонентов.
если нет, то для доступа к ним породи наследника и кастуй к нему свой
датасет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2015, 12:20
    #38876818
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Мимопроходящий, wadman

увы, все это не то. То, что внутри там IBSQL и параметры это XSQLVAR, все замечательно.
Проблема в том, что у IBSQL буфера нет. А мне надо понять, сохраняются XSQLVAR в буфере датасета, или нет. Похоже, что нет.

Собственно,
IBCustomDataSet.pas

TFiedData - данные столбца.
TRecordData - строка со столбцами TFieldData
и ... никаких XSQLVAR...

p.s. TIBCustomDataSet.Current вроде бы то что надо, но увы - он указывает только на последнюю фетченную запись.
...
Рейтинг: 0 / 0
11.02.2015, 12:22
    #38876822
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
kdvПохоже, что нет.
Скорее всего так. Это-ж расход памяти.
...
Рейтинг: 0 / 0
11.02.2015, 12:22
    #38876823
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
kdvЕсли прямо совсем конкретно, то мне нужен доступ к XSQLVAR.sqlind.
TField.IsNull не хватит?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2015, 12:27
    #38876834
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Dimitry SibiryakovTField.IsNull не хватит?..

не-а. Embarcadero запихнуло флаги для Change Views в SQLIND. Там битами выставляется признак столбца - изменен, insert, update, delete. Я хотел его вытащить в DBGrid, чтобы показать, какие столбцы изменены при update, какие строки вставлены, удалены, и т.п.
Похоже, не судьба.

В данном случае единственный вариант - заполнять StringGrid (или типа того) из IBSQL. Здесь все прекрасно можно показать.
...
Рейтинг: 0 / 0
11.02.2015, 12:33
    #38876853
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Hello, Kdv!
You wrote on 11 февраля 2015 г. 12:34:04:

Kdv> Embarcadero запихнуло флаги для Change Views в SQLIND.
пидарасы, сэр! (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2015, 12:35
    #38876856
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Hello, Kdv!
You wrote on 11 февраля 2015 г. 12:34:50:

Kdv> В данном случае единственный вариант - заполнять StringGrid
> (или типа того) из IBSQL. Здесь все прекрасно можно показать.
можно клонировать и модифицировать датасет из исходников, породив нужную
тебе функциональность внутри.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2015, 12:53
    #38876885
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Мимопроходящийпидарасы, сэр! (с)
с другой стороны, без изменения API, больше почти некуда. :-)

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

Так что всем спасибо. А с компоненто-писателями я еще спишусь, может они что со своей стороны посоветуют.
...
Рейтинг: 0 / 0
11.02.2015, 12:56
    #38876893
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
kdvEmbarcadero запихнуло флаги для Change Views в SQLIND.
Это что? Это как???

kdvВ данном случае единственный вариант - заполнять StringGrid (или типа того) из
IBSQL. Здесь все прекрасно можно показать.
Теперь ты понимаешь почему я не использую все эти обёртки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2015, 13:27
    #38876937
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Dimitry SibiryakovЭто что? Это как???
это новая фича у InterBase XE7.
т.н. "подписки на изменения", или ChangeViews .

В общем выглядит так. Создаешь подписку, перечисляешь таблицы, и те изменения, которые хочешь видеть (ins/upd/del).
Пока подписка не активирована, видишь обычные данные. Как только активируешь подписку - видишь только те изменения, которые были сделаны с момента последнего commit в твоей подписке.

То есть, я вчера сделал апдейт таблицы, сегодня insert, все давно закомичено.
А в тестовой подписке (которую я всегда отменяю по rollback, чтобы не задолбаться с постоянными изменениями таблиц), уже второй день вижу изменения - вчера только upd, а сегодня и update, и insert.

p.s. как это сделано физически, пока не знаю. Вижу только в IBAnalyst, что у этой таблицы только 1 версия, при двух видимых изменениях.
...
Рейтинг: 0 / 0
11.02.2015, 13:31
    #38876942
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Dimitry Sibiryakov,

сделал еще один апдейт - короче, каким-то образом версии, которые нужны для просмотра в подписке, не удаляются.
...
Рейтинг: 0 / 0
11.02.2015, 13:35
    #38876951
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
kdv,

мне кажется это за счёт журналирования транзакций. Наверняка если его отключить, то такая возможность перестанет быть доступной. Если это делать без журнала, то БД весьма скоро распухнет до неприличных размеров. Кстати сведения об изменениях там остаётся навсегда или некоторые сведения можно удалить чтобы они перестали быть доступными?
...
Рейтинг: 0 / 0
11.02.2015, 13:36
    #38876952
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Dimitry Sibiryakov,

а! все ясно. у них есть rdb$subscribers, и там для подписчика указана последняя rdb$check_out_transaction_id, метка времени, и многое другое.
...
Рейтинг: 0 / 0
11.02.2015, 13:40
    #38876960
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Dimitry SibiryakovЭто что? Это как???
sqlind меньше нуля (-1 в частности) это признак нулла, а больше нуля - битмап флагов изменения при наличии подписки. "А тут рыбу заворачивали" (с)
...
Рейтинг: 0 / 0
11.02.2015, 13:44
    #38876965
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Симонов ДенисКстати сведения об изменениях там остаётся навсегда
журнала транзакций нет, просто блокируется сборка версий как мусора для тех изменений, которые нужно отслеживать.

изменения (версии) подчищаются после того, как в активной подписке сделать commit.

То есть, чтобы начать отслеживать изменения нужно сделать
set subscription x ... active;
rollback;

в принципе, до rollback можно выдать и inactive, это ничего не поменяет, изменения начнут отслеживаться. Внутри транзакции по active/inactive можно переключать, что видишь - либо актуальные данные, либо только изменения.

Чтобы прекратить отслеживание, делаешь
set subscription x ... active;
commit;
То есть, считается что перед commit ты "забрал" все изменения.

Вся эта фигня работает только в snapshot-транзакциях.
Если кому интересно - будет вебинар с Эмбаркадеро на эту тему 19 марта. 18 февраля будет вебинар по другим фичам ХЕ7.
...
Рейтинг: 0 / 0
11.02.2015, 13:44
    #38876966
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Hello, Dimitr!
You wrote on 11 февраля 2015 г. 13:43:34:

DimitrDimitry Sibiryakov> Это что? Это как???

> sqlind меньше нуля (-1 в частности) это признак нулла, а больше нуля -
> битмап флагов изменения при наличии подписки. "А тут рыбу заворачивали" (с)
не иначе как индусов понабрали на аутсорсинг...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2015, 13:44
    #38876967
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
dimitrsqlind меньше нуля (-1 в частности) это признак нулла, а больше нуля
именно (в т.ч. про рыбу)
http://docwiki.embarcadero.com/InterBase/XE7/en/Change_Views_API_Support
...
Рейтинг: 0 / 0
11.02.2015, 13:46
    #38876971
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
kdvВся эта фигня работает только в snapshot-транзакциях.
ибо по сути подписка это и есть снапшот, она просто блокирует сборку мусора
...
Рейтинг: 0 / 0
11.02.2015, 14:05
    #38876994
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Hello, Kdv!
You wrote on 11 февраля 2015 г. 14:05:07:

Kdv> именно (в т.ч. про рыбу)
> http://docwiki.embarcadero.com/InterBase/XE7/en/Change_Views_API_Support
чё-то мне это напомнило INT 2Fh (Multiplex Interrupt) в MS DOS.
дежа-вю
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2015, 14:08
    #38876998
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
kdvверсии, которые нужны для просмотра в подписке, не удаляются.
Беглым взглядом я что-то не вижу как можно достать старые значения полей, только флаги
изменений. Что я пропустил?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2015, 14:12
    #38877003
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Dimitry Sibiryakov,

ничего не пропустил, старые значения полей действительно вытащить нельзя, и последовательность изменений тоже.
...
Рейтинг: 0 / 0
11.02.2015, 14:21
    #38877014
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
То есть по итогам у них фактически получилось CDC на отметках времени. Интересно, они
проблему гонок параллельных транзакций решили или забили на неё?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2015, 14:34
    #38877036
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из грида добраться до XSQLVAR
Dimitry Sibiryakov,

дык они же ещё репликацию не сделали, но планы у них такие есть. Вроде бы в теории эта фича для этого и должна использоваться.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Из грида добраться до XSQLVAR / 25 сообщений из 54, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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