Lazarus 2.0.12 (2021.02.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Adatbázisba új rekord beírása (MS-ACCESS 2010.) 2017 jan. 10 15:47 #2144

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 463
  • Köszönetek: 76
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.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64
Megköszönték: Hozso

Adatbázisba új rekord beírása (MS-ACCESS 2010.) 2017 jan. 10 01:22 #2142

  • Hozso
  • Hozso profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
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;

Adatbázisba új rekord beírása (MS-ACCESS 2010.) 2017 jan. 08 18:17 #2141

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 463
  • Köszönetek: 76
TSQLQuery.ApplyUpdates?
Lásd: DBGrid mentés
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64

Adatbázisba új rekord beírása (MS-ACCESS 2010.) 2017 jan. 08 12:01 #2140

  • Hozso
  • Hozso profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
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?
Mellékletek:

  • Oldal:
  • 1