NisHera
9 years agoValued Contributor
Python SQLServer Query -IDispatchIndexedPropertyWrapper' object is not callable
I have following query (allmost same as in support site)
def TestSQL_ADO2(): # Creates ADO connection aCon = ADO.CreateConnection() # Sets up the connection parameters #aCon.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=NameOfMyDSN" aCon.ConnectionString = 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MyDatabase;Data Source=LocalMachine\SQLEXPRESS2012' # Opens the connection aCon.Open() # Creates a command and specifies its parameters aCmd = ADO.CreateCommand() aCmd.ActiveConnection = aCon # Connection aCmd.CommandType = adCmdTable # Command type aCmd.CommandText = "titles_tab" # Table name # Opens a recordset aRecSet = aCmd.Execute() aRecSet.MoveFirst() # Obtains field names s = "" for i in range (0, aRecSet.Fields.Count): s = s + aRecSet.Fields.Item(i).Name + "\t" s = s + "\r\n" # Scans recordset while not aRecSet.EOF: for i in range (0, aRecSet.Fields.Count): s = s + aRecSet.Fields.Item(i).Value + "\t" s = s + "\r\n" aRecSet.MoveNext() # Outputs results Log.Message("Products", s) # Closes the recordset and connection aRecSet.Close() aCon.Close()
Gives me error
TypeError 'IDispatchIndexedPropertyWrapper' object is not callable Error location: Unit: "..........t\Test" Line: 61 Column: 1.
which is the line
s = s + aRecSet.Fields.Item(i).Name + "\t"
If I comment reading ADO record set and taking only counts like below
p = 0 for i in range (0, aRecSet.Fields.Count): #s = s + aRecSet.Fields.Item(i).Name + "\t" Log.Message(aRecSet.Fields.Count) #s = s + "\r\n" # Scans recordset while not aRecSet.EOF: for i in range (0, aRecSet.Fields.Count): p = p+1 Log.Message(str(p)) #s = s + aRecSet.Fields.Item(i).Value + "\t" #s = s + "\r\n" aRecSet.MoveNext()
Gives me correct number of columns and rows.....which I guess DB connection is OK
What am I doing wrong? or is it a bug?
The code I'm running is exact same at hear except connection string
I'm running TC 12.1..5..
Use square brackets for Fields.Item :
s = s + aRecSet.Fields.Item[i].Name + "\t"
#...
s = s + aRecSet.Fields.Item[i].Value + "\t"See Python - Specifics of Usage#Accessing Collection Items .