Solved

What does the following error mean?

Posted on 2008-09-30
2
7,118 Views
Last Modified: 2012-05-05
MyApplication.exe is a Delphi 5 app that creates and outputs and EDI file.  The processing in the app outputs to a debug file, which is where I receive the exception.

Exception
Exception EOleSysError in module MyApplication.exe at 00061D4A.  No named arguments.

MyApplication.exe is running on a terminal services desktop with Windows Server 2008 (64 bit).

I need to know if there is a missing entry in the registry, missing dll files, etc.
unit Main;
 

interface
 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, Db, ADODB, ExtCtrls, ComCtrls, Registry, Mask, ToolEdit, IniFiles,

  Buttons;
 

type
 

  TForm1 = class(TForm)

    ADOConnection1: TADOConnection;

    ADODataSet1: TADODataSet;

    ADODataSet2: TADODataSet;

    ADODataSet3: TADODataSet;

    ADODataSet4: TADODataSet;

    Panel1: TPanel;

    Panel2: TPanel;

    Panel3: TPanel;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    ComboBox1: TComboBox;

    ComboBox2: TComboBox;

    ComboBox3: TComboBox;

    ComboBox4: TComboBox;

    Button2: TButton;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    Animate1: TAnimate;

    Label11: TLabel;

    Label12: TLabel;

    Panel4: TPanel;

    Label13: TLabel;

    Label14: TLabel;

    Label15: TLabel;

    Label16: TLabel;

    Button1: TButton;

    Label17: TLabel;

    RadioGroup1: TRadioGroup;

    Button3: TButton;

    OpenDialog1: TOpenDialog;

    Qry: TADOQuery;

    OutDirEdit : TEdit;

    DirBtn: TSpeedButton;

    ProgBar: TProgressBar;//Can only be used with Delphi label component

    //Label18: TTierLabel;  Needs to be Delphi label, not TIER

    //Label19: TTierLabel;  Needs to be Delphi label, not TIER

    procedure Button2Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure ComboBox1Change(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Label1DblClick(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    function FindPayorDir( PayorID : integer ) : string;

    procedure DirBtnClick(Sender: TObject);
 

  private

      BatchKey : Integer;

      MapNameID : Integer;

      TransID : Integer;

      PayorID : Integer;

      ConnectionStr : string;

      V1Builder : Boolean;

      V2Builder : Boolean;

      UserDir   : string;

      IniFile: TIniFile;

      IsIniUsed, IsParUsed : Boolean;

      EDIOutputDir : String;

      ConnectionStr2 : String;
 

    { Private declarations }

  public

     //Can only be used with Delphi labels

     //procedure setMinMax(AMin : Integer; AMax : Integer);

     //procedure UpdatePrg;

    { Public declarations }

  end;
 

const

  WM_ACK = WM_USER + 1;
 

var

  Form1: TForm1;
 

implementation
 

uses BuildEdiSpc, FileVersion, BuildEdiSpc2;
 

{$R *.DFM}
 

procedure TForm1.Button2Click(Sender: TObject);

var

Total : integer;

Pass : integer;

Fail : Integer;

FName : string;

begin
 

  if ( ComboBox1.ItemIndex <> - 1 ) then

     PayorID := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
 

  if ( ComboBox2.ItemIndex <> - 1 ) then

     MapNameID := Integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex]);
 

  if ( ComboBox3.ItemIndex <> - 1 ) then

     TransID := Integer(ComboBox3.Items.Objects[ComboBox3.ItemIndex]);
 

  if ( ComboBox4.ItemIndex <> - 1 ) then

     BatchKey := Integer(ComboBox4.Items.Objects[ComboBox4.ItemIndex]);
 

  Panel3.BringToFront;

  V2Builder := True;
 

  Animate1.Visible := False;

  Animate1.Active := False;
 

end;
 
 

procedure TForm1.FormCreate(Sender: TObject);

var

UserName : string;

UserPass : string;

Database : string;

MyProvider : string;

Server : string;

V1, V2, V3, V4 : Word;

Reg : TRegistry;

IniSec: string;

CurrentDir : string;
 

begin
 

    V1Builder := False;

    V2Builder := True;

    BatchKey := -1;

    MapNameID := -1;

    TransID := -1;

    PayorID := -1;

    Label6.Caption := '';

    Label9.Caption := '';

    Label11.Caption := '';

    Label12.Caption := '';

    RadioGroup1.Visible := False;

    RadioGroup1.ItemIndex := 1;

    Reg := TRegistry.Create;

    Reg.RootKey := HKEY_LOCAL_MACHINE;

    OutDirEdit.Text := '';

    ConnectionStr2 := '';

    IsIniUsed := False;

    IsParUsed := False;
 

    ADOConnection1.Close;

    

    with ADOConnection1 do

    begin
 

      ConnectionString := ConnectionStr;
 

      IsIniUsed := ReadLoginwINI( UserName, UserPass, Database, Server, MyProvider );

      IsParUsed := ReadLoginwPAR( UserName, UserPass, Database, Server, MyProvider );
 

      if ( UserName <> '' ) and ( Database <> '' ) and ( UserPass <> '' ) and ( Server <> '' ) and ( MyProvider <> '' ) then

      begin

        ConnectionString := Format('Provider=%s;Password=%s;Persist Security Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s;Packet Size=4096',[MyProvider,UserPass,UserName,Database,Server]);

      end;
 

      CurrentDir := IncludeTrailingBackslash(ExtractFilePath(Application.ExeName));
 

      OutDirEdit.Text := CurrentDir;
 

      if ( FileExists(CurrentDir + 'EdiBuilder.udl') = True ) then

      begin

        ConnectionString := Format('FILE NAME=%sEdiBuilder.UDL', [CurrentDir]);

        AdoConnection1.ConnectionString := ConnectionString;

        Label17.Caption := ConnectionString;
 

        //Comment out-testing only//

        //ConnectionStr := ConnectionString;

        //Comment out-testing only//
 

      end;
 

      if ( ConnectionString = '' ) then

      begin
 

        //01.18.2006 TIER 4.0.77 outputs connection info in Parameter 5 D.L.

        if Pos('Provider', ParamStr(5)) > 0 then

        begin

          AdoConnection1.ConnectionString := ParamStr(5);

          Label17.Caption := ParamStr(5);

          ConnectionStr2 := ParamStr(5);

          OutDirEdit.Text := CurrentDir;   //always specify the directory EdiBuilder executes from

        end;
 

        //01.18.2006 Other versions of TIER may use Parameter 6 D.L.

        if Pos('Provider', ParamStr(6)) > 0 then

        begin

          AdoConnection1.ConnectionString := ParamStr(6);

          Label17.Caption := ParamStr(6);

          ConnectionStr2 := ParamStr(6);

          OutDirEdit.Text := CurrentDir;  //always specify the directory EdiBuilder executes from

        end;
 

      end;
 

      Label17.Visible := False;
 

      //BatchKey := 1053328;  //Comment out after testing//
 

    end; //end with adoconnection
 

    try

        AdoConnection1.Open;

    except

        ShowMessage('Failed to connect to SQL Server');

        exit;

    end;
 

    { handle param 2,3,4 via EdiBuilder.par file - START}

    IniFile := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'EdiBuilder.par');
 

    Qry.Close;

    Qry.SQL.Clear;

    Qry.SQL.Add(Format('SELECT OutputTypeLU FROM BIL_Batches WHERE BatchKey = %d', [BatchKey]));

    Qry.Open;

    if Qry.FieldByName('OutputTypeLU').AsInteger = 3 then

      IniSec := 'Medicare'

    else

      IniSec := 'Medicaid';
 

    //comment out after testing//

    //MapNameID := 49;

    //TransID := 1;

    //PayorID := 316998;

    //comment out after testing//
 

    //uncomment after testing//

    MapNameID := IniFile.ReadInteger(IniSec, 'MapNameID', -1);

    TransID := IniFile.ReadInteger(IniSec, 'TransID', -1);

    PayorID := IniFile.ReadInteger(IniSec, 'PayorID', -1);

    //uncomment after testing//
 

    { handle param 2,3,4 via EdiBuilder.par file - END}
 

    Animate1.Visible := False;

    Animate1.Active := False;
 

    GetBuildInfo( ParamStr(0), V1, V2, V3, V4 );
 

    Caption := Caption + ' ' + Format('%d.%d.%d',[V1,V2,V3]);
 

    if ( ParamCount > 1 ) then

    begin
 

      //Comment out after testing//

      //BatchKey := 1053328;

      //Label6.Caption := IntToStr(Batchkey);

      //Label6.Update;

      //Label9.Caption := IntToStr(BatchKey) + '.837';

      //Comment out after testing//
 
 

      //uncomment out after testing//

      BatchKey := StrToInt( ParamStr(1) );

      Label6.Caption := ParamStr(1);

      Label6.Update;

      Label9.caption := ParamStr(1) + '.837';

      //uncomment out after testing//
 

      if ( OutDirEdit.Text <> '' ) then

      OutDirEdit.Text := FindPayorDir( PayorID );
 

      if ( ParamCount = 5 ) or ( ParamCount = 7 )  then

      begin
 

        Label6.Caption := ParamStr(1);

        Label6.Update;

        Label9.caption := ParamStr(1) + '.837';

        OutDirEdit.Text := FindPayorDir( PayorID );
 

        Application.ProcessMessages;
 

        BatchKey := StrToInt( ParamStr(1) );
 

        if ( ParamCount > 2 ) then

        begin

          PayorID := StrToInt( ParamStr(3) );
 

          if ( FindPayorDir( PayorID ) <> '' ) then

               OutDirEdit.Text := FindPayorDir( PayorID );
 

        end;
 

        if ( ParamCount > 3 ) then

             MapNameID := StrToInt( ParamStr(4) );

        if ( MapNameID = -1 ) then

             MapNameID := IniFile.ReadInteger(IniSec, 'MapNameID', -1);
 
 

        if ( ParamCount > 4 ) then

             TransID := StrToInt( ParamStr(5) );

        if ( TransID = -1 ) then

             TransID := IniFile.ReadInteger(IniSec, 'TransID', -1);

        
 

        ConnectionStr := '';
 

        if ( ParamCount > 5 ) then

             ConnectionStr := ParamStr(6);
 

        Panel3.BringToFront;

        Panel3.Update;
 

        Application.ProcessMessages;
 

        Animate1.Visible := False;
 

        exit;
 

      end;
 

      if ( ParamCount >= 2 ) then

           SendMessage ( StrToInt(ParamStr(2)), WM_ACK, 0, 0 );
 

      Application.ProcessMessages;
 

    end;
 

    ComboBox1.Items.Clear;

    ComboBox3.Items.Clear;
 

    with ADODataSet1 do

    begin

       Open;

       First;

       ComboBox1.Items.Clear;

       while ( not eof ) do

       begin

          ComboBox1.Items.AddObject( FieldByName('PayorName').AsString, TObject( FieldByName('PayorKey').AsInteger ) );

          Next;

       end;

       Close;

    end;
 

    //original - uncomment after testing//
 

    with ADODataSet2 do

    begin

      Close;

      Parameters.ParamByName('Key').Value := PayorID;

      Open;

      First;

      ComboBox2.Items.Clear;

      while ( not eof ) do

      begin

        ComboBox2.Items.AddObject( FieldByName('MapName').AsString, TObject( StrToInt(FieldByName('EdiMapNameID').AsString) ) );

        Next;

      end;

      Close;

    end;

    //original - uncomment after testing//

    
 

    //select Description, EDIMapTransactionID from EDI_Map_Transaction
 

    with ADODataSet3 do

    begin

       Close;

       Parameters.ParamByName('TransID').Value := TransID;

       Open;

       ComboBox3.Items.Clear;

       while ( not eof ) do

       begin

          ComboBox3.Items.AddObject( FieldByName('Description').AsString, TObject( FieldByName('EdiMapTransactionID').AsInteger ) );

          Next;

       end;

       Close;

    end;
 

    
 

    with ADODataSet4 do

    begin

       Open;

       First;

       ComboBox4.Items.Clear;

       while ( not eof ) do

       begin

         ComboBox4.Items.AddObject( FieldByName('BatchKey').AsString, TObject( FieldByName('BatchKey').AsInteger ) );

         Next;

       end;

       Close;

    end;
 
 

    if ( PayorID <> -1 ) then

       ComboBox1.ItemIndex := ComboBox1.Items.IndexOfObject( TObject(PayorID) );
 

    if ( MapNameID <> -1 ) then

       ComboBox2.ItemIndex := ComboBox2.Items.IndexOfObject( TObject(MapNameID) );
 

    if ( TransID <> -1 ) then

       ComboBox3.ItemIndex := ComboBox3.Items.IndexOfObject( TObject(TransID) );
 

    if ( BatchKey <> -1 ) then

       ComboBox4.ItemIndex := ComboBox4.Items.IndexOfObject( TObject(BatchKey) );
 

end;   
 
 

procedure TForm1.ComboBox1Change(Sender: TObject);

var

PayorKey : Integer;

begin
 

  ComboBox2.Items.Clear;
 

  if ( ComboBox1.ItemIndex = -1 ) then exit;
 

  PayorKey := Integer( ComboBox1.Items.Objects[ ComboBox1.ItemIndex] );
 

    with ADODataSet2 do

    begin

       Close;

       Parameters.ParamByName('Key').Value := PayorKey;

       Open;

       while ( not eof ) do

       begin

          ComboBox2.Items.AddObject( FieldByName('MapName').AsString, TObject( FieldByName('EdiMapNameID').asInteger ) );

          Next;

       end;

       Close;

    end;
 
 

end;
 

procedure TForm1.Button1Click(Sender: TObject);

begin

  Application.Terminate;

end;
 

procedure TForm1.Label1DblClick(Sender: TObject);

begin

    Label17.Visible := True;

end;
 
 

procedure TForm1.Button3Click(Sender: TObject);

var

Total : integer;

Pass : integer;

Fail : Integer;

FName : string;

begin
 

   FName := '';
 

   if ( OutDirEdit.Text <> '' ) then

     FName := OutDirEdit.Text;
 

   if ( ConnectionStr2 <> '' ) then

     ConnectionStr := ConnectionStr2;
 

   //ProgBar.Visible := True;  Can only be used with Delphi label
 

   Animate1.Visible := True;

   Animate1.Active := True;
 

   LoadEDI2( BatchKey, MapNameID, PayorID, TransID, ConnectionStr, Total, Pass, Fail, FName );
 

   Animate1.Visible := False;

   Animate1.Active := False;
 

   Sleep(250);
 

   Panel4.BringToFront;
 

   Label13.Caption := 'Total Transactions ' + IntToStr( Total );

   Label14.Caption := 'Total Pass Transactions ' + IntToStr( Pass );

   Label15.Caption := 'Total Fail Transactions ' + IntToStr( Fail );

   Label16.Caption := 'Output file name ' + FName;
 

   SendMessage ( StrToInt(ParamStr(2)), WM_ACK, 0, 0 );
 

end;
 
 

function TForm1.FindPayorDir( PayorID : integer ) : string;

var

Reg : TRegistry;

iIndex : integer;

Entries : TStringList;

begin
 

    Result := GetCurrentDir;
 

    Entries := TStringList.Create;
 

    Reg := TRegistry.Create;

    Reg.RootKey := HKEY_LOCAL_MACHINE;

    Reg.OpenKey('\Software\Sequest Technologies\Tier\EdiBuilder', False );

    Reg.GetKeyNames( Entries );
 

    for iIndex := 0 to Entries.count -1 do

    begin

         if (Reg.OpenKey('\Software\Sequest Technologies\Tier\EdiBuilder\'+ Entries[iIndex], False ) ) then

         begin

              if ( Reg.ValueExists('PayorID') ) then

              begin

                   if ( PayorID = Reg.ReadInteger('PayorID') ) then

                   begin

                       Result := Reg.ReadString('OutputDir');

                       Reg.CloseKey;

                       exit;

                   end;

              end;

         end;

    end;
 

    Entries.Free;
 

    Reg.CloseKey;
 

end;
 
 

procedure TForm1.DirBtnClick(Sender: TObject);

var ExpandedName : String;

begin

  with OpenDialog1 do begin

    OpenDialog1.Title := 'Select Output Directory';

    ExpandedName := OutDirEdit.Text;

    InitialDir := ExpandedName;

    Filename := '(this folder)';
 

    if Execute then

    begin

      OutDirEdit.Text := ExtractFilePath(FileName);

      EDIOutputDir := OutDirEdit.Text;

    end;
 

  end;
 

end;
 
 

{Can only be used with Delphi label

procedure TForm1.setMinMax(AMin : Integer; AMax : Integer);

begin

  ProgBar.Min := AMin;

  ProgBar.Max := AMax;

end;
 

procedure TForm1.UpdatePrg;

begin

  ProgBar.Position := ProgBar.Position + 1;

  Application.ProcessMessages;

end;

}
 
 
 

end.

Open in new window

DebugEdi.TXT
0
Comment
Question by:SequestTech
2 Comments
 
LVL 21

Accepted Solution

by:
ziolko earned 125 total points
ID: 22611777
my first guess would be that there's error initializing ADO, make sure you use appropriate provider and latest MDAC is installed

ziolko.
0
 
LVL 14

Assisted Solution

by:SteveBay
SteveBay earned 125 total points
ID: 22614414
Some thought:

For starters I woud  avoid having a TDataSet.Open that was not inside of a try/except block.
i.e:
try
  Qry.Open;
except
  on e : exception do begin
    ShowMessage('Error Opening Qry:' + e.exception);
    Result := False ; // on anything wlse that makes sence here
end;

This will help you determine which call is raising the exception.

Second: While the error message is not quite consistent with this - I would set Qry.ParamCheck = False;  just to be sure that you are not getting erroneous parameters placed in your Qry.SQL if BatchKey were to contain a ":"


0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now