各位好!
   我用Delphi写了一个DLL,该DLL主要作用是调用SAP RFC接口,取得对应值。但发现取过来的值如果字符长点就被截断了。我写的方法如下:
1、定义变量:Connection,Table,Table2,Funct : variant;  r,iCount,iCount2,i: integer;  s7: string;
2、连接SAP:
  Connection.User := 'SAPWU';
  Connection.System            := 'PRD';
  Connection.Client            := '800';
  Connection.ApplicationServer := 'UUUUUUUUU';
  Connection.SystemNumber      := '01';
  Connection.Password          := '111111';
  Connection.Language          := 'ZH' ;
  Connection.CodePage          := '8400';
3、给字符串赋值:
   fun.Connection := connection;
   Funct := fun.add('ZMIB33');  //函数名称  ZMIB33为RFC函数名
   Table2 := Funct.tables.item('T_MARA_CFG');    s7 := Table2.value(r,'ATWTB');   // ATWTB 为SAP的一个表字段    --- 问题就出在这里了!!   在SAP中,有一个字符串:“Mortara饿死的份(热舞ARR+90导静电”,赋值后 s7='Mortara饿死的份(热舞ARR+90导ST'

解决方案 »

  1.   

    试一下S7用AnsiString类型
    我都是用AnsiString做RFC,还没出现过什么问题By the way,终于遇见用Delphi鼓捣SAP的同行啦!命苦啊!
      

  2.   

    顺便问一句,能这么用吗?
    我都是在前面设置FIELDS,然后s7 := Table2.value(r,1),在根据SAP中每一个字段长度截取的
    我还真没这么用过
      

  3.   


    呵呵,看错了,你调的是自定义的函数啊,我还以为是READ_RFC_TABLE,这条回复当我没说过...
    不过试一下用AnsiString类型代替String
      

  4.   

    老兄,我使用了 AnsiString; 但是还是出现这个问题呢,
    你用的方法是什么??能发详细点的代码给我看看么
      

  5.   

    你试一下,把整行取出付给txt,再把ATWTB从txt中Copy出来
    T_MARA_CFG应该是你们自定义的透明表吧,查一下表结构txt := Table2.value(r, 1);//跟一下看看txt是什么
    s7:=Copy(txt,ATWTB前所有字段的长度和+1,ATWTB字段长度)