如何把一个字节数组存到数据库里,然后再读出来

山娃马小三儿 2016-10-27 11:14:53
项目需要采集到字符数组数据,比如 a[0]=$14, a[1]=$10, a[2]=$0a, a[4]=$01,其实就是采集到的日期20161001,需要把这个数据存到数据库里,要么以14100a01方式保存,要么以20161001方式保存到数据库里,然后另外一个程序可以把数据读出来,因为是现场采集数据,数据量很大,通讯频繁,所以不想采用for循环的方式解析数据,最好是直接内存操作,请附带源码,谢谢。
...全文
994 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2016-11-03
  • 打赏
  • 举报
回复
只要读出来的与写入的相同, 具体使用哪种格式有什么关系,挑方便快捷的.
hdcopy2001 2016-11-02
  • 打赏
  • 举报
回复
转过去,

S := '';
FOR I:=0 TO 3 DO
  S := S + INTTOHEX(A[I],2);
转回来,

FOR I:=0 TO 3 DO
  A[i] :=   strtoint('$' + copy(S, i*2+1, 2));
现场手打,如有语法错误自行改正,速度不用怀疑
lyhoo163 2016-10-27
  • 打赏
  • 举报
回复
建议: 1、使用整数,对应data值。 2、使用string,对应日期字符值,如2016-10-27。 3、内存建立动态数组。 这样,退出保存数据表中,另一程序可通过表读取数据。
山娃马小三儿 2016-10-27
  • 打赏
  • 举报
回复
用varbinary或者varchar保存都行,只要能读出来还原回原来的数组就行
山娃马小三儿 2016-10-27
  • 打赏
  • 举报
回复
现在能写入数据库,但是读出来的时候总报错 var stream :TMemoryStream; begin stream :=TMemoryStream.Create; stream.Position :=0; stream.WriteBuffer(ATime[0], Length(ATime)); ADOQuery1.SQL.Add('Insert Into PData (Data) values (:Data)'); ADOQuery1.Parameters.ParamByName('Data').LoadFromStream(stream, ftblob); //TBlobField(ADOQuery1.Parameters.ParamByName('Data')).LoadFromStream(stream); ADOQuery1.ExecSQL; end 能正常写入数据库 但是读出来的时候总是报类型转换错误 var stream :TMemoryStream; begin ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * From PData'); ADOQuery1.Open; while not ADOQuery1.Eof do begin stream :=TMemoryStream.Create; TBlobField(ADOQuery1.FieldByName('Data')).SaveToStream(stream);//此句执行报错 ADOQuery1.Next; end; end
山娃马小三儿 2016-10-27
  • 打赏
  • 举报
回复
最好是当成一个variant直接存入数据库,这样可能效率最高,但是怎么把一个字节数组转换成这个,再怎么从这个variant转换成字节数组,不会写

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧