delphi参数无效

时间:2011-04-01 09:18:41

标签: delphi

保存字符串时出错。错误是: prject prKlanten.exe使用消息'invalid argument'引发了exeption类EVariantInvalidArgError。

    var
  fmOrder: TfmOrder;
  orderid: string;

implementation

{$R *.dfm}
uses unDm, unInloggen, unKlant, unKeuze, unbeheer, unAccount, unOrderChange;

procedure TfmOrder.btOpslaanOClick(Sender: TObject);
  begin
    dm.atOrder.open;
    dm.atOrder.Append;
    dm.atOrder ['OrderStatus']             := ('Aangemeld');
    dm.atOrder ['klantID']                 := fminloggen.userid;
    dm.atOrder ['OrderDatum']              := leOphaalDatum.text;
    dm.atOrder ['Opmerkingen']             := leOpmerkingen.text;
    fminloggen.userid                      := dm.atOrder ['KlantID'];
    dm.atOrder ['OrderID']                 := fmOrder.orderid ;   
    dm.atOrder.post;
    fmOrderChange.ShowModal;
  end;
end.

行:

dm.atOrder ['OrderID']                 := fmOrder.orderid ;

给出错误。我拼写了一切正确的fminloggen.userid确实有效。

有谁知道问题所在。

提前感谢!

碧玉

我以另一种形式做了同样的事情:

public
  var inlognaam : string;
  userid    : string;
end;

var
  fmInloggen: TfmInloggen;

implementation

{$R *.dfm}

uses unKlant, unbeheer, unaccount, unKeuze,unDm;

procedure TfmInloggen.BTinloggenClick(Sender: TObject);

var Gevonden: boolean;
  begin
    dm.atInlog.open;
      Gevonden := false;
    while (not Gevonden) and (not dm.atInlog.eof) do
      begin
          if dm.atInlog['email'] = leUser.Text
          then
        begin
         Gevonden := true ;
         fminloggen.inlognaam := dm.atInlog['email'];
         fminloggen.userid    := dm.atInlog['KlantID'];
        end
          else
        dm.atInlog.Next
      end;

  if Gevonden and (dm.atInlog['Password'] = lePassword.text)
    then
     if dm.atInlog['Autorisatie'] = '1'
       then
       begin
          fmKlant.Caption := dm.atInlog['email'];
          fmKeuze.ShowModal;
       end
        else if dm.atInlog['Autorisatie'] = '2'
         then
         begin
           fmKlant.Caption := dm.atInlog['email'];
           fmBeheer.ShowModal;
         end;
    dm.atInlog.Close;
  end;

除了这是用户ID

2 个答案:

答案 0 :(得分:2)

在您的工作示例中,您有:

public
  var inlognaam : string;
  userid    : string;
end;

由此假设它们都是表单声明中的字段。

在你的非工作范例中,你有:

  var
fmOrder: TfmOrder;
orderid: string;

fmOrder似乎是IDE生成的表单实例变量。如果orderid跟随,则它不能是表单声明的字段。

您确定在TfmOrder表单声明中将orderid声明为字段吗?正如你在@ BugFinder的回答中所说,你无法插入myStringVar := fmOrder.orderId;行,我怀疑你得到了一个编译器错误,这很可能是因为orderId不是fmOrder的成员字段... < / p>

答案 1 :(得分:1)

你确定fmOrder这一点是无效的吗? 调试它,并按照通过,检查dm.atOrder ['OrderID']是否有效,以及fmOrder是否有效。它需要是两者中的一个。