2016-05-27 1 views
0

dans le VBA ci-dessous J'ai un statuts de sélection avec une table mais je veux plusieurs déclarations de sélection que les résultats doivent capturer dans Excel.comment sélectionner 2 sélections de statut dans les scripts VBA

Sub extract() 

    'usedrows = Sheets("Batch_Creation").Range("A" & Sheets("Batch_Creation").Rows.Count).End(xlUp).Row 
    'MsgBox usedrows 

    Dim cn As Object 
    Dim uid1, pass1, srvrnm 
    Set cn = CreateObject("ADODB.Connection") 
    Dim rs As Object 
    Set rs = CreateObject("ADODB.Recordset") 

    Dim cmdSQLData As Object 
    Set cmdSQLData = CreateObject("ADODB.Command") 
    uid1 = "XXXXX" 
    pass1 = "XXXXX" 
    srvrnm = "XXXXX" 

    On Error GoTo err1 
    cn.Open "Driver=Teradata; DBCName=" & srvrnm & ";uid=" & uid1 & ";AUTHENTICATION=ldap;pwd=" & pass1 & "; Trusted_Connection=True" 


    Set cmdSQLData.ActiveConnection = cn 
    'MsgBox ("1") 
    On Error Resume Next 
query1 = "select top 20 * from DBC.TABLES;" ---first select statements 
query2 = "select count(*) from DBC.TABLES;" ---2nd select statements 
query3 = "select * from DBC.TABLES where columnname="santosh";" ---3rd select statements 
    'MsgBox query1 

     cmdSQLData.CommandText = query1 
     cmdSQLData.CommandTimeout = 0 
     Set rs = cmdSQLData.Execute() 

    Dim r As Integer 'Row 
    Dim c As Integer 'Column 

    For c = 0 To rs.Fields.Count - 1 
     'This will start on Row 1, Column A (due to + 1) and place all the field headers 
     Sheet1.Cells(1, c + 1).Value = rs.Fields(c).Name 
    Next c 
    r = 2 'We'll start on Row 3 
    Do While Not rs.EOF 
     For c = 0 To rs.Fields.Count - 1 
      'c + 1 means we're starting on Column 1 (A) 
      'If we wanted to start in Column d, we would use c + 4 
      Sheet1.Cells(r, c + 1).Value = rs.Fields(c) 
     Next 
     r = r + 1 
     rs.MoveNext 
    Loop 
     Set rs = Nothing 

    'Set rs = New ADODB.Recordset 
    'rs.Clear 

    err1: 

    End Sub 

Comment puis-je appeler plusieurs instructions select dans les scripts ci-dessus

query2 = "select count(*) from DBC.TABLES;" ---2nd select statements 
query3 = "select * from DBC.TABLES where columnname="santosh";" ---3rd 

Répondre

0

Y at-il un problème en utilisant un jeu d'enregistrements pour chaque requête?

RS1 pour query1

RS2 pour query2

RS3 pour requete3

Une autre façon - vous collectez les données de votre jeu d'enregistrements via l'exécution query1 , alors vous faites tout ce que vous voulez (c opying, coller, ...).

Ensuite, vous changez cmdSQLData.CommandText-query2, faire tous les trucs comme ci-dessus.

Encore une fois vous modifiez le CommandText à query3.

+0

En regardant les requêtes, vous pourriez union 1 et 3, avec un indentifier pour dire lequel était quoi, mais vous auriez besoin de plus d'un passage de recordset pour tout faire. Vous pouvez ajouter les champs supplémentaires au comptage, donc s'il y avait 4 champs dans la table, sélectionnez count (*), '' comme dummy1, '' comme dummy2 et ainsi de suite, alors vous pourriez les unir tous, mais j'utiliserais le approche ci-dessus, il vous offrira les fonctions de jeu d'enregistrements sur chacun à son tour également. –

+0

je vous remercie pour votre suggestion..je veux afficher le nom de la table et le nombre de cette table particulière dans mon code ci-dessus –