線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1370
推到 Plurk!
推到 Facebook!

SQL中的Binary形態如何看到內容?

尚未結案
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-23 21:05:47 IP:219.133.xxx.xxx 未訂閱
SQL數據庫中有一字段的形態為Binary,如何看到內容?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-23 21:37:10 IP:202.39.xxx.xxx 未訂閱
以 16 進位字串顯示內容? --- --<-<-<@
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-23 21:48:18 IP:219.133.xxx.xxx 未訂閱
引言: 以 16 進位字串顯示內容? --- --<-<-<@
謝謝!但是我還不明白,能不能講明白一點.能不能給個例子.举
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-23 22:54:56 IP:202.39.xxx.xxx 未訂閱
var
  bs: TBlobStream;
  s, sTmp, sFinal: string;
  i, iMemSize: integer;
  buffer: PChar;
begin
  bs := TBlobStream.Create(Table1.FieldByName('ImageField') as TBlobField, bmRead);      try
    iMemSize := bs.Size;
    Inc(iMemSize);
    buffer := AllocMem(iMemSize);
    bs.Read(buffer^, iMemSize);
    sTmp := StrPas(buffer);        for i := 0 to Length(sTmp) do begin
      s := Format('%X', [Ord(sTmp[i])]);
      if Length(s) = 1 then
        s := '0'   s;
      sFinal := sFinal   s;
      if i < iMemSize then
        sFinal := sFinal   ' ';
    end;
    Memo1.Clear;
    Memo1.Lines.Add(sFinal); // sFinal 即為所求
  finally
    FreeMem(buffer, iMemSize);
    bs.Free;
  end;    end;
--- --<-<-<@
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-24 08:48:49 IP:219.133.xxx.xxx 未訂閱
引言:
var
  bs: TBlobStream;
  s, sTmp, sFinal: string;
  i, iMemSize: integer;
  buffer: PChar;
begin
  bs := TBlobStream.Create(Table1.FieldByName('ImageField') as TBlobField, bmRead);      try
    iMemSize := bs.Size;
    Inc(iMemSize);
    buffer := AllocMem(iMemSize);
    bs.Read(buffer^, iMemSize);
    sTmp := StrPas(buffer);        for i := 0 to Length(sTmp) do begin
      s := Format('%X', [Ord(sTmp[i])]);
      if Length(s) = 1 then
        s := '0'   s;
      sFinal := sFinal   s;
      if i < iMemSize then
        sFinal := sFinal   ' ';
    end;
    Memo1.Clear;
    Memo1.Lines.Add(sFinal); // sFinal 即為所求
  finally
    FreeMem(buffer, iMemSize);
    bs.Free;
  end;    end;
--- --<-<-<@
我試了通不過,提示TBlobStream是未定義的變量,TBlobStream如何定義?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-24 09:01:27 IP:202.39.xxx.xxx 未訂閱
要 uses dbtables; --- --<-<-<@
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-24 09:53:08 IP:219.133.xxx.xxx 未訂閱
引言: 要 uses dbtables; --- --<-<-<@
現又出現一個問題,下面是我所改寫的,提示 Invalid class typecast問題 bs := TBlobStream.Create(ADOQuery1.FieldByName('ddd') as TBlobField, bmRead); 什麼問題?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-24 11:57:19 IP:202.39.xxx.xxx 未訂閱
Sorry, Binary 型態不能用在 TBlobField 看如下的方法行不行?
var Field1: TField;
  buffer: PChar;
  s, sTmp, sFinal: string;
  i: integer;
begin
  Field1 := ADODataSet1.FieldByName('ddd');
  with Field1 do
  begin
    if not IsBlob then  
    begin
      { Allocate space }
      GetMem(buffer, DataSize);
      try
        if not GetData(buffer) then
           MessageDlg(DisplayName   ' is NULL', mtInformation, [mbOK], 0)
        else
        begin
          sTmp := StrPas(buffer);              for i := 0 to DataSize do begin
            s := Format('%X', [Ord(sTmp[i])]);
            if Length(s) = 1 then
              s := '0'   s;
            sFinal := sFinal   s;
            if i < DataSize then
              sFinal := sFinal   ' ';
          end;
          Memo1.Clear;
          Memo1.Lines.Add(sFinal); // sFinal 即為所求
        end;
      finally
        FreeMem(buffer, DataSize);
      end;
    end;
  end;
end;
--- --<-<-<@
系統時間:2024-06-24 19:45:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!