Invalid variant type conversion...

I'm having trouble with variables on FastReport...

I added the function AnsiReplaceStr to my FastReport, using the AddFunction method and the OnUserFunction event... It appears to be added correctly, but when I tried to call the function, I get the error "Invalid variant type conversion"...

This error appears for me everytime I try to use a variable on FastReport...

I created a variable on Fast and I tried to use it that way:
procedure MemoCliOnBeforePrint(Sender: TfrxComponent);
Var wI : Integer;
begin
    MemoCli.Memo.Clear;
    MemoCli.Memo.Add( 'A' );
    For wI := 1 To StrToInt( Copy( VarToStr( <wCliSpaces> ), 1, 2 ) ) Do
        MemoCli.Memo.Add( ' ' );
End;

But the error appears here too...

Finally, how to use variables on FastReport? Where is my error?

Best regards.

Comments

  • edited 4:06PM
    What Delphi version do you use?
  • edited March 2005
    Delphi 6...
  • edited 4:06PM
    D6 MUST have upd1 and upd2 installed.
  • edited 4:06PM
    Ok... I'll install it... Thank you very much!

    Regards,
    Gabriel Frones
  • edited 4:06PM
    Alex, I installed Delphi update pack 1 and 2, but it still don't works...

    A fragment of my code should help?

    regards.
  • edited 4:06PM
    More details: I could add and use the function AnsiReplaceStr, but on the code I wrote, the error still happening...

    I make some tests, and the error appears to happens only with variables sent by Delphi or already existing on the Report.Variables... There are any diferences on the Reading of procedure's variables and the report's variables?

    regards.
  • edited 4:06PM
    One more thing:
    Var wI : Integer;
        wAux : String;
    begin
        wAux := <wCliSpaces>;
        While Length( wAux ) < 12 Do
            wAux := '0' + wAux;
        MemoCli.Memo.Clear;
        MemoCli.Memo.Add( 'A' );
        For wI := 1 To StrToInt( Copy( wAux, 1, 2 ) )  Do
            MemoCli.Memo.Add( ' ' );
    

    It shows the error "Invalid variant type conversion", but if I remove the two last lines, there are no errors... Why is FastReport Trying to convert Variant, if everything is already on the necessary types?

    regards.
  • edited 4:06PM
    Making some tests and looking for COPY function on FastScript source, I think I found a bug...

    Try to convert the string '0012' to variant and back to string... It will return '12'... Using the Copy function on FastScript (that converts to Variant), if you do a Copy( var, 1, 2 ), the expected result is '00', but it will return '12', theorically... I couldn't make it works, yet...

    regards.
  • edited 4:06PM
    I solved that problem... I wrote the code on Delphi...

    Now I wonder.... For what does FastReports have a Script if it's VERY hard to use a variable?

    regards.
  • edited 4:06PM
    I haven't tried working with FastScript much but I have had challenges when I have worked with it. Mostly my problems revolve around variant type conversions like you're finding.

    If FastScript wasn't a product they sold then I'd suggest using PascalScript which is much closer to Delphi than FastScript is. ;)
  • edited 4:06PM
    By the way, where can I find this PascalScript you talked?

    regards.
  • edited 4:06PM
    As I said before Delphi6 must have two updates installed, in other case you'll get Invalid Variant Conversion errors when running some scripts. To check if updates was installed correctly, run Delphi and make File|New application and compile it. Size of the exe file should be 384000 bytes. If it is not, you haven't installed the updates correctly.
  • edited 4:06PM
    GRFrones wrote:
    Making some tests and looking for COPY function on FastScript source, I think I found a bug...

    Try to convert the string '0012' to variant and back to string... It will return '12'... Using the Copy function on FastScript (that converts to Variant), if you do a Copy( var, 1, 2 ), the expected result is '00', but it will return '12', theorically... I couldn't make it works, yet...

    regards.
    The script
    var
      s: String;
      v: Variant;
    begin
      s := '0012';
      v := s;
      s := v;
      ShowMessage(Copy(s, 1, 2));
    end.
    

    works well for me - prints 00.
  • edited 4:06PM
    I followed the steps, but the size is incorrectly... Clicking in my Help >> About, it shows Version 6.0 (Build 6.240) Update Pack 2...

    If there's something wrong, how can I correct? Can I uninstall and reinstall the Update packs?

    Thank you very much, Alex!

    regards.
  • edited 4:06PM
    Probably you did not install upd1. The best way is to uninstall Delphi and install it again, then install upd1, then upd2.
  • edited April 2005
    Hi... Here I am again... I recently installed the RTL update 3, and the size of the executable was exactly 384Kb (393,216 bytes)... Is it really wrong?

    Thank you very much!

    regars.

Leave a Comment

Rich Text Editor. To edit a paragraph's style, hit tab to get to the paragraph menu. From there you will be able to pick one style. Nothing defaults to paragraph. An inline formatting menu will show up when you select text. Hit tab to get into that menu. Some elements, such as rich link embeds, images, loading indicators, and error messages may get inserted into the editor. You may navigate to these using the arrow keys inside of the editor and delete them with the delete or backspace key.