इतने सारे मापदंडों के साथ, समस्या कोई भी . हो सकती है बेमेल डेटा प्रकार, डेटा लंबाई, आदि सहित एक आइटम। यहां डिबगिंग के रूप में जानी जाने वाली कला का प्रयोग किया जाना चाहिए।
-
तालिका के डेटा प्रकारों की सावधानीपूर्वक जाँच करें (
T_SAP_ZSSTABL_NEW
) Oracle में डेटा प्रकार हो सकते हैं जो तुरंत अनुवाद योग्य नहीं होते हैं एडीओ प्रकार जैसेBLOB
,CLOB
,BFILE
, उच्च परिशुद्धता संख्यात्मक प्रकार, अधिकतम वर्ण प्रकार, या एक्सटेंशन प्रकार (XML, मीडिया, आदि)। -
डेटा की लंबाई बढ़ाने का प्रयास करें (या पैरामीटर असाइनमेंट में खाली छोड़ दें):
Set MyParameter = cmd.CreateParameter("MATNR", adVarChar, adParamInput, 100, POSNR) Set MyParameter = cmd.CreateParameter("MATNR", adVarChar, adParamInput, , POSNR)
यदि आवश्यक हो, तो VBA के
Len()
. के साथ परिवर्तनीय लंबाई की जांच करें पैरामीटर जोड़ने से पहले उपयोगकर्ता चेतावनी बढ़ाने के लिए। -
SELECT
चलाने का प्रयास करें परिणामों की एक पंक्ति वापस करने के लिए समान पैरामीटर वाले क्वेरी का संस्करण। यदि वही त्रुटि होती है, तो पहले परम से शुरू करें, फिर समस्याग्रस्त वस्तु को अलग करने के लिए क्रमिक रूप से दूसरा या 10 का बैच जोड़ें।SELECT ? AS TSZ_CHARG_PARAM, ? AS TSZ_MATNR_PARAM, ? AS TSZ_MAKTX_PARAM, ... FROM T_SAP_ZSSTABL_NEW WHERE TSZ_VBELN = ? AND TSZ_POSNR = ?
-
स्थिरता के लिए रिफैक्टर कोड, जैसा कि आपने एक को याद किया होगा या गलत तरीके से संरेखित किया होगा जो कई दोहराव वाली लाइनों के साथ हो सकता है। हमेशा DRY (डोंट रिपीट योरसेल्फ) कोड का लक्ष्य रखें। एक विकल्प शब्दकोश 160+ चर या नामित श्रेणियों के बजाय कुंजी/मान जोड़े के साथ:
Dim key As Variant Dim paramDict As Object Set paramDict = CreateObject("Scripting.Dictionary") For ... paramDict.Add "KeyX", "ValueX" Next ... ... With cmd .ActiveConnection = myOracleConn .CommandText = strSQL .CommandType = adCmdText For Each key In paramDict.Keys .Parameters.Append .CreateParameter(key, adVarChar, adParamInput, , paramDict(key)) Next key .Execute End With
यदि आपके पास मिश्रित प्रकार हैं, तो प्रत्येक प्रकार के लिए अलग-अलग शब्दकोश बनाने का प्रयास करें और पैरामीटर जोड़ने के क्रम में उन्हें पुनरावृत्त करें। और
UPDATE
समायोजित करें एक दूसरे के पास एक ही प्रकार के साथ। याद रखेंUPDATE
तालिका परिभाषा में स्तंभों के क्रम का पालन करने की आवश्यकता नहीं है। -
यदि संभव हो (या दीर्घकालिक समाधान), TSZ . की विस्तृत प्रारूप तालिका को फिर से डिज़ाइन करने पर विचार करें कॉलम लंबे प्रारूप के सामान्यीकृत रूप में।
ID POSNR VBELN Indicator Value # XXX XXX CHARG XXX # XXX XXX MATNR XXX # XXX XXX MAKTX XXX ...
हालांकि यह प्रत्येक विशिष्ट पहचानकर्ता के लिए 167 पंक्तियों को जोड़ देगा, डेटाबेस डिज़ाइन पंक्तियों में स्तंभों की तुलना में बहुत सस्ता है और इसलिए क्वेरी करना आसान होगा, और डेटा संग्रहण अधिक स्केलेबल, और रखरखाव अधिक कुशल होगा। उदाहरण के लिए, एक नए मीट्रिक को सभी मेटा जानकारी के साथ एक नए परिभाषित कॉलम की आवश्यकता नहीं होती है, बल्कि केवल एक नई पंक्ति की आवश्यकता होती है। और Oracle के
PIVOT
. के साथ आप आसानी से विस्तृत प्रारूप को फिर से प्रस्तुत कर सकते हैं।
कुल मिलाकर, डेटाबेस कनेक्शन जैसे एपीआई एक्सटेंशन से उत्पन्न रनटाइम त्रुटि को डीबग करने का कोई एकल, स्पष्ट तरीका नहीं है। एसक्यूएल सिंटैक्स या वीबीए ऑब्जेक्ट रेफरेंसिंग को आसानी से संभाला जा सकता है लेकिन डेटा-विशिष्ट मुद्दों को समग्र प्रक्रिया के माध्यम से रचनात्मक रूप से खोदने की आवश्यकता होती है।