Lazarus 2.0.10 (2020.07.11.)
Letöltés

question-circle Adatbázisba új rekord beírása (MS-ACCESS 2010.)

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Adatbázisba új rekord beírása (MS-ACCESS 2010.)

Az SQL nyelv lehetőséget ad arra hogy egyszerre több rekordot/sort adj az adatbázishoz. Ez esetben azonban a TSQLQuery paramétereket nem tudod úgy használni, ahogy az előbbi kódodban tetted.
INSERT INTO Table0 (MSB_PLC_Comm_0, MSB_PLC_Comm_1, MSB_PLC_Comm_2, MSB_PLC_Comm_3) VALUES ('1', '2', '3', '4'), ('11', '12', '13', '14'), ('21', '22', '23', '24')

A programodat a {$H+} fordítódirektívával elkészítve a karakterláncok AnsiString -ként lesznek kezelve, mely esetben nincs méretkorlátozás.
#2144
Megköszönték: Hozso

  • Hozso
  • Hozso profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 13
  • Köszönetek: 0

Hozso válaszolt a témára: Adatbázisba új rekord beírása (MS-ACCESS 2010.)

Közben meglett a megoldás: nem volt transaction.commit.

Ezzel viszont még nincs vége a dolognak. Azt mondjátok még meg nekem kérlek, hogy ha nagy mennyiségű adatot kell "belelapátolnom" az adatbázisba, akkor melyik módszer a leggyorsabb? Illetve melyik járható? Úgy értem, hogy most ugye megadok a programban egy stringet, amiben ott vannak paraméterek, amiket aztán megadok, hogy melyiket honnan vegye ki és írja be. Gondolom (persze lehet, hogy rosszul gondolom) van valamilyen korlátozás ennek a stringnek a hosszára. Menteni való adat rengeteg van, vegyesen. Előjeles kétbyte-osak, előjel nélküli kétbájtosak, byteosak, booleanek. Összesen egy beírásnál talán 10 kbyte is összejön. (Ez most nagyon saccolás, de a nagyságrend ide esik.)

Van-e esetleg másik, jobb, gyorsabb, praktikusabb módszer a nagy mennyiségű adat beömlesztésére? (Pl. előtte a kiírandókat tegyem ki egyetlen strigbe és utána, így adjam ki az SQL utasítást)

A kis tesztprogramom (ami végre már működik is) így néz ki:

SQLQuery.Close;
SQLQuery.SQL.Text:='insert into Table0 (MSB_PLC_Comm_0, MSB_PLC_Comm_1, MSB_PLC_Comm_2, MSB_PLC_Comm_3) values (:m1, :m2, :m3, :m4)';
SQLQuery.ParamByName('m1').AsInteger := 1;
SQLQuery.ParamByName('m2').AsInteger := 5;
SQLQuery.ParamByName('m3').AsInteger := 8;
SQLQuery.ParamByName('m4').AsInteger := 11;
SQLQuery.ExecSQL;
SQLTrans.Commit;
#2142

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Adatbázisba új rekord beírása (MS-ACCESS 2010.)

TSQLQuery.ApplyUpdates?
Lásd: DBGrid mentés
#2141

  • Hozso
  • Hozso profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 13
  • Köszönetek: 0

Hozso létrehozta a témát: Adatbázisba új rekord beírása (MS-ACCESS 2010.)

Adott egy nagyon "komoly" adatbázis: négy oszloppal, mindegyik egy byte értéket képvisel. MS-Access 2010-ben létrehozva. (Windows 7 alatt) Szeretnék rájönni, hogy miért nem tudok beleírni új sorokat. Az adatkapcsolat, csatlakozás elvileg működik.
Itt találtam (többek között) egy leírást a hozzáfűzésről:
wiki.freepascal.org/Working_With_TSQLQuery
(A lap közepe táján az "Insert query example" résznél.)

Ez alapján az alábbi programrészletet futtatva hibajelzés nélkül lefut a program. (Lásd a mellékelt txt fájlt.)

Lépésenként futtatva látom, hogy az adatbázisfájl mellett létrehoz egy másik fájlt (laccdb kiterjesztéssel). Az adatbázis tartalma azonban nem változik! Mit csinálok rosszul?
#2140
Mellékletek: