全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3661
推到 Plurk!
推到 Facebook!

開發console程式出現EOleSysError的錯誤訊息,該如何解決?

尚未結案
鬼太郎
一般會員


發表:2
回覆:0
積分:0
註冊:2004-08-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-12-01 20:03:52 IP:220.130.xxx.xxx 未訂閱
console程式內使用了ADO與NMSMTP元件,編譯及連結都沒錯誤,但執行時會出現錯誤訊息 我的程式碼如下
//------------------------------------------------------------------
#include 
#include 
#include 
#include     #pragma hdrstop    //------------------------------------------------------------------
TNMSMTP *nmsmtp1 = new TNMSMTP(NULL);
TADOConnection *ADOConn_Emp = new TADOConnection(NULL);     
TADOConnection *ADOConn_iServer = new TADOConnection(NULL);    
TADOConnection *ADOConn_a = new TADOConnection(NULL);        
TADOQuery *ADOQ_Rest = new TADOQuery(NULL);                    
TADOQuery *ADOQ_iServer = new TADOQuery(NULL);                 
TADOQuery *ADOQ_Atten = new TADOQuery(NULL);                   
//------------------------------------------------------------------
void set_mail()
{
   nmsmtp1->Host = "192.168.1.200";
   nmsmtp1->UserID = "John";
   nmsmtp1->Charset = CHINESEBIG5_CHARSET;
   nmsmtp1->Connect();
   nmsmtp1->SubType = mtHtml;
}    void set_database()
{       //設定有關資料庫方面的設定
   ADOConn_Emp->Name = "ADOConn_Emp";
   ADOConn_Emp->LoginPrompt = false;
   ADOConn_Emp->ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=Employee;Extended Properties=\"DSN=Employee;UID=;SourceDB=C:\DATABASE\EMPLOYEE\EMPLOYEE.DBC;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;\"";
   ADOConn_Emp->DefaultDatabase = "C:\\DATABASE\\EMPLOYEE\\EMPLOYEE.DBC";       ADOConn_iServer->Name = "ADOConn_iServer";
   ADOConn_iServer->LoginPrompt = false;
   ADOConn_iServer->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\john\\My Documents\\acclog.mdb;Persist Security Info=False";
   ADOConn_iServer->DefaultDatabase = "C:\\Documents and Settings\\john\\My Documents\\acclog";       ADOConn_a->Name = "ADOConn_a";
   ADOConn_a->LoginPrompt = false;
   ADOConn_a->ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=service;Extended Properties=\"DSN=service;DESC=MySQL ODBC 3.51 Driver DSN;DATABASE=eta;SERVER=service.eta.com.tw;UID=service;PASSWORD=eta2003;PORT=3306;OPTION=3;STMT=;\";Initial Catalog=service";
   
   
   ADOQ_Rest->Connection = ADOConn_Emp;
   ADOQ_Rest->Active = false;
   ADOQ_Rest->SQL->Add("select * from 請假單 where 員工編號 = :num and 起始日期 >= :date1 and 起始日期 <= :date2");
   
   ADOQ_iServer->Connection = ADOConn_iServer;
   ADOQ_iServer->Active = false;
   ADOQ_iServer->SQL->Add("select EmployeeID, LastName, Department, TakeDate, LeaveDate, Manager, Rotation, EmpStatus, TakeTime, LeaveTime from Employee order by EmpStatus desc, Department, EmployeeID");
   ADOQ_iServer->ExecSQL();
   ADOQ_iServer->Active = true;
   
   ADOQ_Atten->Connection = ADOConn_a;
   ADOQ_Atten->Active = false;
   ADOQ_Atten->SQL->Add("select * from attendance where ad_Sn = :emp_id and ad_Date = :date");    }
//------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
   int t2;
   TDate date3;       //設定有關電子郵件方面的設定
   set_mail();
   //設定有關資料庫方面的設定
   set_database();       //依照Employee內有的員工去做檢查
   for ( int i1 = 0 ; i1 < ADOQ_iServer->RecordCount ; i1++ )
   {
      //取出員工編號在這段期間的請假紀錄
      ADOQ_Rest->Active = false;
      ADOQ_Rest->Parameters->Items[0]->Value = "000110";
      ADOQ_Rest->Parameters->Items[1]->Value = StrToDate("2005/11/1");
      ADOQ_Rest->Parameters->Items[2]->Value = StrToDate("2005/11/30");
      ADOQ_Rest->ExecSQL();
      ADOQ_Rest->Active = true;
      //test1.set_rest(ADOQ_Rest);          //從設定的天數開始,一天一天作檢查
      for ( date3=StrToDate("2005/11/1") ; date3 <= StrToDate("2005/11/30") ; date3++ )
      {
         //取出當天(date3)的進出紀錄,取出第一筆與最後一筆的時間
         ADOQ_Atten->Active = false;
         ADOQ_Atten->Parameters->Items[0]->Value = "0110";
         ADOQ_Atten->Parameters->Items[1]->Value = date3.FormatString("yyyymmdd");
         ADOQ_Atten->ExecSQL();
         ADOQ_Atten->Active = true;
         cout << ADOQ_Atten->Fields->Fields[2]->AsString.c_str() << endl;
         ADOQ_Atten->Next();
      }
   }
   cin >> t2;
   return 0;
}
//-------------------------------------------------------------------
liangng
一般會員


發表:1
回覆:3
積分:0
註冊:2011-12-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-12-06 00:08:23 IP:114.27.xxx.xxx 訂閱
最近我也是遇到同樣的問題,查到cocreateinstance回傳值是有問題的,自己的結論是console的程式無法提供這方面的實作
因為寫cgi時也是一樣
Victor4022
中階會員


發表:0
回覆:76
積分:90
註冊:2011-02-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-12-06 06:52:01 IP:122.126.xxx.xxx 訂閱
您好,小弟在 Delphi 7 傳寫的 console 程式也曾碰過此問題,後來是在 .dpr 專案檔內引用了 "ActiveX"這個內建的 pas 碼,然後在程式執行 .dpr 的下方一開始加入 ActiveX.CoInitialize,離開程式前以 finally 做 ActiveX.CoUninitialize ,就解決此問題。 供您參考看看 :)
liangng
一般會員


發表:1
回覆:3
積分:0
註冊:2011-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-12-06 11:01:55 IP:114.27.xxx.xxx 訂閱
感謝你的回覆,解除了我的困惑,按照你的方法,另外還有一個問題就是執行到ActiveX.CoUninitialize(我放在最後一行),會出現ole32.dll的存取例外 
===================引 用 Victor4022 文 章===================
您好,小弟在 Delphi 7 傳寫的 console 程式也曾碰過此問題,後來是在 .dpr 專案檔內引用了 "ActiveX"這個內建的 pas 碼,然後在程式執行 .dpr 的下方一開始加入 ActiveX.CoInitialize,離開程式前以 finally 做 ActiveX.CoUninitialize ,就解決此問題。 供您參考看看 :)
系統時間:2024-04-19 10:16:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!