DataModule1.ADOQuery1.SQL.Clear;
    DataModule1.ADOQuery1.SQL.Add('begin tran');
    DataModule1.ADOQuery1.SQL.Add('update  allocated');
    DataModule1.ADOQuery1.SQL.Add('set eqmtnum=eqmtnum-:eqmtnum');
    DataModule1.ADOQuery1.SQL.Add('where eqmtno=:eqmtno and addressno=:adressno');
    DataModule1.ADOQuery1.SQL.Add('insert into rpdeqmt ');
    DataModule1.ADOQuery1.SQL.Add
      ('values(:adressno,:eqmtno,:rpdtime,:addition,:rpdprice,:num)');
    DataModule1.ADOQuery1.SQL.Add('commit tran');
    DataModule1.ADOQuery1.Parameters.Items[0].Value:=strtoint(RnumEdt.Text);
    DataModule1.ADOQuery1.Parameters.Items[1].Value:=strtoint(RnoEdt.Text);
    DataModule1.ADOQuery1.Parameters.Items[2].Value:=
                DataModule1.ADOTable1.FieldValues['adressno'];    DataModule1.ADOQuery1.Parameters.Items[3].Value:=
                     Copy(RadrsCMB.Text,0,pos  (' ',RadrsCMB.Text));
    DataModule1.ADOQuery1.Parameters.Items[4].Value:=RnoEdt.Text;
    DataModule1.ADOQuery1.Parameters.Items[5].Value:=
                   FormatDateTime('yyyy-mm-dd',RTimeP.DateTime);
    DataModule1.ADOQuery1.Parameters.Items[6].Value:=RextraEdt.Text;
{***********************************************************************************
    问题就在这里,Parameters.Items[6].Value 的值 总是乱码! 而RextraEdt.Text的值是正确的! 且只对汉语字符,如RextraEdt.Text 为:'我真的不知道这是为什么?'执行后总是没了几个字符 如'我是真的' 就没有后边的了! 我的后台数据库对应的数据类型为:Varchar(50)
**************************************************************************** *******}
    DataModule1.ADOQuery1.Parameters.Items[7].Value:=RmnyEdt.Text;
    DataModule1.ADOQuery1.Parameters.Items[8].Value:=RnumEdt.Text;
    DataModule1.ADOQuery1.ExecSQL;

解决方案 »

  1.   

    在单元 ADODB中改一下VarDataSize函数unit ADODB;
    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)^);改为下面这句
        Result:=Length(Value);
        if Result = 0 then
          Result := -1;
      end
      else
        Result := SizeOf(OleVariant);
    end;可以把改过的文件手动加入到工程中,也可以复盖掉原来的文件,最好是把ADODB.DCU全部删除,再重编译改过后的ADODB.pas,要确保改过后ADODB.pas生效就行了
    试试看
      

  2.   

    谢谢! 我怎样才能重新编译修改过的ADODB呢??
      

  3.   

    to 楼主
    如果不行的话,看改成其它的方式试试
    如:直接写SQL语句