powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранение бинарных данных
25 сообщений из 52, страница 2 из 3
Сохранение бинарных данных
    #39718311
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийну раз уж начал править, правьЯ не правлю. Я наследуюсь
hvladУ себя в буфере могут и фазу луны хранить, тебе-то чтоРазмер буфера совпадает с размером поля. И лишние два байта могут быть не к месту
hvladНу так надо её наказать научитьДумаю
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718312
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

это писатели IBX
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718316
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисКак не подскажу
Код: pascal
1.
(SqlSubtype and $FF) in [0, 1]  // CHARSET NONE, OCTETS
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718321
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

не трогай NONE, только OCTETS
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718323
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16.10.2018 17:16, _Vasilisk_ пишет:
> Я не правлю. Я наследуюсь

не взлетит.

не боись, каждый дельфятник должен иметь своего клона IBX ;-)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718339
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисне трогай NONE, только OCTETSУчту. А почему?
Мимопроходящий> Я не правлю. Я наследуюсь

не взлетит.Взлетит. Уже вижу как
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718388
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Потом покаж, я в свой клон от XE5 вставлю.))
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718389
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Если тип поля в InternalInitFieldDefs вернуть как ftBlob, то на Post возникает "Internal error"

Может быть потому, что блобы надо записывать в БД отдельно и заранее, а в строку записываются только номера (хэндлы) блобов.

Вообще попробуй своё приложение писать одновременно на IBX и UIB
Потому что UIB гораздо ниже к FB API и некоторые подробности, спрятанные в "красивых" компонентах - в UIB вылезают и колют.

И чтобы понять как именно тебе править работу с FB API в IBX - можно будет для образца смотреть в каком порядке и с какими данными вызываются функции FB в UIB и подгонять твой форк IBX под этакий эталон
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718390
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

может вам на пару IBX2 портануть и поддерживать ?
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718392
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

А может на троих или на пятерых? Мимипроходящий вон тож постоянно напрашивается.))
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718394
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochпопробуй своё приложение писать одновременно на IBX и UIB
Разный интерфейс, второй как будто пьяный делал.
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718397
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16.10.2018 18:52, Vlad F пишет:
> А может на троих или на пятерых? Мимипроходящий вон тож постоянно напрашивается.))

не взлетит.
у меня форк порождён от IBX 4.42
сейчас там от творчества Джефа осталось очень мало.
но начиналось всё как у Василиска, с попытки обойтись малой кровью...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718400
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

и небось сидишь на D5...
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718406
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все. Я пас. ftVarBytes не спасло
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TIBCustomDataSet.SetInternalSQLParams(Qry: TIBSQL; Buffer: Pointer);
begin
   ..............
          data := cr + PRecordData(cr)^.rdFields[j].fdDataOfs;
          case PRecordData(cr)^.rdFields[j].fdDataType of
            SQL_TEXT, SQL_VARYING:
            begin
              SetString(st, PChar(data), PRecordData(cr)^.rdFields[j].fdDataLength div 2);
              Qry.Params[i].AsString := st;
            end;
  ................
end;

Кому интересно - вот наработки
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
  TIBDataSetEx = class(TIBDataSet)
  strict private
    class function IsBinaryField(AField: TField): Boolean; static;
    class function GetVarBytesLenPtr(const ABuffer: TValueBuffer): PWord; static;
    procedure SetFieldBinaryData(AField: TField; const ABuffer: TValueBuffer);
    function GetMappedFieldPositionPtr: PInteger;
    function GetMappedFieldPosition(AIdx: Integer): Integer;
  protected
    procedure InternalInitFieldDefs; override;
    procedure SetFieldData(AField: TField; ABuffer: TValueBuffer); override;
    procedure DataConvert(AField: TField; ASource, ADest: TValueBuffer; AToNative: Boolean); override;
  end;

{ TIBDataSetEx }

class function TIBDataSetEx.IsBinaryField(AField: TField): Boolean;
begin
  Result := (AField.FieldNo >= 0) and (AField.DataType in [ftVarBytes, ftBytes]);
end;

class function TIBDataSetEx.GetVarBytesLenPtr(const ABuffer: TValueBuffer): PWord;
begin
  Result := @ABuffer[Length(ABuffer) - SizeOf(Word)];
end;

procedure TIBDataSetEx.SetFieldBinaryData(AField: TField; const ABuffer: TValueBuffer);
var
  LRecData: PRecordData;
  LFldData: PFieldData;
begin
  LRecData := PRecordData(GetActiveBuf);
  LFldData := @LRecData^.rdFields[GetMappedFieldPosition(AField.FieldNo - 1)];
  if not LFldData^.fdIsNull then begin
    if AField.DataType = ftVarBytes then
      LFldData^.fdDataLength := GetVarBytesLenPtr(ABuffer)^
    else
      LFldData^.fdDataLength := Length(ABuffer);
  end;
end;

function TIBDataSetEx.GetMappedFieldPositionPtr: PInteger;
const
  {$IF IBXConst.IBX_Version = 17.17}
  CMappedFieldPositionOffset = 512;
  {$ELSE}
    {$MESSAGE ERROR 'Check TIBCustomDataSet.MappedFieldPosition Offset'}
  {$ENDIF}
begin
  Result := PPointer(OffsetPtr(Self, CMappedFieldPositionOffset))^;
end;

function TIBDataSetEx.GetMappedFieldPosition(AIdx: Integer): Integer;
var
  LBasePtr: PIntegerArray;
begin
  LBasePtr := PIntegerArray(GetMappedFieldPositionPtr);
  Result := LBasePtr^[AIdx];
end;

procedure TIBDataSetEx.InternalInitFieldDefs;
var
  LMappedFieldPosition: PInteger;
  Li: Integer;
  LVar: TSQLVAR;
  LSqlType: SmallInt;
  LSubType: SmallInt;
  LSize: Integer;
begin
  FieldDefs.BeginUpdate;
  try
    inherited InternalInitFieldDefs;
    LMappedFieldPosition := GetMappedFieldPositionPtr;
    for Li := 0 to FieldDefs.Count - 1 do begin
      LVar := QSelect.Current[LMappedFieldPosition^ - 1].Data;
      Inc(LMappedFieldPosition);
      LSqlType := LVar.sqltype and not 1;
      if (LSqlType = SQL_VARYING) or (LSqlType = SQL_TEXT) then begin
        LSubType := LVar.SqlSubtype and $FF;
        if LSubType = 1 then begin // CHARSET OCTETS
          LSize := FieldDefs[Li].Size;
          if LSqlType = SQL_VARYING then
            FieldDefs[Li].DataType := ftVarBytes
          else
            FieldDefs[Li].DataType := ftBytes;
          FieldDefs[Li].Size := LSize;
        end;
      end;
    end;
  finally
    FieldDefs.EndUpdate;
  end;
end;

procedure TIBDataSetEx.SetFieldData(AField: TField; ABuffer: TValueBuffer);
begin
  inherited SetFieldData(AField, ABuffer);
  if IsBinaryField(AField) then
    SetFieldBinaryData(AField, ABuffer);
end;

procedure TIBDataSetEx.DataConvert(AField: TField; ASource, ADest: TValueBuffer;
  AToNative: Boolean);
var
  LDataSizePtr: PWord;
  LDataSize: Word;
begin
  case AField.DataType of
    ftBytes: begin
      if AToNative then begin
        Move(ASource[0], ADest[0], Length(ASource));
        FillChar(ADest[Length(ASource)], Length(ADest) - Length(ASource), 0);
      end else
        Move(ASource[0], ADest[0], AField.DataSize);
    end;
    ftVarBytes: begin
      if AToNative then begin
        LDataSize := Length(ASource);
        Move(ASource[0], ADest[0], LDataSize);
        LDataSizePtr := GetVarBytesLenPtr(ADest);
        LDataSizePtr^ := LDataSize;
      end else begin
        LDataSizePtr := GetVarBytesLenPtr(ASource);
        LDataSize := LDataSizePtr^;
        Move(ASource[0], ADest[0], LDataSize);
      end;
    end
  else
    inherited DataConvert(AField, ASource, ADest, AToNative);
  end;
end;


Может допилю, как время будет, но врядли
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718407
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch_Vasilisk_Если тип поля в InternalInitFieldDefs вернуть как ftBlob, то на Post возникает "Internal error"
Может быть потому, что блобы надо записывать в БД отдельно и заранее, а в строку записываются только номера (хэндлы) блобов.Internal error это мой косяк. Внимания не обращайте
AriochВообще попробуй своё приложение писать одновременно на IBX и UIB
Потому что UIB гораздо ниже к FB API и некоторые подробности, спрятанные в "красивых" компонентах - в UIB вылезают и колют.На TIBSQL задача решается. Интересовало решение на TIBDataSet
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718409
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> На TIBSQL задача решается.

С правками или без?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718412
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

API-шная часть IBX2 кстати распространяется и отдельно
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718420
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochVlad F,

может вам на пару IBX2 портануть и поддерживать ?
Нафик этот ибх2 нужен обычному прикладнику.
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718423
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Все. Я пас. ftVarBytes не спаслоПосмотри на ADODB - там всё работало
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718433
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

А как дышал, как дышал!! (с) ))
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718452
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

быстро сдался. А уж хотел предложить в исходники FibPlus заглянуть, там это поправили. Один фиг их тут 100500 раз выкладывали
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718478
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже хотел посоветовать заглянуть в FibPlus,
но не уверен, что игра вообще стоит свеч, если
у него есть воркэраунды. Разве что на будущее
или из спортивного интереса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718488
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, надо пока он пребывает типа в коме тырить из него все, что плохо лежит. Я сам, помнится лет пятнадцать тому, не удержался и позаимствовал у йом алиас-менеджер, приторочив сей трофей к IBX.))

Модератор: Тема перенесена из форума "Firebird, InterBase".
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718672
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой нибудь энкодинг совсем не предлагать? например хранить в виде HEX строки в 60 * 2 байтах?
...
Рейтинг: 0 / 0
Сохранение бинарных данных
    #39718718
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЯ тоже хотел посоветовать заглянуть в FibPlus,
но не уверен, что игра вообще стоит свеч, если
у него есть воркэраунды. Разве что на будущее
или из спортивного интереса.
В фиб+ все работает. Я гуиды хранил в октетс чар полях (зачем-то), никаких проблем не было.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранение бинарных данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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