Results 1 to 7 of 7

Thread: insert array in 1 statement in database

  1. #1

    insert array in 1 statement in database

    Hallo allemaal,

    Ik heb een array van een record (waarde, index, checked)
    Deze structuur wil ik opslaan in mijn database.
    Moet ik dit nu per regel middels een insert statement iedere regel apart opslaan.
    Uiteraard hoef ik dan de commit maar 1 keer uit te voeren.
    Of kan je alle data in 1x aan je database toevoegen.

    Ik hoor het graag

    Christian

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Je moet iets meer vertellen over je database...

    Je kunt, bij SQL, gewoon zeggen:
    SQL Code:
    1. INSERT INTO TABLE(KolomA, KolomB, KolomC)
    2. VALUES
    3. (Waarde1A, Waarde1B, Waarde1C),
    4. (Waarde2A, Waarde2B, Waarde2C),
    5. ...
    6. (WaardenA, WaardenB, WaardenC)
    Hoe je deze query wilt samenstellen is weer een ander verhaal, maar het hangt af
    van jouw situatie (waarover je echt even iets meer moet vertellen).
    TMemoryLeak.Create(Nil);

  3. #3
    Ik gebruik Firebird als database.
    Hoe ik het sql statement moet maken daar kom ik wel uit, maar ik ben vooral benieuwd waar de beperkingen zitten als je bovenstaande constructie toepast (hoe lang mag je sql statement zijn e.d.)
    Daarnaast wat werkt in de praktijk sneller 1 keer een heel lang statement naar de database sturen of een heel aantal korte statements?

  4. #4
    *+E13818MU01F0F* Norrit's Avatar
    Join Date
    Aug 2001
    Location
    Landgraaf
    Posts
    967
    1x lang statement is in principe sneller, maar niet altijd gewenst.
    Stel ik voeg 4 records toe, en de 3e gaat fout (om wat voor reden dan ook), wat moet er gebeuren? Moeten 1, 2 en 4 dan opgeslagen worden of moet de hele set afgekeurd worden? Misschien ook eens na gaan denken over transacties.
    Maar middels Delphi rechtstreeks insert statements maken? Nu doe ik al een tijdje niet meer veel met Delphi, en al zeker geen db werk, maar ik kan me niet herinneren dat ik destijds voor CRUD zelf insert statements zat uit te schrijven...
    Objective reality is a delirium caused by lack of alcohol in blood

  5. #5
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Ik ben niet bekend met FireBird en moet zeggen dat ikzelf ook nooit lange insert statements schrijf;
    normaal gesproken zijn enkele INSERT-ADOQueries achter elkaar ook snel (mits je niet continue een
    TADOQuery-component opnieuw aanmaakt, maar gewoon hergebruikt).
    TMemoryLeak.Create(Nil);

  6. #6
    En niet elke keer een (auto)commit tussen de inserts zet.

    Het beste is een insert-statement met parameters te maken en deze een prepare te geven. Daarna kun je vrij snel alle gegevens in de parameters zetten en een ExecSQL doen.

    Als je een vaste statement hebt om 3 of 4 vaste records toe te voegen dan kun je nog wel met één statement wegkomen. Anders zou ik het met een prepared INSERT doen in een lus en een commit erachter (of elke 1000 records o.i.d.).

  7. #7
    Uiteindelijk voor de optie van rvk gekozen.
    Aangezien ik niet weet hoeveel rijen data ik moet schrijven leek dat me de veiligste en snelste optie.

    Bedanklt voor het meedenken

Thread Information

Users Browsing this Thread

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

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
  •