Toon posts:

[Delphi] Opslag gegevens in database

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig een programma te maken in delphi.
Het is de bedoeling dat je patient gegevens kunt opzoeken en medicatie kan voorschrijven.
Nu heb ik het zo gemaakt dat als men medicatie toevoegt dit per regel meteen wordt opgeslagen in de medicatie tabel. Op het moment dat de gebruiker het scherm afsluit of op cancel drukt verwijder ik de regels weer uit de tabel.
Dit vind ik niet echt een nette oplossing.
Mijn vraag is hoe zouden jullie dit doen?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Per definitie geen DBEdits gebruiken, wat je nu waarschijnlijk wel doet.

Neem gewoon normale edits, die je pas uitleest en in een query zet op het moment dat je op de OK-knop drukt. Bij Cancel hoef je dan niets te doen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
-NMe- schreef op zondag 04 juni 2006 @ 15:34:
Per definitie geen DBEdits gebruiken, wat je nu waarschijnlijk wel doet.

Neem gewoon normale edits, die je pas uitleest en in een query zet op het moment dat je op de OK-knop drukt. Bij Cancel hoef je dan niets te doen.
Zal het iets beter formuleren.

Nu is het zo dat je een patiënt nummer kunt invullen. Vervolgens heb ik daaronder een grid staan waar je een medicijn kunt aanklikken. Verder heb ik nog een veld dosering en aantal. Als deze gegevens zijn ingevuld klik je op toevoegen en het medicijn komt rechts op het scherm in een grid te staan. Vervolgens kan ik dan eventueel nog een medicijn toevoegen aan de patiënt.
Heb ik een aantal medicijnen aan de betreffende patiënt voorgeschreven en ben ik klaar met invoeren heb je de mogelijkheid tot opslaan en annuleren.

Nu is het zo dat er bij Opslaan een variable op true wordt gezet dat bij het sluiten van het form de gegevens niet worden verwijderd uit de tabel. Bij annuleren worden de betreffende voorgeschreven medicijnen wel verwijderd.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Ok, dan moet je geen DBGrid gebruiken maar een gewoon grid. De rest van mijn post blijft gewoon van toepassing? Een DBEdit/Grid/whatever voert wijzigingen meteen al uit in je database, en dat wil je niet. Je moet gewoon wachten met wijzigingen doorsturen totdat je klaar bent met wijzigen. Daarvoor heb je dus "gewone" componenten nodig.

Overigens komt daar ook weer problematiek bij kijken als je applicatie meerdere gebruikers tegelijk aan moet kunnen. Je zal dan records moeten gaan locken en dergelijke.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 20-02 13:48
Doe een starttransaction als je je scherm opent/creëert, en een rollback bij je cancel knop en een commit bij je ok knop. Is het ook niet nodig de dbcontrols te mijden, anders ga je het wiel opnieuw uitvinden.

[ Voor 27% gewijzigd door Pino op 04-06-2006 15:46 ]

"If you don't know where you are going, any road will take you there"


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Pino schreef op zondag 04 juni 2006 @ 15:44:
Doe een starttransaction als je je scherm opent/creëert, en een rollback bij je cancel knop en een commit bij je ok knop. Is het ook niet nodig de dbcontrols te mijden, anders ga je het wiel opnieuw uitvinden.
Uiteraard mits je database dat ondersteunt. Paradox doet daar bijvoorbeeld (geloof ik) niet aan.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Pino schreef op zondag 04 juni 2006 @ 15:44:
Doe een starttransaction als je je scherm opent/creëert, en een rollback bij je cancel knop en een commit bij je ok knop. Is het ook niet nodig de dbcontrols te mijden, anders ga je het wiel opnieuw uitvinden.
Werkt dat met een Access database met ADO componenten? Zo ja heb je misschien documentatie? Heb daar nooit mee gewerkt. Ondertussen ben ik al aan het googlen..

[ Voor 3% gewijzigd door Verwijderd op 04-06-2006 15:51 ]


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 20-02 13:48
Verwijderd schreef op zondag 04 juni 2006 @ 15:50:
[...]


Werkt dat met een Access database met ADO componenten? Zo ja heb je misschien documentatie? Heb daar nooit mee gewerkt. Ondertussen ben ik al aan het googlen..
Voor zover ik weet moet dat met access werken ja, paradox niet iig.

Ja dus, je hebt op de ADOConnection BeginTrans, CommitTrans en RollbackTrans methoden.

[ Voor 12% gewijzigd door Pino op 04-06-2006 15:55 ]

"If you don't know where you are going, any road will take you there"


Verwijderd

Topicstarter
Pino schreef op zondag 04 juni 2006 @ 15:53:
[...]


Voor zover ik weet moet dat met access werken ja, paradox niet iig.

Ja dus, je hebt op de ADOConnection BeginTrans, CommitTrans en RollbackTrans methoden.
TnQ khad het ook net gevonden.. Denk dat ik hier wel uit moet komen. Ik gebruik nu voor de hele applicatie 1 connection. Ik denk dat ik voor deze functie dan een apparte connection zal moeten gebruiken.

Bedankt voor de moeite

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 20-02 13:48
Verwijderd schreef op zondag 04 juni 2006 @ 15:59:
[...]

TnQ khad het ook net gevonden.. Denk dat ik hier wel uit moet komen. Ik gebruik nu voor de hele applicatie 1 connection. Ik denk dat ik voor deze functie dan een apparte connection zal moeten gebruiken.

Bedankt voor de moeite
Ik zou geen tweede connectie gebruiken, dan heb je straks weer andere problemen. Je kunt beter je transacties goed plannen en zo bij alle acties op je database transacties gebruiken, het enige is dat je ze even moet starten, maar daardoor ga je ook beter opletten wat je eigenlijk aan het doen bent met je DB.

Lees dit ook even: http://nl.wikipedia.org/wiki/Transactie_(dataopslag)

"If you don't know where you are going, any road will take you there"


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Pino schreef op zondag 04 juni 2006 @ 15:44:
Doe een starttransaction als je je scherm opent/creëert, en een rollback bij je cancel knop en een commit bij je ok knop. Is het ook niet nodig de dbcontrols te mijden, anders ga je het wiel opnieuw uitvinden.
Aaarg.. als je jezelf graag in de vingers wilt snijden moet je dat soort dingen doen. (Been there.. done that, unexplainable errors all over the place).

Ik zou gewoon objecten ophalen uit een OR-Mapper. Doe op die objecten je wijzigingen en geef ze wel of niet terug aan je ORM, al naar gelang je 't daadwerkelijk wilt opslaan ja of nee.

Siditamentis astuentis pactum.


Verwijderd

Topicstarter
Pino schreef op zondag 04 juni 2006 @ 16:08:
[...]

Ik zou geen tweede connectie gebruiken, dan heb je straks weer andere problemen. Je kunt beter je transacties goed plannen en zo bij alle acties op je database transacties gebruiken, het enige is dat je ze even moet starten, maar daardoor ga je ook beter opletten wat je eigenlijk aan het doen bent met je DB.

Lees dit ook even: http://nl.wikipedia.org/wiki/Transactie_(dataopslag)
Heb ADOConnection.BeginTrans; gezet bij de oncreate van het form wat ik oproep.
Vervolgens krijg ik de fout als ik een rollbacktrans. Hij geeft de melding dat een commit en een rollback niet kan beginnen alvorens een transaction te beginnen.
Als ik dit bij de oncreate zet moet dat toch gewoon goed zijn?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 04 juni 2006 @ 16:38:
[...]
Heb ADOConnection.BeginTrans; gezet bij de oncreate van het form wat ik oproep.
Vervolgens krijg ik de fout als ik een rollbacktrans. Hij geeft de melding dat een commit en een rollback niet kan beginnen alvorens een transaction te beginnen.
Als ik dit bij de oncreate zet moet dat toch gewoon goed zijn?
Je form wordt in het begin al gecreëerd, eenmalig. Je zal waarschijnlijk OnShow moeten hebben, en waarschijnlijk niet eens èlke OnShow.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
-NMe- schreef op zondag 04 juni 2006 @ 16:48:
[...]

Je form wordt in het begin al gecreëerd, eenmalig. Je zal waarschijnlijk OnShow moeten hebben, en waarschijnlijk niet eens èlke OnShow.
Ik zoek wel een anderee oplossing want dit wil niet werken.

Heb nu volgens delphi.about.com een functie gemaakt waar ik een query uitvoer. Ik begin met een begintrans.
Vervolgens voer ik een sql insert opdracht uit. En daarna een Committrans.
Ook dan krijg ik diezelfde foutmelding.

Verwijderd

Pino schreef op zondag 04 juni 2006 @ 15:44:
Doe een starttransaction als je je scherm opent/creëert, en een rollback bij je cancel knop en een commit bij je ok knop. Is het ook niet nodig de dbcontrols te mijden, anders ga je het wiel opnieuw uitvinden.
handig , bij meerdere gebruikers staat iedereen binnen een halfuur stil.
Pagina: 1