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

About Binary Data Insert into DataBase

答題得分者是:Mickey
LPH
一般會員


發表:53
回覆:43
積分:19
註冊:2003-04-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-20 15:41:04 IP:218.162.xxx.xxx 未訂閱
var Psin : array[0..255] of byte; i : Integer; begin for i := 0 to 255 do Psin[i] := GetBuf[i]; with query1 do begin close; SQL.add('INSERT INTO database'); sql.add('('mlbinary')'); sql.add('VALUE'); sql.add('(':mlbinary')'); parambyname('mlbinary').datatype := ftarray; parambyname('mlbinary').value := Psin; Execsql; end; end; 為什麼會發生型態不對的錯誤..
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-20 19:30:12 IP:218.32.xxx.xxx 未訂閱
改這樣試試 :
var
  Psin : array[0..255] of byte;
  i    : Integer;
begin
for i := 0 to 255 do 
   Psin[i] := GetBuf[i];    with query1 do
begin
  close;
  SQL.add('INSERT INTO database');

  sql.add('(mlbinary)');
  sql.add('VALUES');
  sql.add('(:mlbinary)');
//  parambyname('mlbinary').datatype := ftarray;
//  parambyname('mlbinary').value := Psin;
  parambyname('mlbinary').datatype := ftTypedBinary;
  parambyname('mlbinary').SetData(@Psin);      Execsql;
end;
end;
發表人 - Mickey 於 2003/05/20 21:26:53
LPH
一般會員


發表:53
回覆:43
積分:19
註冊:2003-04-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-21 14:36:20 IP:218.162.xxx.xxx 未訂閱
引言: 改這樣試試 :
var
  Psin : array[0..255] of byte;
  i    : Integer;
begin
for i := 0 to 255 do 
   Psin[i] := GetBuf[i];    with query1 do
begin
  close;
  SQL.add('INSERT INTO database');

  sql.add('(mlbinary)');
  sql.add('VALUES');
  sql.add('(:mlbinary)');
//  parambyname('mlbinary').datatype := ftarray;
//  parambyname('mlbinary').value := Psin;
  parambyname('mlbinary').datatype := ftTypedBinary;
  parambyname('mlbinary').SetData(@Psin);      Execsql;
end;
end;
發表人 - Mickey 於 2003/05/20 21:26:53
謝謝你.. 可是 如果我存入的 Binary Byte 是 128 讀出來轉成 XML textNode 時 為什麼常會不足128 Byte 不管是 Buffer 或是將Pchar 轉成 String.. Var Buffer: PChar; MemSize: Integer; Stream : TBlobStream; mydoc : IDOMDocument; mymsh : IDOMNode; mychild:IDOMNode; mymb : IDOMNode; mymb1 : IDOMNode; I : Integer; X : Integer; IA22 : String; begin for I := 3 to OpdDm.Txmltab.FieldCount - 1 do begin if OpdDm.Txmltab.Fields[I].AsString <> '' then begin if I = 14 then begin Stream := TBlobStream.Create(OpdDm.Txmltab.FieldByName('mlbinary') as TBlobField, bmRead); try MemSize := Stream.Size; Inc(MemSize); Buffer := allocMem(MemSize); try Stream.Read(Buffer^, MemSize); IA22 := ''; for X := 1 to MemSize do IA22 := IA22 copy(Buffer,X,1); mychild := .appendChildmydoc.createElementOpdDm.Txmltab.Fields[I].FieldName)); //mychild.appendChild(mydoc.createTextNode(Buffer)); mychild.appendChild(mydoc.createTextNode(IA22)); finally FreeMem(Buffer, MemSize); end; finally Stream.Free; end; end end;
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-21 15:34:11 IP:218.163.xxx.xxx 未訂閱
我是用 MSSQL 2000 , binary(20) datatype, D6 測試的. 不知你的環境 ? datatype 用 ? 你把 Binary Field 用來存 Char, 問題可能出在 GetBuf[] 是不是 Null-Terminate(最後一個 Byte 為 0). ps. Source Code 可用【code】...【/code】比較容易看. 發表人 - Mickey 於 2003/05/21 16:14:34
LPH
一般會員


發表:53
回覆:43
積分:19
註冊:2003-04-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-21 15:59:44 IP:218.162.xxx.xxx 未訂閱
引言: 我是用 MSSQL 2000 , binary(20) datatype, D6 測試的. 不知你的環境 ? datatype 用 ? ps. Source Code 可用【code】...【/code】比較容易看.
我環境也是 MsSql 2000 , Binary(256) DataType , D6 Binary 小於 128 欄位好像是顯示 Bytes 我用 256 欄位是顯示 [BLOB] 從SQL Explorer 看...不知 [Bytes] 和 [BLOB] 有何不同...
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-21 16:43:13 IP:218.163.xxx.xxx 未訂閱
我用 binary(256) datatype, BDE 是 TBytesField 不是 TBLOBField 耶 ? 上一篇我修正過, 請再過目一下. Null-Terminate 那段.^^ 反過來我有一些疑問想澄清 : 為何用 binary data field 拿來存 character, 而不用 varchar / char data field ? 難道是要刻意避開 DB 的 character set 轉換 ? 如果是, 除喪失一些 SQL 功能(如 like 等...)外, 亦增加不少資料處理的複雜度喔.
LPH
一般會員


發表:53
回覆:43
積分:19
註冊:2003-04-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-21 18:53:10 IP:218.162.xxx.xxx 未訂閱
引言: 我用 binary(256) datatype, BDE 是 TBytesField 不是 TBLOBField 耶 ? 上一篇我修正過, 請再過目一下. Null-Terminate 那段.^^ 反過來我有一些疑問想澄清 : 為何用 binary data field 拿來存 character, 而不用 varchar / char data field ? 難道是要刻意避開 DB 的 character set 轉換 ? 如果是, 除喪失一些 SQL 功能(如 like 等...)外, 亦增加不少資料處理的複雜度喔.
我的Table 是從 Sqlserver Enterprise Menager 新增料表產生DataType 是VarBinary再從SQL Explorer去看是資料欄 BLOB. Field是 LongVarBinary 謝謝你的指教.我已經解決了 Insert Into 的問題了.感謝... 但是現在就是取出資料時有時會造成欄位不足的情形....再請指教.... 發表人 - LPH 於 2003/05/21 18:56:40 發表人 - LPH 於 2003/05/21 19:04:10
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-21 20:54:31 IP:218.32.xxx.xxx 未訂閱
即使我用
系統時間:2024-07-01 22:07:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!