2014-12-05 96 views
0

我遇到問題。我必須編寫一個使用OLEDB連接MS Access(.mdb文件)的ABAP應用程序,但我的代碼無法連接。我有SY-SUBRC = 2。我該如何解決它?我如何在MS Access中檢查SQL中的User ID=應該是什麼?SAP ABAP - 無法使用OLEDB與MS Access(.mdb文件)連接

INCLUDE ole2incl. 

DATA: con   TYPE ole2_object, 
     rec   TYPE ole2_object. 

DATA SQL(1023). 
DATA: BEGIN OF SPL OCCURS 0, 
VAL(1023), 
END OF SPL. 

DATA: BEGIN OF I1 OCCURS 0, 
F1(10), 
F2 TYPE I, 
END OF I1. 

IF con-header IS INITIAL OR con-handle = -1. 
    CREATE OBJECT con 'ADODB.Connection'. 
    IF NOT sy-subrc = 0. 
    EXIT. 
    ENDIF. 
    CREATE OBJECT REC 'ADODB.Recordset'. 
    IF NOT sy-subrc = 0. 
    EXIT. 
    ENDIF. 
ENDIF. 

*MDB connetion infomations 
CONCATENATE 'Provider=' '''Microsoft.Jet.OLEDB.4.0''' ';' 
INTO SQL. 
CONCATENATE SQL 'Password=' '''platnikbcc''' ';' 
INTO SQL. 
CONCATENATE SQL 'User ID=' '''Admin''' ';' 
INTO SQL. 
CONCATENATE SQL 'Data Source=' '''D:\Platnik.mdb''' ';' 
INTO SQL. 
CONCATENATE SQL 'Mode=' '''Share Deny None''' 
INTO SQL. 



*MDB connection 
CALL METHOD OF CON 'Open' 
EXPORTING #1 = SQL. 

*Query run 
*SY-SUBRC still equals 0 
CALL METHOD OF REC 'Open' 
EXPORTING #1 = SQL 
      #2 = CON 
      #3 = '1'. 
*SY-SUBRC = 2 FROM HERE 

*Query (select) statement ... 
SQL = 'select * from UBEZP_IDENT'. 

*Query run 
CALL METHOD OF REC 'Open' 
EXPORTING #1 = SQL 
      #2 = CON 
      #3 = '1'. 

*Selecting MDB record into SAP internal table 
DO. 
    CALL METHOD OF REC 'getstring' = SQL 
    EXPORTING #1 = '2' "Do not modify! 
      #2 = 1 "Do not modify! 
      #3 = '|' "Do not modify! 
      #4 = '|'. "Do not modify! 
    IF sy-SUBRC EQ 0. 
    REFRESH SPL. CLEAR SPL. 
    SPLIT SQL AT '|' INTO TABLE SPL. 
    LOOP AT SPL. 
     CASE SY-TABIX. 
     WHEN 1. 
      I1-F1 = SPL-VAL. 
     WHEN OTHERS. 
      I1-F2 = SPL-VAL. 
     ENDCASE. 
    ENDLOOP. 
    APPEND I1. CLEAR I1. 
    ELSE. 
    EXIT. 
    ENDIF. 
ENDDO. 

*Result writing... 
LOOP AT I1. 
    WRITE: AT /1(10) I1-F1, 
     AT (10) I1-F2. 
ENDLOOP. 

*Connetion close & destroy 
FREE OBJECT con. 
FREE OBJECT rec. 
+1

這是密碼嗎?哎呀... – vwegert 2014-12-05 14:58:47

+0

沒有問題。這是本地安裝,用於無敏感數據的測試。 :P – Zashi 2014-12-08 07:45:39

+0

我很確定SY-SUBRC等於2,因爲mdb文件有密碼。我更改了代碼,並且可以在不使用密碼的情況下連接到mdb文件。 MDB連接 - 這是行不通的: 'CONCATENATE'Provider = Microsoft.Jet.OLEDB.4.0;' 'Data Source = D:\ Platnik2.mdb;' '密碼=' 'platnikbcc' ';' INTO sql.' – Zashi 2014-12-08 10:22:16

回答

0

我可以自己回答! :)

我改變了代碼。我不寫這裏關於管理從MDB文件下載的數據。

INCLUDE ole2incl. 
TYPE-POOLS ole2. 
DATA: conn TYPE ole2_object, 
     rsdb TYPE ole2_object, 
     sql TYPE c LENGTH 1024. 

*You need here something to manage downloaded data! 

*Create ADODB Object: 
START-OF-SELECTION. 
    CREATE OBJECT conn 'ADODB.Connection'. 
    CREATE OBJECT rsdb 'ADODB.Recordset'. 

*Set connection and run query: 
*MDB Connetion infomations 
    CONCATENATE 'Provider=Microsoft.Jet.OLEDB.4.0;' 
    'Data Source=D:\File.mdb;' 'Jet OLEDB:Database Password=''[email protected]$w0rD'';' 
    INTO sql. 

    CALL METHOD OF conn 'Open' EXPORTING #1 = sql. 

*Query Statement ... 
    sql = 'SELECT * FROM EXAMPLE'. 

*Run Query 
    CALL METHOD OF rsdb 'OPEN' 
    EXPORTING 
     #1 = sql 
     #2 = conn 
     #3 = '1'. 

*Save records 
    DO. 
    CALL METHOD OF rsdb 'getstring' = sql 
    EXPORTING #1 = '2' "Do not modify! 
    #2 = 1 "Do not modify! 
    #3 = ' ' "Do not modify! 
    #4 = ' '. "Do not modify! 
    IF sy-subrc EQ 0. 
    *Save data into (for example) internal table. 
    ELSE. 
     EXIT. 
    ENDIF. 
    ENDDO. 



*Manage your data, display, whatever