Доброго вренени суток уважаемые.
запросом через ADODB получаю recordset из MS SQL сервера, далее при передаче данных из рекордсета в массив получаю вот это - <Variable uses an Automation type not supported in Visual Basic>, вот на этотм этапе imprep = rs.GetRows, рекордсет не пустой однозначно, записи в нем есть.
грешу на сам SQL запрос, так как это не превый раз, у меня с десяток подобных запросов работают как часы .
update:
подсунул другой запрос - все работае, значит все таки загвоздка в самом запросе ,что то в возвращенном результате не нравится екселю, и не хочет его в масссив переносить
запросом через ADODB получаю recordset из MS SQL сервера, далее при передаче данных из рекордсета в массив получаю вот это - <Variable uses an Automation type not supported in Visual Basic>, вот на этотм этапе imprep = rs.GetRows, рекордсет не пустой однозначно, записи в нем есть.
грешу на сам SQL запрос, так как это не превый раз, у меня с десяток подобных запросов работают как часы .
Код |
---|
Function imprep(x) Set conn = New ADODB.connection Set rs = New ADODB.Recordset sSql = "SELECT mseg.[EBELN] [PO],marm.[EAN11] [EAN IT],lips.[CHARG] [Lot Number],format(mch1.[ERSDA_SIMP_DT],'yyyy-MM-dd') [Production Date],format(mch1.[VFDAT_SIMP_DT],'yyyy-MM-dd') [Expiration Date], CASE WHEN mseg.[BWART]='102' " & _ "THEN cast(concat('-',lips.[LFIMG]*marm.[UMREN]) AS numeric) else lips.[LFIMG]*marm.[UMREN] END [IT QTY],mkpf.[BKTXT] [Customs Declaration Number],mkpf.[BKTXT] [Import Date],( SELECT [LANDA] FROM LIB_F6P_RTP.sap.[T005] t005 WHERE( " & _ "t005.[MANDT]='430') AND (t005.[LAND1]=lfa1.[LAND1])) [Country Code Import From],( SELECT [LANDA] FROM LIB_F6P_RTP.sap.[T005] t005 WHERE(t005.[MANDT]='430') AND(t005.[LAND1]=marc.[HERKL])) [Country Code Of Origin],'zzz' [sep],mseg. " & _ "[BUDAT_MKPF_SIMP_DT] [Posting date],mseg.[CPUTM_MKPF_SIMP_TM] [Time of entry],mseg.[MBLNR] [Material Document],mseg.[ERFME] [Entry UOM],mseg.[MEINS][Base UOM],marm.[UMREZ] [UMREZ Numerator],marm.[UMREN] [UMREN Denominator], " & _ "mseg.[BWART] [mvmtyp],ekko.[UNSEZ] [Delivery],mseg.[XBLNR_MKPF] [Invoice],mseg.[MATNR] [MSEG matnr],lips.[LFIMG] [LIPS QTY] FROM LIB_F6P_RTP.sap.[MSEG] mseg INNER JOIN LIB_F6P_RTP.sap.[MKPF] mkpf ON mkpf.[MANDT]=mseg.[MANDT] AND mkpf. " & _ "[MBLNR]=mseg.[MBLNR] INNER JOIN LIB_F6P_RTP.sap.[MARM] marm ON marm.[MANDT]=mkpf.[MANDT] AND marm.[MANDT]=mseg.[MANDT] AND marm.[MATNR]=mseg.[MATNR] INNER JOIN LIB_F6P_RTP.sap.[MARC] marc ON marc.[MANDT]=marm.[MANDT] AND marc.[WERKS]= " & _ "mseg.[WERKS] AND marc.[MATNR]=marm.[MATNR] AND mseg.[MATNR]=marc.[MATNR] INNER JOIN LIB_F6P_RTP.sap.[MARA] mara ON mara.[MANDT]=marc.[MANDT] AND mara.[MATNR]=mseg.[MATNR] AND marm.[MANDT]=mara.[MANDT] AND marc.[MATNR]=mara.[MATNR] AND " & _ "marm.[MATNR]=mara.[MATNR] INNER JOIN LIB_F6P_RTP.sap.[LFA1] lfa1 ON lfa1.[MANDT]=mseg.[MANDT] AND lfa1.[LIFNR]=mseg.[LIFNR] AND mara.[MANDT]=lfa1.[MANDT] AND marc.[MANDT]=lfa1.[MANDT] AND marm.[MANDT]=lfa1.[MANDT] AND mkpf. " & _ "[MANDT]=lfa1.[MANDT] INNER JOIN LIB_F6P_RTP.sap.[T005] t005 ON t005.[MANDT]=lfa1.[MANDT] AND t005.[LAND1]=lfa1.[LAND1] INNER JOIN LIB_F6P_RTP.sap.[EKKO] ekko ON ekko.[MANDT]=mseg.[MANDT] AND ekko.[EBELN]=mseg.[EBELN] INNER JOIN " & _ "LIB_F6P_RTP.sap.[LIPS] lips ON lips.[MANDT]=mseg.[MANDT] AND lips.[VBELN]=ekko.[UNSEZ] AND lips.[MATNR]=mseg.[MATNR] AND mara.[MANDT]=lips.[MANDT] AND mara.[MATNR]=lips.[MATNR] AND marc.[MANDT]=lips.[MANDT] AND marc.[MATNR]=lips. " & _ "[MATNR] INNER JOIN LIB_F6P_RTP.sap.[MCH1] mch1 ON mch1.[MANDT] COLLATE SQL_Latin1_General_CP1_CI_AS=mseg.[MANDT] AND mch1.[MANDT] COLLATE SQL_Latin1_General_CP1_CI_AS=mseg.[MANDT] AND mch1.[MATNR] COLLATE " & _ "SQL_Latin1_General_CP1_CI_AS=lips.[MATNR] AND mch1.[CHARG] COLLATE SQL_Latin1_General_CP1_CI_AS=lips.[CHARG] WHERE(mseg.[MANDT]='430') AND (mseg.[BWART] IN('101','102')) AND (mseg.[WERKS]='2751') AND (marm.[MEINH]='IT') AND " & _ "(mara.[MTART]='FERT') AND mseg.[MATNR] IN " & x & " AND (lips.[CHARG]<>'') AND (mseg.[BUDAT_MKPF]>='20201001' AND mseg.[BUDAT_MKPF]<='20201101') ORDER BY [Posting date], [Time of entry];" conn.Open ConnStr Set rs = conn.Execute(sSql) If Not rs.EOF Then imprep = rs.GetRows ' Здесь ошибка rs.Close Else MsgBox "Error: No Records returned.", vbCritical imprep = Empty End If If CBool(conn.State And adStateOpen) Then conn.Close Set conn = Nothing Set rs = Nothing End Function |
update:
подсунул другой запрос - все работае, значит все таки загвоздка в самом запросе ,что то в возвращенном результате не нравится екселю, и не хочет его в масссив переносить