[delphi][ADO]Deleten over twee tabellen

Pagina: 1
Acties:

  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 05-09 10:20
Ik heb twee tabellen in Access, met een foreign key er tussen. Als ik de volgende code uitvoer, krijg ik een foutmelding over dat er nog waardes in de Detail-tabel zouden zitten. Als ik het programma afsluit en opnieuw opstart mag ik het record wel verwijderen. Gaan de twee deletes te snel achter elkaar??
code:
1
2
3
4
5
6
7
8
9
10
11
12
  with ADOQuery do
  begin
    SQL.Clear;
    SQL.Add('delete from playlist_entries ' + 
        'where playlist = ' +
        IntToStr(ADOTable1.FieldByName('id').AsInteger));
    Prepared := true;
    i := ExecSQL;
    Close;
  end;
  ADOTable1.Requery();
  ADOTable1.Delete;

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Begrijp ik het goed dat het eerste statement de details verwijderd en het tweede ADOTable1.Delete het master record.

  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 05-09 10:20
Dat klopt helemaal.

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Ik ken geen ADO dus volgende vragen dom:
Ik zie een Close: Waar is de Open?
Is die Requery nodig? Doet die misschien een impliciete Rollback?
Wie weet helpen mijn domme vragen.

  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 05-09 10:20
Die Close en Requery heb ik er ingezet omdat ie het niet deed. Ik dacht 'baat het niet, het schaad ook niet'. kun je dus wegdenken...

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Even iets anders, maar wel makkelijk: gebruik parameters:
code:
1
2
3
4
5
SQL.Clear;
    SQL.Add('delete from playlist_entries ' +
        'where playlist = :playlist);

    ParamByName('playlist').Value := ADOTable1.FieldByName('id').AsInteger;

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 05-09 10:20
Tsja, da's inderdaad netter... Maar net programmeren voor m'n hobbieprojecten.... :)

  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 05-09 10:20
Ik heb (volgens mij) de oplossing. Ik heb op het hoofdform een ADOConnection-component gezet, met daarin de connectstring. Ik laat nu alle componenten naar dit component verwijzen, ipv overal de connectstring in te zetten... Schijnt nu goed te gaan...

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 01:20

Delphi32

Heading for the gates of Eden

Op dinsdag 18 juni 2002 19:46 schreef PietM het volgende:
Ik heb (volgens mij) de oplossing. Ik heb op het hoofdform een ADOConnection-component gezet, met daarin de connectstring. Ik laat nu alle componenten naar dit component verwijzen, ipv overal de connectstring in te zetten... Schijnt nu goed te gaan...
Precies, want waar jij last van had was een session-probleem. De session waarmee ADOTable1 werkte was een 'oudere' dan de session waarmee je de detail records verwijderde. De Session van ADOTable1 wist dus niet dat ze verwijderd waren. Vandaar dat je oplossing werkt (en de enige juiste oplossing is).

  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 05-09 10:20
Yep, weer wat geleerd.... [zo leer je elke dag wat...]
Pagina: 1