Hej! Det verkar som din fråga är uppdaterbar. Hej Andreas! Hej Maria! Hej Åsa! Jag skulle ha gjort så här: Hej Åsa och tack för ditt svar.Ändra värde i en bunden textruta
Det här är säkert världens lättaste problem, men jag får inte till det...
Jag har en bunden textruta txtId som jag vill tilldela ett annat värde.
om jag kör
txtId.Value = 11
får jag meddelande
you cant assign a value to this object.
om jag kör
Form.Filter = "Delivery.Id=" & 11
händer det inte någonting
när jag öppnar formuläret använder jag:
DoCmd.OpenForm "DeliveryDetail", , , "Delivery.Id=" & 11
detta funkar bra
Har också provat med
Me.RecordSet("Id") = 11
funkar inte heller....
Hur gör jag för att hoppa fram till id 11??
får inte till syntaxen....
Egenskaper för fomuläret:
Allow Filters=yes
Allow Edits=yes
Allow Deletions=no
Allow Additions=no
Data Entry = no
Recordset Type = Dynaset
Record Locks = no Locks
Egenskaper för textrutan
Control Source = Id
Enabled = yes
Locked = no
Filter Lockup = Database Default
Använder Access 2000
/MariaSv: Ändra värde i en bunden textruta
Om du vill skapa en navigeringsfunktion, bör kontrollen inte vara bunden. Du bör ha en separat obunden kontroll:
Private Sub txtId_AfterUpdate()
Dim rs As DAO.Recordset
On Error GoTo txtId_AfterUpdate_Err
Set rs = Me.RecordsetClone
rs.FindFirst "Delivery.Id = " & txtId.Value
If rs.NoMatch Then
MsgBox "Posten ej funnen!", vbExclamation
Else
Me.Bookmark = rs.Bookmark
End If
txtId_AfterUpdate_Exit:
Exit Sub
txtId_AfterUpdate_Err:
MsgBox Err.Description, vbCritical
Resume txtId_AfterUpdate_Exit
End Sub
Sv:Ändra värde i en bunden textruta
Navigera är precis vad jag vill göra. Det är så att när jag sparar en ny post får ju den ett nytt id. Jag vill då navigera till den posten och på så vis få det nya id:t i textrutan. Användarna ska alltså inte skriva in något i textrutan, utan det är bara när en ny post skapats som jag vill få det nya id:t i textrutan
Min spara ny funktion ser ut enl följande:
Dim rs As ADODB.Recordset
Dim strSql
strSql = "SELECT * FROM Delivery WHERE Id = -1" 'För att få ett tomt recordset
Set rs = New ADODB.Recordset
rs.Open strSql, conn, , adLockOptimistic
rs.AddNew
rs("CustomerOrderNumber") = row.CustomerOrderNumber
rs("ProductionNumber") = row.ProductionNumber
...
...
rs.Update
row.Id = rs("Id").Value
Jag försökte som du sa med följande:
Dim rs As DAO.Recordset
Me.Recordset.FindFirst "Delivery.Id = " & row.Id
Set rs = Me.RecordsetClone
rs.FindFirst "Delivery.Id = " & row.Id
If rs.NoMatch Then
MsgBox "Posten ej funnen!", vbExclamation
Else
Me.Bookmark = rs.Bookmark
End If
men id står fortfarande kvar på 1....
Kan även tillägga att jag använder samma formulär för uppdatering och skapa nya poster. Vid skapa ny använder jag ju inte id. Men när jag är klar med min nyskapade post vill jag ju flytta fram till rätt post ifall användaren vill uppdatera den nyss skapade posten. (det är ju inte precis så snyggt om användaren uppdaterar post nr 1 istället.......)Sv: Ändra värde i en bunden textruta
Jag undrar om du inte krånglar till det rejält för dig...
För att lägga till en ny post behöver du bara navigera till ny post i formuläret. Hela recordset-hanteringen är troligen onödig. För att få in värden i den fält som du redan känner till (CustomerOrderNumber och ProductionNumber) kan man göra på lite olika sätt beroende på var du får de värdena ifrån. Kommer de från ett annat öppet formulär?Sv:Ändra värde i en bunden textruta
Jag har ett huvudformulär där jag kan söka ordrar. De sökta ordrarna presenteras i ett subformulär (datasheet). För att göra en ändrig på någon order klickar man på den och ett detaljformulär(deliveryDetail) öppnas.
Om man skulle vilja skapa en ny post finns en knapp på huvudformuläret där man öppnar samma formulär och ger en variabel värdet "NEW".
Under spara knappen kollar jag ifall denna variabel har värdet "NEW" isåfall ska jag skapa en ny post, annars ska jag uppdatera befintlig post.
Innan jag sparar kör jag med en valideringsfunktion för att kolla att alla värden är tillåtna.
If (validateDelivery(row)) Then
If (state = "New") Then
addDelivery(row)
'här vill jag ladda med rätt id.... row.Id innehåller id:t på den senas skapade posten
???=row.Id
state = ""
Else
updateDelivery(row)
End If
End If
Alla textrutor utom id är obundna.
Välkomnar förslag på förbättringar.... Gör jag fel som byggt egna funktioner för skapa ny post samt uppdatera befinglig post?? Hur skulle du gjort?
MVH
MariaSv: Ändra värde i en bunden textruta
Vi antar att detaljformuläret har tabellen "Delivery" som datakälla och att alla kontrollerna är bundna.
Koden när du klickar på en post i underformläret är någonting i den här stilen:
DoCmd.OpenForm "DeliveryDetail", , , "Id=" & Me.Id
Knappen för ny post ska då ha en motsvarande kod:
DoCmd.OpenForm "DeliveryDetail", , , , acFormAdd
Detta öppnar formuläret med en ny, tom post aktiv.
Säg sedan att detaljformuläret har en OK-knapp som kör valideringen och stänger formuläret om allt är OK annars visar felmeddelande.
If ValidateFormOK Then
DoCmd.Close acForm, Me.Name
Else
...
End If
Det som kan vara lite stelt med bundna kontroller är att användaren får Access-felmeddelanden om h*n skriver fel i numeriska fält eller datumfält.Sv:Ändra värde i en bunden textruta
Jag tror nog jag vill ha kvar mina egna felmeddelanden så jag får nog köra som jag gjort innan... Det jag får göra är nog att ha min id-ruta obunden också. Jag vet att jag är lite dålig att använda access inbyggda funktioner för skapa nya poster, uppdatera o dyl. Jag jobbade med VB för några år sedan och är van att göra egna funktioner för sådant. Bra eller dåligt vet jag inte....Det har iallafall funkat bra för mig.
/Maria