Passing BLOB as Parameter causes Error: Operand type clash: image is incompatible with text
Passing BLOB as Parameter causes Error: Operand type clash: image is incompatible with text
我正在研究 Delphi 7+ SQL Server 2008 + ADO
我有一个 table 有 4 个字段
emp_id integer
Name varchar(50)
designation varchar(10)
comment text
我正在尝试插入来自 Delphi
的数据
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' ;
所以我尝试在下面的代码行中将数据插入 comment 类型 ftBlob
parameters.ParamByName('comment').Assign(Memo1.Lines);
上面的代码行将数据插入数据库,但它插入了错误的数据,如 "???5?????????????????????????"
所以在 google 上花了一些时间后将上面的代码行替换为
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;
SQL 服务器 text
类型应映射到 Delphi 中的 ftMemo
(而不是 ftBlob
)。
如果您在设计时定义参数,请确保 DataType
设置为 ftMemo
,或在运行时设置:
parameters.ParamByName('comment').DataType := ftMemo;
然后简单地赋值参数Value
:
parameters.ParamByName('comment').Value := Memo1.Text;
我正在研究 Delphi 7+ SQL Server 2008 + ADO
我有一个 table 有 4 个字段
emp_id integer
Name varchar(50)
designation varchar(10)
comment text
我正在尝试插入来自 Delphi
的数据 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' ;
所以我尝试在下面的代码行中将数据插入 comment 类型 ftBlob
parameters.ParamByName('comment').Assign(Memo1.Lines);
上面的代码行将数据插入数据库,但它插入了错误的数据,如 "???5?????????????????????????"
所以在 google 上花了一些时间后将上面的代码行替换为
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;
SQL 服务器 text
类型应映射到 Delphi 中的 ftMemo
(而不是 ftBlob
)。
如果您在设计时定义参数,请确保 DataType
设置为 ftMemo
,或在运行时设置:
parameters.ParamByName('comment').DataType := ftMemo;
然后简单地赋值参数Value
:
parameters.ParamByName('comment').Value := Memo1.Text;