Toon posts:

ADO vraag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een probleem. Ik gebruik ADO Command objecten in mijn applicatie, en wil hier nu dynamisch velden mee uitvragen uit een Oracle database.

Ik dacht dat dat wel zo zou kunnen :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim com As ADODB.Command
    Dim param As ADODB.Parameter
    
    Set conn = New ADODB.Connection
    conn.Open "Provider=providernaam;Password=eenpassword;User ID=gebruikertje;Data Source=datasource"
    
    Set param = New ADODB.Parameter
    param.Direction = adParamInput
    param.Name = "Velden"
    param.Type = adBstr
    
    
    Set com = New ADODB.Command
    com.CommandText = "Select ? from INT_BERICHTEN"
    com.Parameters.Append param
    com.ActiveConnection = conn
    
    com.Parameters("Velden").Value = "STATUS, TYPE"
    
    Set rs = com.Execute
    With rs
    
        Do While Not .EOF
        
            MsgBox .Fields(0).Value
            .MoveNext
            
        Loop
        
    End With
    
    Set rs = Nothing
    conn.Close
    Set conn = Nothing


Probleem is dus dat de velden die ik in dit voorbeeld op wil vragen ( Status en type ), als string worden behandeld, en dat werkt dus niet. Het probleem is ook dat ik geen adField of iets dergelijks ben tegengekomen.

Ze gaan me toch niet vertellen dat dit niet kan met een command object???

Hoop dat jullie meer weten.

Verwijderd

Waarom wil je dit zo ingewikkeld doen?

Als je een veld wil opvragen kun je beter de hele record opvragen, om dan in de .Fields collectie van de RecordSet naar het juiste veld te zoeken, ofwel door je query dynamisch aan te passen, zodat het allen het juiste veld (of velden) bevat.

Als ik je niet goed begrijp, probeer dan duidelijk uit te leggen wat je wil, en waarom (welke toepassing), dan kan ik je misschien beter helpen.

Succes :)

  • Xion
  • Registratie: November 2000
  • Laatst online: 16:18
Hmm, als ik je goed begrijp wil je een soort van phpMyAdmin maar dan voor ASP?

Zo ja, dan heb ik nog een leuke link voor je: http://coveryourasp.com/1ClickDB.asp

Je kan iig de code bekijken, dan heb je tenminste iets

Succes

Verwijderd

Topicstarter
Ik moet dit doen omdat ik een classe heb gemaakt in VB, waarbij de gebruiker d.m.v. ADDFIELD een veld toe kan voegen, vervolgens wordt ergens in de classe een recordset opgehaald met alle velden als resultaat ( deze moeten naar een bestand worden weggeschreven ).

Dit resultaat moet ook aan vele where statements voldoen, dus ik heb een command object met heel veel ? parameters voor de where statements die leuk per naam gevuld worden, en dus een parameter voor de velden, maar dat lukt niet.

Ik gebruik hier een command object omdat die door de hele applicatie al worden gebruikt, en ik graag dezelfde stijl aan wil houden. Alleen ik heb nog nooit gezien dat er een parameter werd gebruikt om velden op te geven.

Ik kan me alleen niet voorstellen dat dit niet zou kunnen. Bedankt voor de reacties alvast.

Verwijderd

Je kunt toch tellen hoeveel fields de gebruiker heeft toegevoegd in je klasse? Afhankelijk daarvan voeg je genoeg vraagtekens in in je query string, en voeg je de juiste parameters toe.
Visual Basic .NET:
1
2
3
4
5
6
7
query = "SELECT "
For Each field in mFields
    query = query & "?, "
    Call cmd.Parameters.Append(new Parameter(adParamInput, field.Name, adBStr)
Next

query = query & " FROM Blaat"

Fouten onder voorbehoud.
Hoe je die laatste overbodige komma weghaalt uit je query kun je zelf wel bedenken :).

Verwijderd

Topicstarter
Verwijderd schreef op 23 september 2002 @ 20:11:
Je kunt toch tellen hoeveel fields de gebruiker heeft toegevoegd in je klasse? Afhankelijk daarvan voeg je genoeg vraagtekens in in je query string, en voeg je de juiste parameters toe.
Visual Basic .NET:
1
2
3
4
5
6
7
query = "SELECT "
For Each field in mFields
    query = query & "?, "
    Call cmd.Parameters.Append(new Parameter(adParamInput, field.Name, adBStr)
Next

query = query & " FROM Blaat"

Fouten onder voorbehoud.
Hoe je die laatste overbodige komma weghaalt uit je query kun je zelf wel bedenken :).
Zo heb ik het nu inderdaad ook gemaakt, maar op deze mannier kan ik de commandtext niet gebruiken. Dat vond ik nou eigenlijk het mooie van commands, eenmalig een commandtext invoeren en dan met parameters gewoon de zooi opgeven, maar dat lijkt voor velden dus gewoon niet te kunnen.

Verwijderd

Topicstarter
[quote]Mammaplank schreef op 24 september 2002 @ 08:39 iets stoms:
[...]


Sorry, verkeerd gelezen. De manier die jij omschrijft zet dus per veld een vraagteken neer... dat had ik nog niet geprobeerd, maar werkt helaas ook niet. Je kan gewoon geen veld parameter gebruiken volgens mij.

Verwijderd

Hier een stukje VB wat we op het werk gebruiken:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    ' Maak SQL Statement
    strSQL = "INSERT INTO Personen (" _
           & "OrgAdresID," _
           & "Titel," _
           & "Initialen," _
           & "Voornamen," _
           ' ....
           & "Mobiel," _
           & "Fax," _
           & "Functie," _
           & "GeboorteDatum) " _
           & "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
    
    ' Maak command
    Set cmd = New ADODB.Command
    cmd.CommandText = strSQL
    
    ' Voeg waarden toe
    cmd.Parameters.Append cmd.CreateParameter(, adInteger, adParamInput, , OrgAdresID)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 20, Titel)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 20, Initialen)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 50, Voornamen)
    ' .....
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 20, Mobiel)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 20, Fax)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 50, Functie)
    cmd.Parameters.Append cmd.CreateParameter(, adDBTimeStamp, adParamInput, , GeboorteDatum)
    
    ' Open connectie
    Set conn = New ADODB.Connection
    conn.Open cConnStr
    
    ' Uitvoeren
    conn.Execute strSQL, , adExecuteNoRecords

Dat met die vraagtekens moet dus geen probleem zijn. Kun je eens een stukje posten hoe je het had opgelost?

Verwijderd

Topicstarter
[quote]Verwijderd schreef op 24 september 2002 @ 13:00:
Hier een stukje VB wat we op het werk gebruiken:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    ' Maak SQL Statement
    strSQL = "INSERT INTO Personen (" _
           & "OrgAdresID," _
           & "Titel," _
           & "Initialen," _
           & "Voornamen," _
           ' ....
           & "Mobiel," _
           & "Fax," _
           & "Functie," _
           & "GeboorteDatum) " _
           & "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
    
    ' Maak command
    Set cmd = New ADODB.Command
    cmd.CommandText = strSQL
    
    ' Voeg waarden toe
    cmd.Parameters.Append cmd.CreateParameter(, adInteger, adParamInput, , OrgAdresID)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 20, Titel)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 20, Initialen)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 50, Voornamen)
    ' .....
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 20, Mobiel)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 20, Fax)
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, adParamInput, 50, Functie)
    cmd.Parameters.Append cmd.CreateParameter(, adDBTimeStamp, adParamInput, , GeboorteDatum)
    
    ' Open connectie
    Set conn = New ADODB.Connection
    conn.Open cConnStr
    
    ' Uitvoeren
    conn.Execute strSQL, , adExecuteNoRecords


Ja, maar dit lukt hier ook, want je geeft de veldnamen zelf op

"INSERT INTO Personen (" _
& "OrgAdresID," _
& "Titel," _
& "Initialen," _
& "Voornamen," _

Maar die velden ( OrgAdresID, Titel, etc ), die wil ik nu dus dynamisch opgeven. In jou code worden alleen de waarden daarvoor dynamisch opgegeven. Dat ging altijd wel goed, maar probeer nu maar eens zoiets :

code:
1
Insert into Personen ( ?, ?, ?, ? ) VALUES ( 1, "Titel", "Initialen", "Voornamen" )


Dus het opgeven van de veldnamen m.b.v. parameters. Dat lukt niet. En dat gaat volgens mij ook helaas niet lukken.

Hoe ik het opgelost heb is momenteel toch door geen command object te gebruiken en gewoon het SQL statement elke keer zelf op te maken ( als string ). Dat is best wel minder, dus ik hoop nog steeds toch het command object te kunnen gaan gebruiken.

Bedankt voor je hulp in elk geval weer !
Pagina: 1