Results 1 to 11 of 11

Thread: Hoe Insert twee tabellen tegelijk ?

  1. #1
    Member
    Join Date
    Feb 2002
    Location
    Netherlands
    Posts
    28

    Angry Hoe Insert twee tabellen tegelijk ?

    Ik heb een form voor het invullen van gegevens die betrekking hebben op de volgende twee tabellen :

    KLANT (Klantnr , naam, adresnr)
    Adres (Adresnr , straat, postcode, landcode)

    Wanneer ik een nieuwe klant wil toevoegen met al zijn gegevens doe ik TableKlant.Insert en TableAdres.Insert. Als ik nu in de eerste DBEdit een klantnr invul
    en dan overga naar de tweede DBEdit voor een naam in te vullen krijg ik automatisch
    een Cancel op de TableAdres zodat ik de adres gegevens niet meer kan invullen ??!!

    Hoe kan dit !!!???!!!

  2. #2
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    voor de iets ingewikkeldere operaties gebruik ik zelf altijd gewoon zelf geschreven code. Ik ben helemaal niet zo kapot van de db controls. Die gebruik ik alleen maar voor het viewen van data. de rest doe ik altijd lekker zelf. Dan heb je gewoon iets meer controle over de zaken. Ik wil hiermee niet zeggen dat de dbcontrols slecht zijn, maar ik gebruik ze gewoon liever niet...
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  3. #3
    Member
    Join Date
    Feb 2002
    Location
    Netherlands
    Posts
    28

    Unhappy

    Interessant Walterheck, maar kun je iets meer uitleg geven want nu is mijn probleem nog niet opgelost !

  4. #4
    Member
    Join Date
    Feb 2002
    Location
    Netherlands
    Posts
    28

    Unhappy

    Interessant Walterheck, maar kun je iets meer uitleg geven want nu is mijn probleem nog niet opgelost !

  5. #5

    twee tabellen

    ik zou het met een sql statement doen als je twee tabellen hebt
    en dan in een form of 2 maakt eigenlijk niet uit maar die adresnr van jou eerste tabel moet je dan als key gebruiken voor je tweede tabel maar kijk een in de db wizard daar combineer je heel snel en simpel 2 tabellen en kan je in de source kijken hoe je het handmatig moet doen

  6. #6
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127
    Marco,

    Hierbij een poging in 'pseudo' code.

    1) controleer of tabel open is ?
    2) zonodig open tabel.
    3) controleer of tabel niet in insert of edit mode staat ?
    4) zoniet insert dan een record ? zoja cancel dan tabel & insert daarna een record.
    5) tabel.fieldbyname('veldnaam').asstring of asinteger := waarde van object of invoer
    6) vul alle overige velden op bovenstaande manier.
    7) tabel post.

    en dit dus 2 keer uitvoeren, dus voor elke tabel een stukje.

    Bij behoefte aan voorbeeld, geef maar even een brul.

    Succes

    Richard
    RLD

  7. #7
    Member
    Join Date
    Feb 2002
    Location
    Netherlands
    Posts
    28

    Question

    Graaaaag een voorbeeld Richard, maar misschien toch ook nog iets meer uitleg van mijn kant :

    1-Form en data zijn gescheiden d.w.z. Tables en bijbehorende DataSources bevinden zich in een DataModule.

    2-De gegevens die op deze form moeten worden ingevuld bevinden zich in twee tabellen, die kan ik toch niet gaan verdelen over twee forms want dat lijkt mij niet erg gebruikersvriendelijk.

    3-Wanneer ik eerst gegevens invul in de DBEdit's die gekoppeld zijn aan de TableAdres en dan overga naar een DBEdit die gekoppeld is aan de TableKlant gebeurt er geen TableAdres.Cancel. Wanneer ik dan in de eerste DBEdit een klantnr invul en dan overga naar de tweede DBEdit voor een naam in te vullen krijg ik automatisch een TableAdres.Post !!???

    Hopelijk is dit wat duidelijker.

    Marco

  8. #8
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127
    Marco,

    allereerst zou ik persoonlijk zoals Walterheck het al zei, in deze situatie geen
    gebruik meer maken van DBaware objecten.

    Dus ik zou zeggen vervang alle dbaware objecten voor normale objecten en stamp
    ze dan via code zelf je database in.

    een ruw beginnetje uit het 'hoofdje'
    Code:
    procedure TForm.Button1Click(Sender: TObject);
    begin
      try
        if not DataModule.Table1.Active then DataModule.Table1.Active := True;
        if DataModule.Table1.State in [dsInsert, dsEdit] then DataModule.Table1.Cancel
        else
          begin
            DataModule.Table1.Insert;
            DataModule.Table1.FieldByName('VeldNaam1').AsString := Edit1.Text;
            DataModule.Table1.FieldByName('VeldNaam2').AsString := Edit2.Text;
            DataModule.Table1.FieldByName('VeldNaam3').AsString := Edit3.Text;
            DataModule.Table1.Post;
          end;
      except
         ShowMessage('Fout Melding.');
      end;
    end;
    Deze procedure zou je dus bv. 2 keer 'kunnen' maken voor beide tabellen.
    Op deze manier kun je al je niet DBAware objecten zo in de DB stoppen, waarbij
    natuurlijk een hoop variatie's mogelijk zijn.

    reactie op jouw opmerkingen:
    1) is verwerkt in hierbovenstaande.
    2) gegevens lekker op 1 form laten staan en in 1 of meerdere procedure's je beide
    tabellen aanspreken, dus zonder DBAware comps.
    3) is zonder dbaware niet meer van toepassing.

    Ik hoop dat je hier iets aan hebt, nogmaals het is wat ruw allemaal, maar het geeft
    je een beetje een indicatie.

    We horen het wel.

    Succes

    Richard
    RLD

  9. #9
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    zoals ik al zei:
    als je twee velden uit verschillende tabellen wil invullen:

    Code:
    procedure posten;
    begin
      try
        table1.insert;
        table2.insert;
        table1nummer.asstring:=edit1.text;
        table2nummer.asstring:=edit2.text;
        table1.post;
        table2.post;
      except
       on e: exception do
        showmessage('foutje!');
      end;
    end;
    en dan nog een beetje tweaken, is maar "een ruime schatting"
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  10. #10
    Heb je een master/detail relatie gelegd via de datasource? Volgens mij is het zo dat een regel toevoegen op de master een cancel op de detail doet. Als je inderdaad een master/detail relatie hebt liggen zul je eerst de key van de master moeten invullen voor je een detailregel kunt invullen.
    Marcel

  11. #11
    Member
    Join Date
    Feb 2002
    Location
    Netherlands
    Posts
    28

    Exclamation

    Bedankt voor de de tips walter en richard maar ik heb intussen het probleem opgelost, maar toch met DBEdits. Ik was jullie eigelijk vergeten te zeggen dat zich op dezelfde form ook nog een DBGrid bevind voor de klanten.

    In deze DBGrid bevond zich een LoopUpField die het probleem veroorzaakte, je kunt namelijk niet in een tabel opzoeken als deze zich in insert/edit-mode bevindt !!!

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. meerdere tabellen selecteren
    By Kingetjuh in forum Databases
    Replies: 6
    Last Post: 21-Aug-03, 16:21
  2. Replies: 4
    Last Post: 04-Aug-03, 16:49
  3. Tabellen sluiten als applicatie sluit
    By StephanShagwell in forum Databases
    Replies: 5
    Last Post: 26-Mar-03, 09:18

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •