我现在有一个整数数组,想把它转变成二进制存入interbase数据库的一个blob字段并能还原读出来,但我发现存入也读出来的数据不一致,不知怎么回事?我的代码如下:
存入 If dwBackupNumber = 10 then
BEGIN
Finger := '';
for i := 0 to 458 do
begin
if Finger <> '' then Finger := Finger + ' ';
Finger := Finger + IntToHex(dwEnrollData[i], 8);
end;
END;
with dm1.fingerdata do
begin
EDIT;
Append;
Finger1 := TBlobStream.Create(TBlobField(DM1.Fingerdata.FieldByName('Finger_Data')), bmReadWrite);
with twriter.Create(Finger1, Length(Finger)) do
begin
try
Finger1.Write(PCHAR(Finger), Length(Finger));
finally
free;
end;
end;
try
Post;
Close;
OPen;
except
Exit;
end;
END;
end ;
读取
begin
FingerData := TBlobStream.Create(TBlobField(dm1.otherquery.FieldByName('Finger_Data')), bmread);
try
MemSize := FingerData.Size;
Inc(MemSize);
Features := AllocMem(MemSize);
try
FingerData.Read(Features^, MemSize);
Memo1.SetTextBuf(Features);
finally
FreeMem(Features, MemSize); end;
finally
FingerData.free;
end;
存入 If dwBackupNumber = 10 then
BEGIN
Finger := '';
for i := 0 to 458 do
begin
if Finger <> '' then Finger := Finger + ' ';
Finger := Finger + IntToHex(dwEnrollData[i], 8);
end;
END;
with dm1.fingerdata do
begin
EDIT;
Append;
Finger1 := TBlobStream.Create(TBlobField(DM1.Fingerdata.FieldByName('Finger_Data')), bmReadWrite);
with twriter.Create(Finger1, Length(Finger)) do
begin
try
Finger1.Write(PCHAR(Finger), Length(Finger));
finally
free;
end;
end;
try
Post;
Close;
OPen;
except
Exit;
end;
END;
end ;
读取
begin
FingerData := TBlobStream.Create(TBlobField(dm1.otherquery.FieldByName('Finger_Data')), bmread);
try
MemSize := FingerData.Size;
Inc(MemSize);
Features := AllocMem(MemSize);
try
FingerData.Read(Features^, MemSize);
Memo1.SetTextBuf(Features);
finally
FreeMem(Features, MemSize); end;
finally
FingerData.free;
end;
解决方案 »
- WebBrowser复制图片到剪贴板问题?急,,急,,,在线等!!!
- Delphi8中用Query实现非本机数据库(SQL)的添加
- TabOrder的问题
- 各位大蝦﹐請問如何將一個數據表的某一字段的所有值賦給一個combobox控件(也就是把字段的所有值添加到下拉菜單中)﹔
- 那位兄弟推荐一个录制软件演示的软件吧,谢谢
- 这样的开发,用什么开发工具?最好!!!!!!!!!
- Delphi + Foxpro数据库,选择某字段值的子串用何函数?
- 关于安装的问题,紧。急。求。救!!!!谢谢!!!
- 如何动态给QRChart的属性赋值?
- 用delphi写个小程序,修改运行中的某程序 的汇编指令
- QRExpr的问题
- 谁能帮我写下这个 excel 模板公式!
MaxBase = 36; function NumToStr (num, len, base: Integer; neg: Boolean;
fill: char): string;
// num = 要转换的数
// len = 生成字符串的最小长度// base = 进制数 2 = 二进制
// neg = 是否允许负数// fill = 填充字符用于补满字符串长度//
// 用法:
// NumToStr (45, 8, 2, false, ''0'') > ''00101101''
// NumToStr (45, 4, 8, false, ''0'') > ''0055''
// NumToStr (45, 4, 10, false, '' '') > '' 45''
// NumToStr (45, 4, 16, false, ''0'') > ''002D''
// NumToStr (45, 0, 36, false, '' '') > ''19''
//
var s: string;
digit: Integer;
begin
num:= ABS (num);
if ((base >= MinBase) and (base <= MaxBase)) then begin
s:= '''';
repeat
digit:= num mod base;
if digit < 10 then Insert (CHR (digit + 48), s, 1)
else Insert (CHR (digit + 55), s, 1);
num:= num div base;
until num = 0;
if neg then Insert (''-'', s, 1);
while Length(s) < len do Insert (fill, s, 1);
end;
Result:= s;
end; 从字符串转换回数: function StrToNum (const s: string; base: Integer;
neg: Boolean; max: Integer): Integer;
// s = 要转换的字符串
// base = 进制数
// neg = 是否为负数// max = 要转换的最大数//
// 用法:
// i:= StrToNum (''00101101'', 2, false, MaxInt);
// i:= StrToNum (''002D'', 16, false, MaxInt);
// i:= StrToNum (''-45'', 10, true, MaxInt);
// i:= StrToNum (''ZZ'', 36, true, MaxInt);
//
var negate, done: Boolean;
i, ind, len, digit, mmb: Integer;
c: Char;
mdb, res: Integer;
begin
res:= 0; i:= 1; digit:= 0;
if (base >= MinBase) and (base <= MaxBase) then begin
mmb:= max mod base;
mdb:= max div base;
len:= Length (s);
negate:= False;
while (i <= len) and (s[i] = '' '') do Inc (i);
if neg then begin
case s[i] of
''+'': Inc (i);
''-'': begin Inc (i); negate:= TRUE; end;
end; (* CASE *)
end; (* IF neg *)
done:= len > i;
while (i <= len) and done do begin
c:= Upcase (s[i]);
case c of
''0''..''9'': digit:= ORD(c) - 48;
''A''..''Z'': digit:= ORD(c) - 55;
else done:= FALSE
end; (* CASE *)
done:= done and (digit < base);
if done then begin
done:= (res < mdb) or ((res = mdb) and (digit <= mmb));
IF done then begin
res:= res * base + digit;
Inc (i);
end; (* IF done *)
end; (* IF done *)
end; (* WHILE *)
if negate then res:= - res;
end; (* IF done *)
Result:= res;
end;