2016-11-15 27 views
4

我德尔福7+ SQL Server上的工作不兼容2008 + ADO传递BLOB作为参数会导致错误:操作数类型冲突:图像与文本

我有4场

emp_id integer 
Name varchar(50) 
designation varchar(10) 
comment text 

我的表想从德尔福

with qryAdoEmployee do 
     try 
      if not prepared then Prepared := True; 
      Parameters.ParamByName('emp_id').Value := 12345; 
      Parameters.ParamByName('Name').Value := 'NAME'; 
      Parameters.ParamByName('designation').Value := 'NEWDesig' ; 

插入数据,所以我尝试了下面的代码中插入数据线为型评论 ftBlob

  parameters.ParamByName('comment').Assign(Memo1.Lines); 

用的代码是插入数据到数据库中,但它是如此花一些时间对谷歌之后插入错误数据像"???5?????????????????????????"

上述行置换上面的代码行用

 Len := Length(Memo1.Lines.Text); 
     Stream := TMemoryStream.Create; 
     Stream.Write(Len, SizeOf(Len)); 
     Stream.Write(PChar(Memo1.Lines.Text)^, Len); 
     parameters.ParamByName('comment').LoadFromStream(Stream,ftBlob); 

上面一段代码出错操作数类型冲突:图像与文本不兼容

ExecSQL; 
    except on E:EDatabaseError do 
     MessageDlg(E.Message, mtError, [mbOK], 0); 
    end; 
+0

只需设置参数Value = Memo1.Text – kobik

+0

@kobik:我试过了,它也给出了相同的错误操作数类型冲突:图像与文本不兼容。 – DelphiLearner

+0

此行是否正确 - parameters.ParamByName('comment')。LoadFromStream(Stream,ftBlob); ?因为你的字段名是评论文字 – RBA

回答

4

SQL Server text类型应在Delphi中映射到ftMemo(而不是ftBlob)。

如果定义在设计时的参数,确保DataType设置为ftMemo,或将其设置在运行时:

parameters.ParamByName('comment').DataType := ftMemo; 

然后只需assignn参数Value

parameters.ParamByName('comment').Value := Memo1.Text; 
相关问题