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