Hejsan! Hej Fredrik! Tack för hjälpen Sofia, det va i stora drag detta jag ville ha hjälp med men jag har problem med att hämta värdet ur tabellen när man gör sitt val o komb.rutan. Måste man spara undan det värdet i ett recordset eller kan man skriva det till textrutan på en gång?? Hej! YES!! Hej! Jo jag tänkte också på det med det spelar ju ingen större roll. VBA problem
Jag håller på att göra en applikation i access där jag vill ha en kombinationsruta med fasta värden som hämtas ur en tabell, när man väljer ett värde där ur så ska en annan textruta fyllas med ett värde (värdet skall vara det senaste inmatade + 1 för varje individuellt val i kombinationsrutan, ska med andra ord vara en individuell räknare för varje val i komb.rutan). Både valet i komb.rutan och det senaste värdet skall sedan lagras tillsammans i en annan tabell.
Någon som förstår vad jag försöker säga och kanske har några tips?? Är riktig nybörjare på VBA!! :-/Sv: VBA problem
Om jag förstått rätt vad du vill göra så kan du i onChange-eventet på kombinationsrutan dels spara undan det i kombinationsrutan valda värdet, dels sätta värdet på textboxen.
Ex:
Dim Kombo as string
Dim TextboxValue as string
Kombo = MyCombo.Value
Mytextbox.text = cint(Kombo) + 1 (Vet inte om det var så du menade, att du ville plussa på 1 på värdet av komboboxen? Hör av dig annars)
Textboxvalue = Mytextbox.text
FÖr att spara ner dessa värden i en tabell
Dim strsql as string
Om dina kolumner är av typen tal gäller nedan;
strsql = "INSERT INTO MyTable (TextBoxValue, KombinationValue) VALUES (" + Textboxvalue + ", " + Kombo + ";)
Annars, om du har kolumnerna som text;
strsql = "INSERT INTO MyTable (TextBoxValue, KombinationValue) VALUES ('" + Textboxvalue + "', '" + Kombo + "';)
Docmd.runsql strsql
Själva sqlsatsen och databasanropet vet jag inte var du vill ha om det ska sparas kanske när man klickar på en spara-knapp eller går ur formuläret eller kanske direkt efter ändring i kombobxen gjorts men det får du väl lägga på lämpligt stället.
Hoppas det var vad du menade.
Mvh, SOfiaSv: VBA problem
Så här ser min kod ut nu:
*********************************************
Private Sub Kombinationsruta52_Change()
Dim Kombo As String
Dim TextboxValue As String
Dim temp_value As Integer
Kombo = Kombinationsruta52.Value
temp_value = "SELECT Real_Nr FROM SENASTE_REAL WHERE Real_Typ LIKE " & Kombo
TextboxValue = CInt(temp_value) + 1
Text54.Value = TextboxValue
***********************************************
Blir fel nr 13, skriver man sql satser på något speciellt sätt i VBA??
Hur plockar jag ut värdet ur denna till exempel??
*****
strsql = "SELECT Real_Nr FROM SENASTE_REAL WHERE " + Kombo + " EQUALS Real_Typ"
DoCmd.RunSQL (strsql)
*****
MVH // FeFFeSv: VBA problem
Access har en annorlunda sqlsyntax än SQL Server.
Man kan tilldela en variabel resultatet (om det bara returnerar en enda post) så det borde gå att sätta direkt i textboxen. Dock har jag inte den syntaxen i huvudet.
Du kan annars göra om textboxen till en listbox där du i Private Sub Kombinationsruta52_Change() sätter listbox.rowsource = din sqlsats.
Ett annat förslag på lösning på din första fråga är att skapa ett recordset för att stoppa in resultatet av sql-satsen i.
Dim rs as recordset
Dim strsql as string
Dim db as database
set db = currentdb
strsql = "SELECT Real_Nr FROM SENASTE_REAL WHERE Real_Typ = " + cstr(Kombo) + ";"
Set rs = db.openrecordset(strsql)
rs.movefirst
textboxValue=cint(rs("Real_Nr")) + 1
rs.close
Har inte haft möjlighet att testa att ovanstående är helt korrekt men jag tror att det ska funka bra.
Fråga 2:
Hur plockar jag ut värdet ur denna till exempel??
*****
strsql = "SELECT Real_Nr FROM SENASTE_REAL WHERE " + Kombo + " EQUALS Real_Typ"
DoCmd.RunSQL (strsql)
Vet inte om du menar hur du "får tag i" värdet eller hur du får en fungerande sqlsats?
Om du menar att du vill plocka ut värdet kan ju ett recordset vara bra att använda igen.
SQLsatsen kan du skriva så här:
strsql = "SELECT Real_Nr FROM SENASTE_REAL WHERE Real_Typ = " + cstr(kombo)+";"
Hoppas det hjälpte!
Mvh,
SofiaSv: VBA problem
Tack för all hjälp Sofia...du är bäst! :)
Slutgiltiga koden blev så här.
Private Sub Kombinationsruta52_Change()
Dim Kombo As String
Dim TextboxValue As Integer
Dim strsql As String
Dim rs As Recordset
Dim db As Database
Set db = CurrentDb
Kombo = Kombinationsruta52.Value
strsql = "SELECT Real_Nr FROM SENASTE_REAL WHERE Real_Typ = ('" + Kombo + "');"
Set rs = db.OpenRecordset(strsql)
rs.MoveFirst
TextboxValue = CInt(rs("Real_Nr")) + 1
Text54.Value = TextboxValue
rs.Close
...nu är det bara resten med att spara ner det kvar! :)Sv: VBA problem
Vad bra att det löste sig!
Om du vill kan du även tilldela värdet på textboxen på en gång istället för att stoppa in det i en variabel först;
Dim textboxvalue as integer
TextboxValue = CInt(rs("Real_Nr")) + 1
Text54.Value = TextboxValue
kan istället bli
Text54.Value = CInt(rs("Real_Nr")) + 1
Men det går lika bra som du har gjort, skillnaden är bara att man slipper bara någon kodrad och en variabeldeklaration!
Lycka till, du får höra av dig om du får problem att spara ned datat.
Mvh,SofiaSv: VBA problem
Tro det eller ej men jag lyckades fixa koden för att spara ner det själv! :)
-------------Kod för att hämta det valda värdet ur tabellen-------------
Private Sub Kombinationsruta62_Change()
Dim Kombo As String
Dim TextboxValue As String
Dim strsql As String
Dim rs As Recordset
Dim db As Database
Set db = CurrentDb
Kombo = Kombinationsruta62.Value
strsql = "SELECT Real_Nr FROM SENASTE_REAL WHERE Real_Typ = ('" + Kombo + "');"
Set rs = db.OpenRecordset(strsql)
TextboxValue = CInt(rs("Real_Nr")) + 1
Real.Value = Kombo + " " + TextboxValue
rs.Close
--------------Kod för att uppdatera värdet i tabellen----------------------
Private Sub Kommandoknapp48_Click()
On Error GoTo Err_Kommandoknapp48_Click
Dim Kombo As String
Dim TextboxValue As String
Dim strsql As String
Dim rs As Recordset
Dim db As Database
Set db = CurrentDb
Dim update_str As String
Kombo = Kombinationsruta62.Value
strsql = "SELECT Real_Nr FROM SENASTE_REAL WHERE Real_Typ = ('" + Kombo + "');"
Set rs = db.OpenRecordset(strsql)
rs.MoveFirst
TextboxValue = CInt(rs("Real_Nr")) + 1
update_str = "UPDATE SENASTE_REAL SET SENASTE_REAL.Real_Nr = ('" + TextboxValue + "') WHERE Real_Typ = ('" + Kombo + "')"
DoCmd.RunSQL (update_str)
rs.Close
------------------------------------
...det kanske va onödigt att köra samma kod en gång till för att spara ner värdet när man redan hämtat det en gång men strunt samma, det fungerar fint nu så jag är nöjd! :)
Tack för hjälpen Sofia.
//Fredrik