Sql server 在SQL Server数据库中存储生物特征模板
我有一个系统,通过仓鼠捕捉用户的生物特征,并在Sql server 在SQL Server数据库中存储生物特征模板,sql-server,delphi,ado,widestring,Sql Server,Delphi,Ado,Widestring,我有一个系统,通过仓鼠捕捉用户的生物特征,并在宽字符串中获取生物特征模板,我的问题是在数据库中记录和检索字符串,必须缺少字符串的某些部分,查看代码以保存和检索生物特征模板: 保存: 我通过变量\u template var _Template: WideString; function StrToMemoryStream(SourceString: WideString): TMemoryStream; begin Result := TMemoryStream.Creat
宽字符串中获取生物特征模板,我的问题是在数据库中记录和检索字符串,必须缺少字符串的某些部分,查看代码以保存和检索生物特征模板:
保存:
我通过变量\u template
var
_Template: WideString;
function StrToMemoryStream(SourceString: WideString): TMemoryStream;
begin
Result := TMemoryStream.Create;
Result.WriteBuffer(Pointer(SourceString)^, Length(SourceString));
Result.Position := 0;
SetLength(SourceString, Result.Size);
Result.ReadBuffer(Pointer(SourceString)^, Result.Size);
end;
// getting biometric string
_Template := GetStringBiometric;
// saving into database
ADOQuery1.Open;
ADOQuery1.Edit;
TBlobField(ADOQuery1.FieldByName('CLD_TEMPLATE1')).LoadFromStream(StrToMemoryStream(_Template));
ADOQuery1.Post;
之后,获取数据库的值
var
_Template: WideString;
function GetStrToStream(Field: TField): WideString;
var
Stream: TMemoryStream;
begin
Result := '';
Stream := TMemoryStream.Create;
try
TBlobField(Field).SaveToStream(Stream);
Stream.Position := 0;
SetLength(Result, Stream.Size);
Stream.ReadBuffer(Pointer(Result)^, Stream.Size);
finally
FreeAndNil(Stream);
end;
end;
ADOQuery1.Open;
_Template := GetStrToStream(ADOQuery1.FieldByName('CLD_TEMPLATE1'));
ADOQuery1.Close;
返回后的模板是否与生物特征模板不匹配,这在某些转换中是否丢失了一些值?我是初级编程WideString
数据和TMemoryStream
类,SQL Server数据库中的列类型为Image
谢谢,您的API文档对GetStringBiomentric
函数有何说明?我非常怀疑生物特征数据是否是图像。它通常是一组数据点,更适合于一般BLOB字段类型。旁注:ntext
、text
、和image
数据类型将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarchar(max)
、varchar(max)
和varbinary(max)
。您的生物特征数据是字符串(即可读字符)吗?还要指定您的Delphi版本。细节很重要…GetStringBioCentric函数返回一个WideString,问题是系统已经存在,并且在数据库中使用此数据类型,我需要进行维护,但我可以尝试在另一个字段中记录数据以供测试。Delphi的版本是7,Delphi中堆栈上的字符串返回不可读的字符,总大小长度(#U模板)=384:'E'.$E'.$10'.$14'.'UF'''''.±)'.\35; 7''.\35; 2'PN 710字段,两者都正确工作,正确写入和接收值,但是,我在Delphi 6 update 2中制作了示例,应用程序是在Delphi 7中开发的,值是“最终确定的”“简言之,当它遇到#0时,在delphi 7中,似乎存在转换WideString的错误。。我被人发现了。写入图像字段之前的问题是否与此相关?没有安装更新,或者是否有其他方法解决此问题?