2010年6月14日月曜日

Zeos コンポーネントでMSSQLにつないだら、UNIQUEIDENTIFIER 型が ftBlob に。。

ハマったので、備忘録。
GUIDを文字列で処理したかったのです。。。

{ TBlobField からGUIDを文字列で取得します
  @param field TBlobFieldを渡します
  @return GUIDを文字列にして返します
}
function DWSBlobFieldToGuidString(field: TField): String;
var
  bf:TBlobField;
  guid:TGUID;
  ms:TMemoryStream;
  sz: Integer;
begin
  Result := '';
  if not (field is TBlobField) then exit;

  bf := field as TBlobField;
  sz := SizeOf(guid);
  if bf.BlobSize <> sz then exit;
  ms := nil;
  try
    ms := TMemoryStream.Create;
    bf.SaveToStream(ms);
    ms.Position := 0;
    ms.Read(guid, sz);
  finally
    FreeAndNil(ms);
  end;
  Result := GUIDToString(guid);
end;