2016-11-15 47 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; 
相關問題