alexs, исправь, пожалуйста, или хоть подскажи в каком месте копать.
а то завтра программу сдавать, а тут такой баг выполз
 .
.
заранее спасибо.
Модератор: Модераторы
 .
.
select cast (ftime as varchar(10)) as ftime, * from ***
procedure TRecordsBuffer.RefreshRecordFromQuery(RecNo: integer;
  Sourse: TJvUIBQuery);
var
  j,k, ii:integer;
  P, FiPtr:Pointer;
  FieldHeader:TFieldHeader;
  S:string;
  Nulls : PBooleans;
  MyDBInfo : PMyDBInfo;
begin
  P:=Items[RecNo];
  MyDBInfo := PMyDBInfo(@(PBytes(P)^[FOwner.FRecordSize]));
  Nulls := PBooleans( @(PBytes(P)^[FOwner.FRecordSize + SizeOf(TMyDBInfo)]) );
  for j := 0 to FOwner.FFiledsHeader.Count-1 do
  begin
    FieldHeader:=FOwner.FFiledsHeader[j];
    K:=-1;
    for ii:=0 to Sourse.Fields.FieldCount-1 do
    begin
      if Sourse.Fields.AliasName[ii]=FieldHeader.FieldName then
      begin
        K:=ii;
        break;
      end
    end;
    if K<>-1 then
    begin
      if Sourse.Fields.IsNull[K] then
      begin
        Nulls^[K] :=true;
      end
      else begin
        Nulls^[K] :=false;
        FiPtr:=@(PBytes(P)[FieldHeader.FieldOffs]);
        case FieldHeader.FieldType of
          ftFloat:PDouble(FiPtr)^:=Sourse.Fields.AsDouble[k]; //Расширить !!!
          ftString:begin
                     S:=Sourse.Fields.AsString[k];
                     if poTrimCharFields in FOwner.FOption then
                       S:=TrimRight(S);
                     FillChar(FiPtr^, FieldHeader.FieldSize, 0);
                     System.Move(S[1], FiPtr^, Min(FieldHeader.FieldSize, Length(S)));
                   end;
          ftSmallint:PSmallInt(FiPtr)^:=Sourse.Fields.AsSmallint[k];
          ftInteger:PInteger(FiPtr)^:=Sourse.Fields.AsInteger[k];
          ftDateTime:
            begin
              {$IFDEF  LINUX}
              DecodeTimeStamp(PIscTimeStamp(Sourse.Fields.Data.sqlvar[k].sqldata),  Double(FiPtr^));
              {$ELSE} 
              DecodeTimeStamp(PIscTimeStamp(Sourse.Fields.Data.sqlvar[k].sqldata),  TTimeStamp(FiPtr^));
              Double(FiPtr^) := TimeStampToMSecs(TTimeStamp(FiPtr^));
              {$ENDIF}
            end;
          ftDate:
            begin
(*              {$IFDEF FPC}
                {$IFDEF MSWINDOWS}
                PInteger(FiPtr)^:=PInteger(Sourse.Fields.Data.sqlvar[k].sqldata)^ - DateOffset + 693594;
                {$ELSE}
                PInteger(FiPtr)^:=PInteger(Sourse.Fields.Data.sqlvar[k].sqldata)^ - DateOffset;
                {$ENDIF}
              {$ELSE} *)
              PInteger(FiPtr)^:=PInteger(Sourse.Fields.Data.sqlvar[k].sqldata)^ - DateOffset + 693594;
//              {$ENDIF}
            end;
          ftTime:
            begin
(*              {$IFDEF FPC}
              PDouble(FiPtr)^ := Sourse.Fields.AsDateTime[k];
              {$ELSE} *)
              PInteger(FiPtr)^:=PCardinal(Sourse.Fields.Data.sqlvar[K].sqldata)^ div 10;
//              {$ENDIF}
            end;
          ftBlob,
          ftMemo: with PBLOBRecordData(FiPtr)^ do begin
            ISCQuad:=Sourse.Fields.AsQuad[K];
            if  ListIdx <> 0 then
              MyDBInfo^.BlobList.SetItem(
                ListIdx,
                TFBBlobStream(MyDBInfo^.BlobList.Item(ListIdx)).ChangeOrNil(ISCQuad)
              );
          end;{ftBlob,ftMemo}
          ftLargeint:PInt64(FiPtr)^:=Sourse.Fields.AsInt64[k];
          ftBoolean:PBoolean(FiPtr)^:=Sourse.Fields.AsBoolean[k];
        else
        end{case FieldHeader.FieldType}
      end;{else if Sourse.Fields.IsNull[K]}
    end;{if K<>-1}
  end;
  FOwner.GetCalcFields(P);
end;


procedure TFBCustomDataSet.CloseOpen(AFetchAll: boolean);
begin
  DisableControls; // !
  Close;
  Open;
  if AFetchAll then
    FetchAll;
  EnableControls; // !
end;
function TFBAnsiMemoField.GetIsNull: Boolean;
begin
  result := not DataSet.GetFieldData(Self,nil);
end;
function TFBAnsiMemoField.GetIsNull: Boolean;
begin
  result := (GetDataSize = 0);
end;
select
  table1.field1 as aaaa_bbb
from
  table1
select
  table2.field1
from
  table2
where
  table2.field2 = :aaaa_bbb

function TFBAnsiMemoField.GetIsNull: Boolean;
begin
  result := not DataSet.GetFieldData(Self,nil);
end;
function TFBAnsiMemoField.GetIsNull: Boolean;
begin
  result := (GetBlobSize = 0); // в прошлом посте ошибся "GetDataSize"
end;

 


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1