Avatar billede spejder_leon Nybegynder
13. september 2008 - 23:18 Der er 9 kommentarer og
1 løsning

Temporer datakilde.

Hej

Jeg er i gang med at lave et faktureringssystem.

Jeg vil gerne opnå at fakturaen og fakturalinjerne først oprettes og tilføjes til tabellerne når brugeren trykker på knapper: "Fakturer".

Når oplysningerne gemmes, skal der tilføjes data til to arkiv tabeller:

t_faktura og t_fakturalinier

t_faktura indeholde oplysninger såsom dato, faktura-nummer, kundeoplysninger mv. og ¨

t_fakturalinier skal indeholde detaljeoplysninger omkring hver vare der er tilføjet til fakturaen, og indekset til t_faktura.

Problemet er således 'blot' hvordan jeg binder formularen til en midlertidigt dataobjekt.
Avatar billede terry Ekspert
13. september 2008 - 23:43 #1
One idea would be to have a table which is used for holding your temporary data and when the user presses the "Fakturer" button copy the data to your permanent tables.

Another idea would be write the data to the tables as normal and if th  user chooses to NOT press the "Fakturer" button delete the newly entered data.

If your tables are related and you have set cascade deletes to on then deleting the record in t_faktura wouldalso delete the detail records in t_fakturalinier.
Avatar billede spejder_leon Nybegynder
14. september 2008 - 00:10 #2
Year I have thought of such a solution, but hoped for an solution, where the temporary tables would be held in memory only - is that possibly?
Avatar billede terry Ekspert
14. september 2008 - 09:42 #3
Well it maybe is in other programming languages but I'm not sure if its possible in Access.

You have to remember that the form where you enter your data is normally bound to a table so will get written to the table as you enter the data. Working with unbound fields on forms is also possible but not as easy, so in fact you could enter the data into the unbound fields and then copy the data to the tables when the user press the button. But this approach would require more programming.
Avatar billede terry Ekspert
14. september 2008 - 09:45 #4
Its also possible to work with transactions in bound forms and only commit toe table if the user wants to.

http://support.microsoft.com/kb/248011
Avatar billede terry Ekspert
14. september 2008 - 09:46 #5
The example is using DAO so its a bit out of date, but I would think it can be done using ADO too.
Avatar billede spejder_leon Nybegynder
17. september 2008 - 15:52 #6
Hej det ser ud til at virke, tester lige lidt mere...

Jeg har fjerne Form_Unload proceduren, er istedet indsat en knap med koden:

If Me.Saved Then
  DBEngine.CommitTrans
  DoCmd.Close
End If

Hvis brugeren lukker formularen gemmes ændringer og tilføjelser ikke.


Jeg har endnu ikke koblet fakturalinier underformularen på.

Beskriver løsningen her når det er sket.
Avatar billede terry Ekspert
17. september 2008 - 17:46 #7
"Hvis brugeren lukker formularen gemmes ændringer og tilføjelser ikke."

It would be an idea to give the user the chance to save in the forms close event.
Avatar billede spejder_leon Nybegynder
17. september 2008 - 18:53 #8
yes yes - of course... but thanks for the input ;)
Avatar billede spejder_leon Nybegynder
19. september 2008 - 22:40 #9
Det kom aldrig til at virke. i fakturalinie delen, kunne access kun håndtere fem linjer eller frem records.

Tanken omkring transaktioner er god og i teorien skulle det virke fantastisk, men ikke via ADO...

Og det er endda testet i access 2000.

Løsningen bliver at hoved faktura formularen ikke bindes til nogen tabel ( for at undgå at brugeren kan trykke pagedown og oprette mere end een faktura af gangen.

Faktura linjerne må blive oprettet i en tmp. tabel og så kopieret til de virkelige data når der trykkes på [fakturer].


Ps. hint omkring hvordan der pænt og nemt kopieres via recordset modtages gerne.
Avatar billede terry Ekspert
20. september 2008 - 09:52 #10
First thanks for points.

I find i strange that Microsoft suggest using transactions and you can only manage with around five records.

I think working with a TEMP table for the detail lines is a good choice.

You can copy the records from the TEMP table in a query which you can run when the user presses a button to accept.

The query will look something like this as long as the field names are the same.

INSERT INTO tblDetail SELECT * FROM tblTemp

If they arent then you will need to give the names in the query

INSERT INTO tblDetail  (destinationFieldsGoHere)  SELECT sourceFieldsGoHere FROM tblTemp

And you may have to do this if you use an autonumber field as you primary key.

And  you can also have a DELETE query to delete the TEMP records after they are copied to the right table.

DELETE * FROM tblTEMP.

To copy the header record you could also have an append query which took the values from the form.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester