那个前辈知道,query怎么接受到流体,并保存到数据库(80)

  • 主题发起人 主题发起人 chenzhihui
  • 开始时间 开始时间
C

chenzhihui

Unregistered / Unconfirmed
GUEST, unregistred user!
看了别人的答案,我知道要用流的方式保存到数据库的blob类型的字段。但又碰到一个问题解决不了,就是在设置参数的时候怎么把这个流传递给query,让它能正确找到这个流体,并保存到数据中。create table CZH_TEST( PROGRAM_FILE BLOB)//在oracle上建立一个保存文件的表。我的代码如下:var str:Tmemorystream;begin inherited; adoquery1.Connection:=DBconn; str:=Tmemorystream.Create; str.LoadFromFile('E:/ABM/SOURCE CODE/ZHWork/exe/PeriorMgr.exe'); str.Position:=0; adoquery1.SQL.Text:='InSert into CZH_TEST(PROGRAM_FILE) values(:SPRG)'; Tblobfield(adoquery1.ParamByName('SPRG')).loadfromstream(str); //这个地方有问题 //adoquery1.ParamByName('BackTxtDetails').ParamType:=ptInput; //adoquery1.ParamByName('Backtxtdetails').LoadFromFile('E:/ABM/SOURCE CODE/ZHWork/exe/PeriorMgr.exe',ftBlob); try adoquery1.ExecSql ; finally str.Free; end;//存储文件end;我不知道怎么这个地方怎么才能让这个流体告诉query,并让query保存到数据库。
 
这样定义我没有做过,不行的话你就OPEN QUERUY,然后再修改数据,然后post,这样一定行.
 
你程序错了 没有执行sql 怎么能保存呢? adoquery1.SQL.Text:= select CZH_TEST where id=0 '; //搜索零的记录 adoquery1.insert; Tblobfield(adoquery1.ParamByName('SPRG')).loadfromstream(str); //这个地方有问题adoquery1.post
 
你是说直接select后。edit;那这个 Tblobfield(adoquery1.ParamByName('SPRG')).loadfromstream(str); 是否要改成Tblobfield(adoquery1.FieldbyName('PROGRAM_FILE')).loadfromstream(str); 呢?
 
尝试了一下,还是不行 。。 adoquery1.Connection:=DBconn; str:=Tmemorystream.Create; str.LoadFromFile('E:/ABM/SOURCE CODE/ZHWork/exe/PeriorMgr.exe'); str.Position:=0; adoquery1.SQL.Text:='select PROGRAM_FILE FROM CZH_TEST where id=0 '; adoquery1.Insert;//出错 Tblobfield(adoquery1.FieldByName('PROGRAM_FILE')).loadfromstream(str); try adoquery1.post; finally str.Free; end;//存储文件运行的时候,adoquery1.Insert;出错:cannot perform this operation on a closed dataset
 
adoquery1.Insert;//出错前面加一句 adoquery1.open;兄弟数据集还没打开,怎么操作啊~~
 
adoquery1.Connection:=DBconn; str:=Tmemorystream.Create; str.LoadFromFile('E:/ABM/SOURCE CODE/ZHWork/exe/PeriorMgr.exe'); str.Position:=0; adoquery1.SQL.Text:='select PROGRAM_FILE from CZH_TEST where ROWNUM <0 '; adoquery1.Append;  //出错:cannot perform this operation on a closed dataset Tblobfield(adoquery1.FieldByName('PROGRAM_FILE')).loadfromstream(str); //adoquery1.ParamByName('BackTxtDetails').ParamType:=ptInput; //adoquery1.ParamByName('Backtxtdetails').LoadFromFile('E:/ABM/SOURCE CODE/ZHWork/exe/PeriorMgr.exe',ftBlob); try adoquery1.post; finally str.Free; end;//存储文件我有些不理解,adoquery1.Append;是编辑数据,adoquery1总的知道编辑那个表,那个字段吧。。这个在那里体现呢。。?期待大鸟们指点。。。
 
adoquery1.Connection:=DBconn; str:=Tmemorystream.Create; str.LoadFromFile('E:/ABM/SOURCE CODE/ZHWork/exe/PeriorMgr.exe'); str.Position:=0; adoquery1.SQL.Text:='select PROGRAM_FILE from CZH_TEST where ROWNUM <0 '; [red]adoquery1.open;//少这一句[/red] adoquery1.Append;  //出错:cannot perform this operation on a closed dataset Tblobfield(adoquery1.FieldByName('PROGRAM_FILE')).loadfromstream(str); //adoquery1.ParamByName('BackTxtDetails').ParamType:=ptInput; //adoquery1.ParamByName('Backtxtdetails').LoadFromFile('E:/ABM/SOURCE CODE/ZHWork/exe/PeriorMgr.exe',ftBlob); try adoquery1.post; finally str.Free; end;//存储文件adoquery1.Append;//增加一条记录adoquery1.insert;//插入一条记录adoquery1.edit;//数据集进入编辑状态
 
接受答案了.
 
后退
顶部