三层模式下,向数据库里插值出现的问题,请高手指点!!! ( 积分: 30 )

  • 主题发起人 主题发起人 superhen
  • 开始时间 开始时间
S

superhen

Unregistered / Unconfirmed
GUEST, unregistred user!
先谢了:)
1.存储过程:(测试正常)
CREATE procedure insert_table1 @bookid bigint,@bookname varchar(100)
as
insert into table1 (bookid,bookname)values(@bookid,@bookname)
GO
2.中间件:adostoredproc+DataSetProvider1
3.客户端程序:
with cds_inputStoredo
begin
RemoteServer:=Dm.SocketCon;
ProviderName:='DataSetProvider1';

Params[0].AsInteger:=0;
Params[1].AsString:='abcdefg';

Execute;
end;
程序运行正常,但是'abcdef'插入到数据库中就变成了'ab'或'a' 或'',郁闷,请指点一下
 
先谢了:)
1.存储过程:(测试正常)
CREATE procedure insert_table1 @bookid bigint,@bookname varchar(100)
as
insert into table1 (bookid,bookname)values(@bookid,@bookname)
GO
2.中间件:adostoredproc+DataSetProvider1
3.客户端程序:
with cds_inputStoredo
begin
RemoteServer:=Dm.SocketCon;
ProviderName:='DataSetProvider1';

Params[0].AsInteger:=0;
Params[1].AsString:='abcdefg';

Execute;
end;
程序运行正常,但是'abcdef'插入到数据库中就变成了'ab'或'a' 或'',郁闷,请指点一下
 
你把Params[1].AsString:='abcdefg'改成Params[1].value:='abcdefg'试试,还有,你这个参数的长度是多少呀?
 
谢谢feihu-sq
我按你的提示把程序修改了一下:
with cds_inputStoredo
begin
RemoteServer:=Dm.SocketCon;
ProviderName:='DataSetProvider1';

Params[0].size:=100;

Params[0].value:=0;
Params[1].size:=100;
Params[1].value:='abcdefg';

Execute;
end;
还是不行,请再帮忙看看
 
把 参数Params[1]的类型设定为输入(in), 看看.
 
谢谢jangill,按照你的提示我又改了
with cds_inputStoredo
begin
RemoteServer:=Dm.SocketCon;
ProviderName:='DataSetProvider1';
Params[0].ParamType:=ptinput;
Params[0].size:=100;

Params[0].value:=0;
Params[1].ParamType:=ptinput;
Params[1].size:=100;
Params[1].value:='abcdefg';

Execute;
end;
不行,您写过类似这样的代码吗,能不能给我看看啊?
 
谢谢各位
我已经解决了,出现这个问题主要是delphi自带的ado出现的问题
function VarDataSize(const Value: OleVariant): Integer;
  begin
   if VarIsNull(Value) then
    Result := -1
   else
if VarIsArray(Value) then
    Result := VarArrayHighBound(Value, 1) + 1
   else
if TVarData(Value).VType = varOleStr then
    begin
     Result := Length(PWideString(@TVarData(Value).VOleStr)^);
//出问题的行
     if Result = 0 then
      Result := -1;
    end
   else
    Result := SizeOf(OleVariant);
  end;
我已经修改好了,散分
 
多人接受答案了。
 
Result := Length(PWideString(@TVarData(Value).VOleStr)^);
//出问题的行
原来是什么样子的?能告诉我吗? 我使用ADO从来都没有您出现的错误啊, 奇怪!!!
 
后退
顶部