Ado recordsetből táblába

Ado recordsetből táblába
2011-03-18T14:13:59+01:00
2011-03-21T09:17:44+01:00
2022-11-21T05:40:32+01:00
dreher
Sziasztok!

Át lehet vinni recordsetből az adatokat egy táblába, úgy, hogy nem soroljuk fel a recordset mezőit?

tehát:
CurrentDb.Execute ("insert into table_name(column1,column2) values('" & rst.fields(0) & "','" & rst.fields(1) & "')")
ugyan működik, de nem jó, mert nem tudom előre, hogy hány mezőt tartalmaz a köv. recordset.

(bár ez: Recordset beszúrása táblába-Access probléma - Tudástár - Prog.Hu alapján nem fűzök sok reményt hozzá)

Köszi
Mutasd a teljes hozzászólást!
Nem, mindenképpen fel kell sorolnod, de az nem olyan nehéz.

dim f as adodb.field

for each f in rst.fields
strMezoNev=strMezoNev & f.Name & ","
strMezoErtek=strMezoErtek & f.Value & ","
next f

strMezoNev=left(strMezoNev,len(strMezoNev)-1)
strMezoErtek=left(strMezoErtek,len(strMezoErtek)-1)

strMezoNev-ben ott lesznek a mezőnevek egy listában ,-vel elválasztva, stMezoErtek-ben pedig az értékeik. Persze a kód nem copy-paste, mert pl. a sztringek idézőjeleit nem adtam hozzá.

Ha pedig arra van szükséged, hogy a mező lista alapján válaszd ki a mezőket, akkor meg rst.Fields(0) helyett írhatod az rst.Fields("column1")-et is. Nem tudom, hogy melyikre van most pontosan szükséged.
Mutasd a teljes hozzászólást!

  • mi a cél-adatbázis?

    Mert néha vannak opciók: becsatolod az access "adatbázist", majd SELECT * INTO-val megkreálod a táblát...
    Mutasd a teljes hozzászólást!
  • köszönöm!

    Ezt a listás megoldást én is próbáltam, de a válaszod rávilágított arra, hogy az adat típusára is ügyelnem kell.
    Azt pedig, hogy milyen tipusú adatot vár a tábla az adott mezőbe, egyszerűen a recordset mezőnevébe rakom.(persze biztos van ennél elegánsabb megoldás)

    For Each f In rsteszt.Fields
    string3 = string3 & IIf(f.Name = "N", f, "'" & f & "'") & ","
    Next f
    stb...

    csabi31: oracle adatbázisban van 30 egynéhány lekérdezés, amiknek az outputjai vannak accessben feldolgozva.
    automatizálni akartam kicsit a folyamatot.
    van ebben az esetben a recordseten keresztüli megoldásnál hatékonyabb?
    Mutasd a teljes hozzászólást!
  • Nézz körbe a field objektum tulajdonságai között, hátha találsz ott egy mező típusra utalót... Ha nem találnál, akkor nézd meg újra, metr ott van
    Mutasd a teljes hozzászólást!
  • És hogy avagdalás ne legyen ennyire bonyolult:
    for each f in rst.fields strMezoNev="," & strMezoNev & f.Name strMezoErtek="," & strMezoErtek & f.Value next f strMezoNev=mid(strMezoNev,2) strMezoErtek=mid(strMezoErtek,2)

    Mutasd a teljes hozzászólást!
  • hát persze, hogy ott van

    Micu: köszi az egyszerűsítési tippet

    két megjegyzés még a témához:
    bár az f.type jelzi a recordset adott mező típusának a kódját, nekem most arra volt szükségem, hogy a cél tábla mezőtípusát ismerjem(ui. a későbbi feldolgozás alatt pl valamely számot is karakterként kezelhet) és véletlenül észrevettem, hogy ha minden mezőt aposztrófok közé teszek akkor megfelelően bepakolja a táblába az adatokat(tehát pl ahova szám kell oda azt rakja be, függetlenül attól, hogy '' közé rakom). érdekes.

    azt hittem a rekordokon való végigszaladgálás lassít, de egy 200 ezer rekordos tesztfutáson még javult is pár mp-t a processz
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd