[Delphi/ADO] duplicate data checken

Pagina: 1
Acties:

  • MisterE
  • Registratie: April 2002
  • Laatst online: 28-08 19:15
...ik ben laatst een beetje met databases gaan spelen, ben dus nog niet zo ver (dus ga niet zitten zeggen RTFM etc.)

Ik heb een ADO tabel waarvan 2 fields de primaire key zijn.
Nou crasht het programma wanneer ik 2x dezelfde data invul.

Hoe kan ik dit vermijden?? ik heb eens zo'n BDE en ADO tutorial gevolgd maar daar staat niet zo veel in.
Alleen dat je 3 manieren hebt:
- Table-based validation.
- Field-based validation.
- Record-based validation.

Nou staat er in die tutorial dat je record based moet gebruiken met meerdere velden, en ik heb wel iets gezien met 'OnValidate' maar het zend niet een variabele mee zodat je weet of de data correct was...

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 02-09 17:49

mOrPhie

❤️❤️❤️❤️🤍

Nou, de keys samen moeten uniek zijn. Als je dan dolgraag die 2 als keys wil hebben zou je er een 3e veld bij moeten nemen met automatische indentie (het ID-veld) en die ook als key definieren. Persoonlijk zou ik alleen het ID-veld als key definieren dus. Dan heb je namelijk altijd een uniek record, wat erg belangrijk is bij het terugvinden van je data.

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • whoami
  • Registratie: December 2000
  • Laatst online: 08:43
Op zondag 16 juni 2002 11:01 schreef MisterE het volgende:

Ik heb een ADO tabel waarvan 2 fields de primaire key zijn.
Nou crasht het programma wanneer ik 2x dezelfde data invul.
Tuurlijk, da's nu net het concept van primary keys. Ze moeten uniek zijn.

https://fgheysels.github.io/


Verwijderd

Je zou een tabel.locate kunnen doen op de tabel, om zo te controleren of waardes al bestaan...

Of alles botweg in een try...except te gooien :z
(erg bot, maar werkt wel)

  • MisterE
  • Registratie: April 2002
  • Laatst online: 28-08 19:15
Ik snap wel dat deze keys niet hetzelfde mogen zijn (dat was juist mijn bedoeling)
Ik snap alleen niet hoe ik duplicate data kan afvangen.

heb nou zoiets als dit:

procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
(* Field 'Artist' and 'Title' together makes the primairy key *D
begin
Try
ADOTable1.Edit;
ADOTable1.Post;

Except
ShowMessage('fout');
End;
end;

Maar dit veroorzaakt dat het proggie crasht.

/* MisterE denkt er de ballen van te snappen :(

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 11:17

Creepy

Tactical Espionage Splatterer

En waar/hoe crasht je prog dan??
code:
1
2
3
4
5
6
table.edit
try
   table.post
except
    // doe iets
end

zou moeten werken lijkt me..

edit:

Je zet een .post in je ttable.beforepost.

Resultaat: Jij doet table.post. De beforepost wordt aangeroepen, daarin staat een .edit en een .post.... door die .post wordt de .beforepost weer aangeroepen.. etc. etc. etc.


Je post toch ook nog ergens anders je table lijkt me??

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • MisterE
  • Registratie: April 2002
  • Laatst online: 28-08 19:15
als ik deze code weglaat werkt het program (op duplicate data na) als ik hem invoeg dan crasht het programmma zonder melding, in delphi krijg ik een warning 'EStackOverflow'

  • whoami
  • Registratie: December 2000
  • Laatst online: 08:43
Zie Creepy waarom hij een Stack Overflow error geeft...
In je before post doe je een post, dus ga je gewoon oneindig veel keren posten...

https://fgheysels.github.io/


  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Op maandag 17 juni 2002 21:30 schreef MisterE het volgende:
Ik snap wel dat deze keys niet hetzelfde mogen zijn (dat was juist mijn bedoeling)
Ik snap alleen niet hoe ik duplicate data kan afvangen.

heb nou zoiets als dit:

procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
(* Field 'Artist' and 'Title' together makes the primairy key *D
Maar als ik het goed lees heb je nog geen primaire key voor deze twee verschillende onderdelen samen? Als dat zo is moet dat dus ook.
Trouwens als je de ID's in een andere tabel opslaat om een relatie te creeren is het juist mogelijk dat bijvoorbeeld een artiest meerdere keren kan voorkomen (zoek naar een vorige topic van mij, daar wordt over dit ontwerp gepraat)

Maar over de check, ik deed in delphi gewoon een query met een het volgende:
SELECT * FROM tabel WHERE ID = ...
IF query.IsEmpty THEN
BEGIN
code om te te voegen
END
ELSE
Melding
Pagina: 1