2011-04-01 3 views
1

Я получаю сообщение об ошибке при сохранении строки. ошибка: prject prKlanten.exe повышен класс exeption EVariantInvalidArgError с сообщением 'invalid argument'.Недопустимый аргумент delphi

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.

Кто-нибудь знает, в чем проблема.

благодарит заранее!

Jasper

Я сделал то же самое в другой форме:

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; 

кроме этого с идентификатором пользователя

+1

Вы что это правильно: ('Aangemeld') – SimaWB

+0

Какой тип fmOrder.orderid & ['OrderID']? –

+0

@simaWB да, это правильно, что записывается в базу данных @Lieven fmOrder.orderid - строка orderid: string; как вы видете. ['orderID'] является colomn в базе данных –

ответ

2

В вашем рабочем примере у вас есть:

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

Предполагая, что из того, что они оба поля в форме декларации.

В вашем нерабочий examply у вас есть:

var 
fmOrder: TfmOrder; 
orderid: string; 

fmOrder кажется IDE создается экземпляр переменной формы. Если из этого следует порядок, то он не может быть полем декларации формы.

Вы уверены, что у вас есть заказ, объявленный как поле в декларации формы TfmOrder? Как вы говорите в своем комментарии к ответу @ BugFinder, что вы не можете вставить строку myStringVar := fmOrder.orderId;, я подозреваю, что вы получили ошибку компилятора, и это может быть связано с тем, что orderId не является полем участника fmOrder ...

+0

Да, я объявил: 'var fmOrder: TfmOrder; orderid: string; ' ' var Inlognaam: string; 'стоит от этого? или я ошибаюсь. –

+0

@ Джаспер: Не уверен, что вы говорите/спрашиваете в своем комментарии. Я не хочу звучать снисходительно, но понимаете ли вы, когда что-то является частью декларации класса, а когда нет и как это влияет на то, что вы можете и чего не можете сделать? Если объявление orderid находится между строками с 'TfmOrder = class (TForm)' и первым «end;» после этого, то оно является частью класса TfmOrder, и вы можете использовать fmOrder.orderid. Если orderid объявлен после первого 'end;' после строки 'TfmOrder = class (TForm)', то он не является частью объявления класса, и вы не можете использовать 'fmOrder.orderid'. –

1

Вы уверены, что и эта точка fmOrder не инвалид? Отладить его и следовать строкам, проверьте, что dm.atOrder ['OrderID'] действителен, а также действителен fmOrder. Это должно быть одно из двух.

+0

fmOrder это форма, я проверил ее, она действительна. dm.atOrder ['OrderID'] является деффенитным столбцом в atOrder. Я сделал это так же, как с userid, и это сработало: s –

+0

@ Jasper, мы не можем отлаживать ваш код удаленно, но вы можете разделить строку на две части. 'dm.atOrder ['OrderID'] = 'Test';' и 'myStringVar: = fmOrder.orderId;'. В зависимости от того, какая линия терпит неудачу, мы уже можем исключить некоторые возможности. –

+0

первая строка не удалась. не удалось преобразовать вариант строки типа в тип boolean также я не могу вставить строку myStringVar: = fmOrder.orderId; –

Смежные вопросы