2010-11-16 16 views
8

से एक्सेल में कॉलम नाम खींचना मैं Excel SQL से डेटा खींचने के लिए Excel का उपयोग कर रहा हूं। मैंने दूसरे SO प्रश्न से कोड का उपयोग किया और यह ठीक काम करता है। अब मैं वास्तविक तालिका के अलावा तालिका से कॉलम नामों को खींचना चाहता हूं। मुझे पता चला कि मैं प्रत्येक एफएलडी लूप के लिए नामों का उपयोग कर सकता हूं। हालांकि अभी भी एक्सेल में एक पंक्ति में क्षैतिज रूप से पॉप्युलेट करने का मुद्दा है क्योंकि कॉलम की संख्या बदल सकती है - इसलिए मुझे लगता है कि मुझे प्रत्येक लूप के लिए या कुछ इसी तरह की आवश्यकता होगी।SQL क्वेरी

Sub GetDataFromADO() 

'Declare variables' 
    Set objMyConn = New ADODB.Connection 
    Set objMyCmd = New ADODB.Command 
    Set objMyRecordset = New ADODB.Recordset 

'Open Connection' 
    objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;" 
    objMyConn.Open 

'Set and Excecute SQL Command' 
    Set objMyCmd.ActiveConnection = objMyConn 
    objMyCmd.CommandText = "select * from myTable" 
    objMyCmd.CommandType = adCmdText 
    objMyCmd.Execute 

'Loop Names' 
    ' WHAT TO DO HERE????' 

'Open Recordset' 
    Set objMyRecordset.ActiveConnection = objMyConn 
    objMyRecordset.Open objMyCmd 

'Copy Data to Excel' 
    ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset) 

End Sub 
+0

क्या आप शीर्षकों को डेटा के साथ लाइन नहीं करना चाहते हैं? डेटा ए 1 में शुरू होता है, लेकिन ऐसा लगता है कि आपने हेडर रेंज ए 4 पर सेट की है। –

+0

हाँ आप सही हैं - मेरे हिस्से पर खराब प्रतिलिपि और पेस्ट करें। – firedrawndagger

उत्तर

11

ठीक है तो मैंने इसे 4 प्रयासों के बाद समझ लिया, यहां लूप के लिए कोड है।

'Loop' 
Dim FieldRange As Range 
Set FieldRange = Range("A4") 
Set TableColumns = Range("A4:H4") 
x = 1 

Range("A4").Select 

For Each fld in objMyRecordset.Fields 
     ActiveCell.Value = fld.Name 
     ActiveCell.Offset(0, x).Select 
     x = x + 1 'tick iterator 
Next 

ActiveSheet.Range("A5").CopyFromRecordset objMyRecordset 
Range("A4").Select 
+1

आपको 'रेंज ("ए 4") जैसे सेल उपयोग का चयन करने की आवश्यकता नहीं है। ऑफसेट (0, x) .value = fld.Name' –

19

मेरे सामान्य कोड बहुत समान है:

For intColIndex = 0 To objMyRecordset.Fields.Count - 1 
    Range("A4").Offset(0, intColIndex).Value = objMyRecordset.Fields(intColIndex).Name 
Next 
+0

मुझे आपके समाधान की "कमी" पसंद है। मैंने हेडर्स को बोल्ड में सेट करने के लिए बस थोड़ा सा विस्तार किया। –

+1

मैं ऐसे समाधान की अनुपस्थिति में परेशान हूं जो लूप का सहारा नहीं लेता है। – mvbentes

6

यह सुपर सरल बनाने के लिए,

For i = 0 To r.Fields.Count - 1 
     Sheet1.Cells(1, i + 1) = r.Fields(i).Name 
    Next i 
3

कुछ इस तरह (पत्रक 1 का उपयोग करने और recordset r) तुम सिर्फ सेट कर सकते हैं कर अपने "एक्स" वैरिएबल 0 और फिर कुछ ऐसा करें:

x = 0 

For Each Field In RS.Fields 'RS being my Recordset variable 
    Range("A3").Offset(0, x).Value = Field.Name 
    x = x + 1 
Next Field 

और इससे इसे पढ़ने में थोड़ा आसान लगेगा ... :)