Hej! Jag tycker också att din ideal-bild är klart mer tilltalande ;) Tack Åsa! I Kontrakt-formuläret så kan det behövas läggas in i två tabeller, Hyresgäst och Kontrakt. Beroende på om det är en ny hyresgäst eller inte så har man klickat i en checkbox i föregående formulär. Checkboxen styr om hyresgästfälten ska visas eller inte i Kontrakt-formuläret. Det är en "Bifogad fil"-kontroll, d.v.s. "Gem"-kontrollen längst ned till höger bland "Kontroller" i "Design"-fliken. "Bifogad fil"-datatypen kan lagra flera värden i samma fält. Den är speciell för Access 2007 och kräver att alla användare har just den versionen av Access eller senare. "Bifogad fil" stödjs inte av ADO som du använder i din kod, utan man behöver använda den senaste versionen av DAO (ACEDAO). Ok, ja då var det därför som det blev felmeddelande! Jag trodde att ADO skulle klara av "Bifogad fil" och att DAO var på väg bort. Hade inte hört talas om ACEDAO. Tack för länken jag har kollat på den! Ett formulär kan ha en fråga med flera tabeller som datakälla. Tack så jättemycket Åsa! :-)Problem med bifogade filer och VBA-kod.
Idealet hade varit om stängningkrysset uppe i formulärens högra hörn hade haft en "Vid klickning"-händelse och att man kunde lägga in en Me.Undo i den. För det ska bara sparas om man klickar på "Spara" eller "Spara ändring"-knappen. Men stängningskrysset är ju en formuläregenskap och inte ett objekt, så jag ser ingen möjlighet till det?
Därför har jag lagt in en Me.Undo i formulärens "Före uppdatering"-händelse och att sparandet till tabell måste ske via VBA-kod. Det fungerar bra om man kommenterar bort bifogade filerna, men om man tar med även dem så blir det följande felmeddelande vid både sparande av ny post och ändring av post:
körfel nr '-2147217887(80040e21)' Det går inte att utföra operationen.
Så här ser aktuell kod ut:
' Kodsnutt för att spara ny post
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "HYRESGÄST", CurrentProject.Connection, _
adOpenDynamic, adLockOptimistic
With rs
'Add new record to end of Recordset:
.AddNew
'Add Data:
![Hyresgäst] = Me.Företag.Value
![E_postadress] = Me.E_postadress.Value
![Anteckningar] = Me.Anteckningar.Value
![Bifogade filer] = Me!Bifogade_filer
![Efternamn] = Me.Efternamn.Value
![Förnamn] = Me.Förnamn.Value
'Commit the changes:
.Update
End With
rs.Close
Set rs = Nothing
'Kodsnutt för att spara ändringar i redan inlagd post:
Dim rs As ADODB.Recordset
Dim SQLStmt As String
'Hämta aktuell post
Set rs = New ADODB.Recordset
SQLStmt = "SELECT * FROM HYRESGÄST WHERE Hyresgäst = '" & HyresgästNamn & "'"
rs.Open SQLStmt, CurrentProject.Connection, _
adOpenDynamic, adLockOptimistic
'Sätt in de nya uppgifterna
If Not rs.EOF Then
rs!Hyresgäst = Me!Företag
rs!E_postadress = Me!E_postadress
rs!Anteckningar = Me!Anteckningar
rs![Bifogade filer] = Me![Bifogade filer]
rs!Efternamn = Me!Efternamn
rs!Förnamn = Me!Förnamn
rs.Update
End If
rs.Close
Set rs = Nothing
Går det även att lägga in bifoga filer via de här sätten?
Hur skriver man för den raden isåfall, både för ny post och ändring av post?
Mycket tacksam för hjälp!
/PiteCarina
Sv: Problem med bifogade filer och VBA-kod.
Kan du inte testa något i den här stilen:
Option Compare Database
Option Explicit
Private mbSave As Boolean
Private Sub cmdOK_Click()
mbSave = True
DoCmd.Close acForm, Me.Name
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Not mbSave Then Me.Undo
End Sub
Det fungerar om formuläret stängs efter att användaren klickar på spara-knappen. Om formuläret döljs eller om det går att klicka vidare till nästa post behöver variabeln nollställas vid ny post.
Sv:Problem med bifogade filer och VBA-kod.
Det fungerar perfekt att göra så! :-)
Så mycket enklare och säkrare att lösa det på ditt sätt!Sv: Problem med bifogade filer och VBA-kod.
Om det är en ny hyresgäst så undersöks via VBA-kod vilket hyresgäst_id som den nya Hyresgäst-posten får och det används sedan som främmandenyckel för den nya posten i Kontrakttabellen.
Därför undrar jag om det hade det gått att skriva och använda någonting liknande:
![Bifogade filer] = Me.[Bifogade filer] ?
Om inte så får jag nog göra så att användaren måste fylla i två formulär, om hyresgästen är ny och ett kontrakt ska registreras samtidig? Sv: Problem med bifogade filer och VBA-kod.
Sv:Problem med bifogade filer och VBA-kod.
http://www.utteraccess.com/forums/printthread.php?Board=53&main=1241488&type=post
Är fortfarande tveksam om du verkligen behöver manipulera recordsets "manuellt" i din applikation.Sv: Problem med bifogade filer och VBA-kod.
Helst skulle jag vilja slippa manipulera recordsets manuellt, även i det här formuläret, men både hyresgäst- och kontraktuppgifterna fylls i i samma formulär och sparas vid samma knapptryckning.
Kanske jag måste "tvinga" användaren att först fylla i och sända iväg hyresgästuppgifterna via en "Spara hyresgäst"-knapp innan den kan fylla i kontraktuppgifterna? Att rätt hyresgästnummer då blir hämtat från hyresgästtabellen och ifyllt i ett textfält bland kontraktuppgifterna. Då blir ju hyresgäst- och kontraktuppgifterna ihopkopplade. Men då gäller det ju att inte hyresgästuppgifterna sparas även då man trycker på "Spara kontrakt"-knappen.
Eller så gör jag som jag hade i början, att användaren först måste gå in och registrera i hyresgästformuläret och sedan i kontraktformuläret. Men jag tyckte att det skulle vara så mycket smidigare för användaren att den även kunde fylla i hyresgästuppgifterna i kontraktformuläret, ifall det är en ny hyresgäst.
Nu har jag "tänkt högt" och undrar vilken lösning du rekommenderar? Jag har märkt att jag som nybörjare på Access och VBA har lätt för att komplicera till det.
Så här ser hela den aktuella koden ut:
'Om även en ny hyresgäst ska läggas in
If (Me.Företag.Visible = True) Then
'Skapar en koppling
Dim cnn1 As ADODB.Connection
Set cnn1 = CurrentProject.Connection
'Lägger in ny hyresgäst
Dim rs2 As ADODB.Recordset
Set rs2 = New ADODB.Recordset
rs2.Open "HYRESGÄST", CurrentProject.Connection, _
adOpenDynamic, adLockOptimistic
With rs2
'Add new record to end of Recordset:
.AddNew
'Add Data:
![Hyresgäst] = Me.Företag.Value
![E_postadress] = Me.E_postadress.Value
![Anteckningar] = Me.HyresgästAnteckningar.Value
'![Bifogade filer] = Me.Bifogade_filer
![Efternamn] = Me.Efternamn.Value
![Förnamn] = Me.Förnamn.Value
'Commit the changes:
.Update
End With
rs2.Close
Set rs2 = Nothing
'Tar reda på vilket hyresgästnr som den nya hyresgästen får, ska användas i KONTRAKT-tabellen.
Dim myRecordSet As New ADODB.Recordset
Dim Hyresgästnummer As Integer
myRecordSet.ActiveConnection = cnn1
myRecordSet.Open "SELECT Max(Hyresgäst_nr) FROM HYRESGÄST"
Hyresgästnummer = myRecordSet.Fields(0).Value
End If
'Lägger in nytt kontrakt
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "KONTRAKT", CurrentProject.Connection, _
adOpenDynamic, adLockOptimistic
With rs
'Add new record to end of Recordset:
.AddNew
'Add Data:
![Kontrakt_nr] = Me.Kontrakt_nr.Value
If (Me.Företag.Visible = True) Then
'Använd hyresgästnr som den nya hyresgästen fick
![Hyresgäst_nr] = Hyresgästnummer
Else
' Använd hyresgästnumret som användaren valt i formulärets combobox.
![Hyresgäst_nr] = Me.Hyresgäst_nr.Value
End If
![Objekts_nr] = Me.Objekts_nr.Value
![Inflyttningsdatum] = Me.Inflyttningsdatum.Value
![Utflyttningsdatum] = Me.Utflyttningsdatum.Value
![Anteckningar] = Me.Anteckningar.Value
'![Bifogade filer] = Me.[Bifogade filer]
![Försäljningsyta m^2] = Me.[Försäljningsyta m^2].Value
![Bransch] = Me.Bransch.Value
'Commit the changes:
.Update
End With
rs.Close
Set rs = Nothing
Hoppas på hjälp att komma in på rätt spår!
/PiteCarinaSv:Problem med bifogade filer och VBA-kod.
Testa att göra en fråga med fälten [Hyresgäst_nr] och [Efternamn] från tabellen "HYRESGÄST" och [Hyresgäst_nr] och [Inflyttningsdatum] från tabellen "KONTRAKT". Visa frågans datablad.
Gå till ny post och skriv in ett existerande hyresgästnummer i den hyresgästnummer-kolumn som hör till KONTRAKT-tabellen. Notera att Efternamn för den hyresgästen fyll i automatiskt.
Gå till en ny post och skriv in ett nytt efternamn och ett nytt inflyttningsdatum. Notera att kopplingen mellan HYRESGÄST och KONTRAKT skapas helt automatiskt.
Du kan basera ditt formulär på en sådan fråga och låta Access sköta allt sparande och länkande.Sv: Problem med bifogade filer och VBA-kod.
Nu fungerar det även för det här formuläret!
Du har varit till jättestor hjälp!