এক্সেল ভিবিএ: এসকিউএল কোয়েরি ত্রুটি পরিচালনা করে


4

অ্যাক্সেস ডাটাবেস থেকে তথ্য পাওয়ার জন্য আমি অ্যাক্সেস ২013 এ এসকিউএল ব্যবহার করতে পারি এবং এটি সরাসরি একটি সংযোগে এসকিউএল ব্যবহার করে কাজ করে, কিন্তু এখন আমি এটি পরিবর্তে ভিবিএ থেকে চালাতে চাই যাতে আমি এসকিউএলে কিছু ভেরিয়েবল ব্যবহার করতে পারি।

আমি এই লিঙ্কটি খুঁজে পেয়েছি, এটি সংশোধন করেছি এবং এটি কিছু সহজ এসকিউএল বিবৃতিতে কাজ করে, কিন্তু অন্যদের নয়।

ভিবিএ সঙ্গে এসকিউএল প্রশ্নের চালান এবং তথ্য সঙ্গে শীট পূরণ করুন

আমি একটি ত্রুটি পেতে:

রান টাইম ত্রুটি -2147217883 (80040e25) নতুন হ্যান্ডেলগুলি পাওয়ার আগে সারি হ্যান্ডলগুলি অবশ্যই মুক্তি পেতে হবে।

আমি এই ত্রুটির উপর অনেক অনুসন্ধান করেছি এবং বিভিন্ন জিনিস চেষ্টা করেছি, কিন্তু অবশ্যই বুঝতে পারছি না। আমি SQL দীর্ঘ / জটিল জানি, কিন্তু এটি অ্যাক্সেস এবং এক্সেল সরাসরি কাজ করে।

এখানে বর্তমান কোড:

Sub Get_SQLData()
'modified from from https://superuser.com/questions/813077/execute-sql-query-with-vba-and-fill-sheet-with-data
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String

strFile = "C:\mydb.accdb"

strCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFile

Set cn = CreateObject("ADODB.Connection")
cn.Open strCon

'JAJ set my SQL RAW first
strSQL = "SELECT RAWDATA_Incidents.ID, RAWDATA_Incidents.[Incident Number], RAWDATA_Incidents.[Categorization Tier 1], RAWDATA_Incidents.[Categorization Tier 2], RAWDATA_Incidents.[Categorization Tier 3], RAWDATA_Incidents.Priority, RAWDATA_Incidents.Urgency, RAWDATA_Incidents.Impact, RAWDATA_Incidents.[Reported Date], RAWDATA_Incidents.[Service Type], RAWDATA_Incidents.[Closure Product Category Tier1], RAWDATA_Incidents.[Closure Product Category Tier2], RAWDATA_Incidents.[Closure Product Category Tier3], ClosureProductName.ClosureProductName, RAWDATA_Incidents.Status, RAWDATA_Incidents.[Closed Date], RAWDATA_Incidents.[Product Name], OpsCatTreeFaultMode.FaultMode, BusinessService.MMServiceID, ([RAWDATA_Incidents]![Closed Date]-[RAWDATA_Incidents]![Reported Date])*1440 AS Expr2, IIf([RAWDATA_Incidents]![Priority]='Critical' Or [RAWDATA_Incidents]![Priority]='High',788,394) AS Expr3, BusinessService.Name, BSDependsOnAC.MMServiceID, CI.CIName, AccessChannel.Name, BusinessService.ID " _
    & "FROM OpsCatTreeFaultMode INNER JOIN (RAWDATA_Incidents INNER JOIN (CI INNER JOIN ((ITSystemService INNER JOIN (BusinessService INNER JOIN ((AccessChannel INNER JOIN ACDependsOnITSS ON AccessChannel.ACID = ACDependsOnITSS.ACID.Value) INNER JOIN BSDependsOnAC ON AccessChannel.ACID = BSDependsOnAC.ACID.Value) ON BusinessService.ID = BSDependsOnAC.MMServiceID.Value) ON (ITSystemService.ITSSID = ACDependsOnITSS.ITSSID.Value) AND (ITSystemService.ITSSID = ACDependsOnITSS.ITSSID.Value)) INNER JOIN ClosureProductName ON ITSystemService.ITSSID = ClosureProductName.ITSS.Value) ON CI.CIID = ITSystemService.CIID) ON RAWDATA_Incidents.[Closure Product Name] = ClosureProductName.ClosureProductName) ON OpsCatTreeFaultMode.OpsCatTreeName = RAWDATA_Incidents.[Categorization Tier 3]"

Set rs = CreateObject("ADODB.RECORDSET")
rs.activeconnection = cn

rs.Open strSQL

Sheet1.Range("A1").CopyFromRecordset rs     ' fails here  - gives handles error.

rs.Close
cn.Close
Set cn = Nothing

End Sub

কোন সাহায্য প্রশংসা করা হবে।


1
কতক্ষণ পর্যন্ত ত্রুটি বার্তা নিক্ষেপ করা হয়? এটা কি সময় কাটানোর সময় হতে পারে?
Dave

1
যদি আপনি লাইনে একটি ব্রেকপয়েন্ট রাখেন তবে এটি ব্যর্থ হয় এবং RS এ একটি ঘড়ি যুক্ত করুন, কি আসলে সেই সময়ে প্রত্যাশিত ডেটা সহ RS হয়?
Ƭᴇcʜιᴇ007

1
আপনি পারে rs.requery পরে rs.Open strSQL আমি আত্মবিশ্বাসী না হলেও এটি সাহায্য করবে
Dave

এক্সেল কি সংস্করণ এবং কত তথ্য ফিরে আসতে পারে
datatoo

এখন পর্যন্ত সব পয়েন্ট উত্তর দিতে। অ্যাক্সেস এবং এক্সেল ব্যবহার করা হচ্ছে। ত্রুটিটি 10 ​​সেকেন্ডে ফেলে দেওয়া হয় (একই সময় ক্যোয়ারী সাধারণত এক্সেলের রিফ্রেশের সময় চালানোর সময় লাগে)। প্রশ্ন আসলে অ্যাক্সেস চালানোর জন্য লাগে (15 সেকেন্ড)। Rs.requery চেষ্টা - কোন পরিবর্তন। 66040 সারি, ২6 টি কলাম বর্ণিত আয় হিসাবে প্রশ্ন। আমি যেখানে শুধুমাত্র 93 সারি ফেরত যেখানে একটি ধারা সঙ্গে হ্রাস করার চেষ্টা, এখনও ব্যর্থ হয়। আমি ব্রেকপন্ট যোগ করেছি - আমি দেখছি যে এটি ক্ষেত্রের নামগুলি ফেরত দিচ্ছে না, এটি মানগুলি ফেরত দিচ্ছে কিনা তা দেখতে হবে। এতদূর ধন্যবাদ, অন্য কোন চিন্তা বা ধারনা?
Jim J

উত্তর:


0

আমি মনে করি আপনি কিছু অকার্যকর হতে পারে:

Sub Get_SQLData()

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String

strFile = "C:\mydb.accdb"
strCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFile
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon  

'JAJ set my SQL RAW first 
strSQL = "..."

Set rs = CreateObject("ADODB.RECORDSET")
rs.activeconnection = cn
rs.Open strSQL

Sheet1.Range("A1").CopyFromRecordset rs     ' fails here  - gives handles error.
rs.Close
cn.Close

Set cn = Nothing
End Sub

আপনার সমস্যা এখানে শুরু হয়:

rs.activeconnection = cn

আপনি বলেছেন

Set cn = CreateObject("ADODB.Connection")
cn.Open strCon 

আপনি ইতিমধ্যে তৈরি এবং খোলা একটি বস্তুর, আরএস সঙ্গে ইঙ্গিত করা হয়। পরিবর্তে এটি ক্লোন চেষ্টা করার পরিবর্তে একটি নতুন সংযোগ তাত্ক্ষণিক। আপনি এখানে একটি বস্তুর দিকে নির্দেশ করছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.