[access] opslaan forceren

Pagina: 1
Acties:
  • 104 views sinds 30-01-2008
  • Reageer

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Vanwege gebruik van wat subformulieren i.c.m. AutoID's moet ik kunnen forceren dat Access de gegevens van het formulier opslaat. Eigenlijk dus gewoon iets als record.save of .update of zo. Want... op dat moment wordt er een ID gegenereerd en kan de subtabel ingevuld worden. Alles werkt via MyODBC.

Klikt heel simpel, maar kan het nergens vinden. Hier op dit forum heb ik net wat gevonden via menu VBA-code, maar werkt helaas niet.

Wie helpt me even verder?

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-08 12:39

pjvandesande

GC.Collect(head);

Hoe sla je het nu op, werk je met RecordSet of gooi je zelf queries die kant op en heb je wat source voer voor ons?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:40
P&W->OFF

Aangezien dit eerder over Access gaat, dan over echt programmeren, move ik 'm naar Office-systemen.

Wat heeft MyODBC er eigenlijk mee te maken ? Is dat niet een odbc driver om MySQL mee te benaderen ? Waarom gebruik je dat icm Access ? :?

https://fgheysels.github.io/


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
questa schreef op dinsdag 06 september 2005 @ 13:52:
Hoe sla je het nu op, werk je met RecordSet of gooi je zelf queries die kant op en heb je wat source voer voor ons?
Even iets meer informatie.

Het betreft een formulier die wegschrijft in enkele tabellen (middels subformulieren en queries). Die tabellen staan allemaal op een MySQL-server, waarvan de verbinding via MyODBC loopt.

Alle Primary-keys in die tabellen worden door MySQL geautonummerd en juist die keys zijn ook nodig in de subformulieren. Probleem is nu dat MyODBC dit nummer blijkbaar pas aan Access teruggeeft op het moment dat de record wordt opgeslagen. De subformulieren zijn dus niet te gebruiken bij het invoeren van nieuwe gegevens op het hoofdformulier (want de ID voor de koppeltabel is onbekend).

Dit terwijl AutoNummering van Access zelf juist wel direct dit nummer genereert, zodat koppeling mogelijk is.

De enige vraag is daarmee is essentie: hoe forceer ik het opslaan van de gegevens in een formulier, middels wat VBA-code?

De VBA-code die ik hier en hier vond werkt niet (twee keer dezelfde).

Iemand anders enig idee?

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
whoami schreef op dinsdag 06 september 2005 @ 14:22:
Wat heeft MyODBC er eigenlijk mee te maken ? Is dat niet een odbc driver om MySQL mee te benaderen ? Waarom gebruik je dat icm Access ? :?
Omdat Access een eenvoudige interface heeft en bovendien wat makkelijker zaken als etiketten kan utidraaien dan een webapplicatie.

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Even een schopje, tevens wat vorderingen.

Voor de helderheid: ik moet dus de generatie van een ID forceren, zodat dit goed werkt in subformulieren. Beetje wat de TS in dit topic ook zoekt. Alleen kan ik niets met de methode daar beschreven.

Het topic hier biedt wel enig perspectief, maar ook nog niet alles.

De code van het opslaan werkt wel. Probleem daarbij is echter dat ik daarna ook per se een Requery moet uitvoeren. Doe ik dat, dan springt Access weer terug naar Record #1.

Dus... wanneer iemand de heel basale code voor me heeft om in een formulier naar het laatste record te springen, moet ik er wel uitkomen.

Iemand??

Update: deze pagina biedt enig perspectief, maar probleem daarmee is dat ID's van verwijderde records opnieuw worden gegenereerd (met alle links van data dus).

[ Voor 13% gewijzigd door TromboneFreakus op 12-09-2005 15:43 ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Feitelijk is Access niet zozeer het probleem. Hoe je een autoincrement waarde ophaalt voor een mysql-odbc connectie vind je oa. hier

ALs je met een recordset werkt kun je nog eerst .update proberen en dan de waarde van ![veld] uitlezen, maar ik verwacht niet dat het werkt. Een workaround met naar het laatste record gaan zou je kunnen doen met
code:
1
docmd.runcommand acCmdRecordsGoToLast

maar ik hoef je niet te vertellen dat dat een hele lelijke manier van werken is ;) die zeker niet geschikt is in een multiuser omgeving. Dan kan je m.i. net zo goed de jet engine zelf gebruiken icm mdb bestand.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Niesje schreef op maandag 12 september 2005 @ 15:54:
Feitelijk is Access niet zozeer het probleem. Hoe je een autoincrement waarde ophaalt voor een mysql-odbc connectie vind je oa. hier
Nou ja, niet helemaal. Je krijgt daar alleen de ID die in dezelfde connectie gebruikt is. Gezien Access een eigen connectie opzet voor het formulier, werkt dat dus niet. Het resultaat is simpelweg '0'.... :(

En tot het opslaan is de veldwaarde voor de ID's 'Null', dus daar kun je ook niets mee.

In het kader van hele smerige code heb ik nu iets dat in ieder geval wel werkt:

Visual Basic:
1
2
3
4
5
6
Private Sub Form_BeforeInsert(Cancel As Integer)
Me.Foto = " "
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Me.Requery
DoCmd.RunCommand acCmdRecordsGoToLast
End Sub


Hierbij geldt dat Foto een van de waarden uit de tabel is, die toch als een van de laatste zaken ingevuld zou worden. Kortgezegd wordt zo dus opslaan geforceerd, om vervolgens direct weer naar het laatste record (waarvoor dank! :)) gesprongen wordt (zijnde het nieuwe). De requery is nodig omdat anders nog niet de juiste ID gebruikt wordt voor de subformulieren.

Dit neemt niet weg dat ik - heel graag zelfs! - nog open sta voor betere oplossingen voor dit probleem.

[ Voor 2% gewijzigd door TromboneFreakus op 14-09-2005 15:09 . Reden: code=vb ]

Pagina: 1