VB: Data uit SQL query in keuzelijst met invoervak

Status
Niet open voor verdere reacties.

Greenery80

Gebruiker
Lid geworden
5 jul 2008
Berichten
268
Beste mensen,

ik hoop dat iemand mij kan helpen. Mijn probleem is als volgt: Ik wil graag dat een veld gevuld wordt (SoftwareId), nadat ik een ander veld heb bijgewerkt (UnitId). Het lukt mij niet om de 'keuzelijst met invoervak' te vullen met de waarde uit een SQL query. Ik weet dat dit wel kan bij een 'keuzelijst', dmv:

Code:
Me![SoftwareId].RowSource = SQLString
Me![SoftwareId].Requery

Dit werkt dus ook wel voor een keuzelijst met invoervak, maar de opgehaalde data wordt niet automatisch ingevuld. Deze moet je dan alsnog selecteren in de keuzelijst.
Hoe kan ik de waarde weergeven in een keuzelijst met invoervak?

Ik heb het volgende al uitgewerkt in VB:

Code:
TempUnitId = Me![UnitId]

SQLString = "SELECT Last (SoftwareId), UnitId " & _
"FROM ProductGeschiedenis GROUP BY UnitId HAVING ((UnitId)= '" & TempUnitId & "') "

'hier moet waarschijnlijk wat code komen?!?

MsgBox "SoftwareId= " & SoftwareId   'om de waarde te tonen uit SQL query
Me![SoftwareId].Value = SoftwareId

Ik hoop dat iemand mij kan helpen?
Bij voorbaat dank!
 
Gebruikt de text property i.p.v. de value property.
Code:
Me![SoftwareId].Text = SoftwareId
HTH:D
 
Gebruikt de text property i.p.v. de value property.
Code:
Me![SoftwareId].Text = SoftwareId

Dit werkt helaas niet. Ik moet namelijk de waarde halen uit de SQLString en dit wou eerder ook al niet.
Het stukje code:
Code:
MsgBox "SoftwareId= " & SoftwareId   'om de waarde te tonen uit SQL query
Geeft nog steeds alleen een messagebox met 'SoftwareId= ' weer.
En niet bijvoorbeeld 'SoftwareId= 1'.

Toch bedankt voor het meedenken.

Wat ook een mogelijkheid is om de Rowsource te laden en dan de 1e rij te selecteren.
Maar hier lukt mij de selectie van de 1e rij niet.

Code:
Me![SoftwareId].RowSource = SQLString
Me![SoftwareId].Requery
'Wat ik hier dan graag wil is, bijvoorbeeld:
'Select.Row(0) of:
'DefaultValue = Row (0)

Kan iemand me helpen?
 
Oh.

Wat jij wil kan ook niet op die manier. Ik had je probleem niet begrepen.

Om te beginnen moet je je controls namen geven die horen bij die controls, zoals de prefix txt bij een textbox of cbo bij een combobox. Op die manier hou je de bound fieldnames en de control names uit elkaar.

Ik neem aan dat softwareid de naam is van je combobox. Dit zou ook de naam kunnen zijn van een veld waaraan je form is gekoppeld.

Als ik even jouw stukje herschrijf:
Code:
Private Sub Form_Load()
    Me.cboSoftwareId.RowSource = SQLString
end sub
Private sub cboSoftwareID_OnChange()
    msgbox "De gekozen waarde is :" & nz(me.cboSoftwareId,"Geen waarde gekozen")
end sub
Bij het laden van je form wordt de combobox gevuld met data uit je query.
Nadat je geklikt hebt in je combobox en je hebt je keuze gemaakt dan wordt het tweede stukje code uitgevoerd.


HTH:D
 
Betere uitleg

Ik zal het proberen wat beter uit te leggen.
Ik wil dus een selectie doen bij een bepaald keuzelijst met invoer (cboUnitId) en dan wil ik dat het keuzelijst met invoer (cboSoftwareId) automatisch wordt gevuld en geselecteerd aan de hand van de SQLQuery.

Code:
Private sub cboUnitId_OnChange()
TempUnitId = Me.cboUnitId

SQLString = "SELECT Last (SoftwareId), UnitId " & _
"FROM ProductGeschiedenis GROUP BY UnitId HAVING ((UnitId)= '" & TempUnitId & "') "

'hier moet waarschijnlijk wat code komen?!?

Me.cboSoftwareId.Text = SoftwareId
end sub

Het vullen van de combobox met data uit je query werkt al weken. Ik wist dat dit wel kon en dat het ook werkt. Maar...
Er staat overigens dan dus maar 1 waarde dan in de lijst. En ik wil graag dat de waarde voor mij geselecteerd is en dat ik dus niet hoef te klikken in het keuzevak cboSoftwareId.

Ik vul dan dus cboUnitId in => en cboSoftwareId wordt automatisch ingevuld.
Als dit niet mogelijk is dan hoor ik dit ook graag, want dan kan ik namelijk ophouden met zoeken en uitproberen. :-)
 
Het begint me geloof ik een beetje te dagen.
Zet om te beginnen bovenaan ieder module die je hebt:

Option Explicit.

Dat helpt je met het debuggen van je code.

Wat jij wilt doen kan met de Dlast functie.
Code:
Option Compare Database
Option Explicit

Private sub cboUnitId_OnChange()

    Dim strTempUnitId as string
    Dim strSoftwareId as string

    TempUnitId = Me.cboUnitId

    strSoftwareId = DLast ("SoftwareId","ProductGeschiedenis", "UnitId = '" & strTempUnitId & "')

Me.cboSoftwareId.Text = strSoftwareId
end sub

Enjoy!
 
De oplossing!

Guus je bent geweldig!!!!
Zonder jou had ik dit probleem niet kunnen oplossen.

Het was bij de keuzelijst uiteindelijk toch niet .Text maar het was toch .Value!
.Text is waarschijnlijk alleen bij tekstvak oid.

De code is nu als volgt:

Code:
Private Sub unitid_Change()

TempUnitId = Me![UnitId]
TempSoftwareId = DLast("[SoftwareId]", "Productgeschiedenis", "UnitId = '" & TempUnitId & "'")
Me![SoftwareId].Value = TempSoftwareId

End Sub

Ik ga vandaag een begin maken met hernoemen van alle comboboxen en editboxen etc. Ook bedankt voor de tip!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan