Firebird adatbázis kapcsolása MS Accesshez II.

Firebird adatbázis kapcsolása MS Accesshez II.
2010-01-03T18:19:28+01:00
2010-01-13T10:39:41+01:00
2022-11-16T06:45:35+01:00
kalmarr
Sziasztok!

Ezzel a témával kapcsolatban nyitottam már egy forum topicot TOPIC, de a moderátor bezárta, mert mountolni szerettem volna az MS Accesshez. Most már kódban szeretném megoldani a kérdést.

Amit szeretnék: Szeretnék egy Firebird adatbázist csatolni egy Access adatbázishoz, hogy az aktuális adatokkal tudjak dolgozni az Accessben.

Kaptam egy kód sort ezt szeretném felhasználni a Firebird teszt adatbázisához.


Dim conn As ADODB.Connection, rst As ADODB.Recordset Dim row As Long Set conn = New ADODB.Connection conn.Open "DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=C:\Program Files\Firebird\Firebird_2_1\examples\empbuild\Employee.fdb" Set rst = New ADODB.Recordset rst.Open "Select * From CUSTOMER", conn, adOpenDynamic, adLockOptimistic row = 5 With Me Do While Not rst.EOF . Range("A" & CStr(row)).Value = rst.Fields(1) .Range("B" & CStr(row)).Value = rst.Fields(2) .Range("C" & CStr(row)).Value = rst.Fields(3) .Range("D" & CStr(row)).Value = rst.Fields(4) .Range("E" & CStr(row)).Value = rst.Fields(5) .Range("F" & CStr(row)).Value = rst.Fields(6) rst.MoveNext row = row + 1 Loop End With

Logikája: Bevallom nem pontosan értem, hogy mit csinál. Ha jól gondolom a teszt adatbázis CUSTOMER tábláját fel tölti a "row" változóba (tömbbe), azaz az aktuális állást átmásolja és nem lesz online (aktuális) az adatbázissal, csak addig, amíg másolja.

1. Kérdésem, ha feltelepítem a Firebird ODBC-jét, akkor mit kell bekapcsolnom az ACCESS - Referenceben?

2. Ha a fenti kód sort beszúrom, akkor a következő hibát kapom: "User-defined type not defined" gondolom az első kérdésem miatt !

Várom a segítséget a megértéshez, illetve a végső megoldáshoz vezető utat !

KALMI
Mutasd a teljes hozzászólást!
és megtaláltad már az activeX-et?
ki van jelölve?

a kód továbbmegy már a Dim conn As ADODB.Connection soron?

-esetleg csatlakozzak a gépedre és megoldjam? -óra/2000-ért nagyon szívesen
Mutasd a teljes hozzászólást!

  • Ez nekem:
    Range("A" & CStr(row)).Value
    Elég Excelnek tűnik.

    Hol itt az Access?
    ---

    . Range("A" & CStr(row)).Value = rst.Fields(1)

    helyett
    .Range("A" & row).Value = rst.Fields(1)
    vagy
    .cells(row,"A").value=rst.Fields(1)

    ----

    1. Kérdésem, ha feltelepítem a Firebird ODBC-jét, akkor mit kell bekapcsolnom az ACCESS - Referenceben?

    Semmit pluszt. ADODB-el vagy DAO-al elérheted.
    Ha meg eleve becsatolod a táblák közé, akkor még annyit se kell tenned, egyből hastnálhatod táblaként.

    2. Ha a fenti kód sort beszúrom, akkor a következő hibát kapom: "User-defined type not defined" gondolom az első kérdésem miatt

    Szerintem Access-ben nagyon sok range nincs.
    Meg az űrlapon (Me) se.
    Melyik sorra kaptad a hibát?
    Mutasd a teljes hozzászólást!
  • Huuu. lebuktam... Egy szót sem értek az említett kódsorból. Ezt csak kaptam az említett forumon, hogy nézegessem, mert benne van a megoldás. (Nagyon keresem )

    Őszintén nekem bármilyen kód sor megtenné, hogy tudjak csatlakozni a Firebird-hez. :) (Sőt a puszta mountolás is érdekelne, mert az is bőven megtenné, de valamiért ODBC-n keresztül nem tudok csatlakozni az adatbázishoz, ezért próbálom kódból megoldani a csatlakozást. pl: MySQL-t már sikerült csatolnom az ACCESS-hez, ezért feltételezem a lépéseket jól csinálom, de ne megy)

    1. - OK akkor ez nem lehet hiba.
    2. - Az első utasítás -Dim conn As ADODB.Connection,- van kiszínezve .

    Szóval lehet célszerű lenne az elejéről kezdeni :), meg persze kérnék egy kis segítséget az ismereteim feltöltéséhez :)

    Üdv.

    KALMI

    Mutasd a teljes hozzászólást!
  • ActiveX Data Object x.xx-nek kell bekapcsolva lennie az ADODB.Connection használatához.

    De onnantól a range-nek semmi értelme, mert az tiszta Excel.
    Az "rst" részek még használhatóak
    -----
    Nulláról:
    1. Windows ODBC-ben felvetted a kapcsolatot? (Vezérlőpult > felügyeleti eszközök > ODBC.....)

    2. Ha igen, akkor Fájl > Külső adatok átvétele > csatolás
    A Fájltípus végén ott az ODBC és kiválasztod.
    Mutasd a teljes hozzászólást!
  • ActiveX Data Object

    - Ilyet nem találtam a Reference-ben (milyen néven van). Honnan célszerű leszedni?

    Mi az a range ??? Mit csinál?

    Igen, teszteltem. Igaz azzal a kérdéses adatbázissal, amit meg szerettem volna nyitni. Ott a következő hiba jön a tábla kiválasztása után:
    ---
    A MS Office Access nem találja a következő objektumot: 'Kiválasztott tábla'. ellenőrizze a megadott nevet és útvonalat, hogy az objektum létezik-e.
    ---

    Generál egy táblát a következőkkel:

    ---
    Objektumnév Objektumtípus Hiba oka Idő
    CustomerCategory Tábla Az objektumot nem sikerült megnyitni 2010.01.03. 21:24:50
    ---

    Megjegyzem a teszt táblát sikerült megnyitnom (ezt csak most próbáltam ki )

    A kérdéses adatbázist gond nélkül meg tudom nyitni (tartalommal együtt!!!) a "Firebird Maestro"-ban, de Access hibát ad vissza.

    Mit kellene csinálni???


    KALMI
    Mutasd a teljes hozzászólást!
  • :) Hm... kérhetem segítségedet?
    Mutasd a teljes hozzászólást!
  • Microsoft ActiveX ...

    A range egy excel-es cucc. Mint láthatod(vagy láthatnád, ha utána néznél) cellákra tudsz vele hivatkozni.
    Pl: Range("A1").Value = "labda"... az excel munkalapon a bal felső sarok első cellájába beleírtuk, hogy "labda"
    De neked ez abszolút nem kell.

    Láttam az előző témát, és akitől kaptad a kódot az is odaírta, hogy ebből neked csak a megnyitás (conn.open) kell. Mert amúgy excel-es a kód.

    Amúgy ha csak olvasni akarod az adatokat, akkor elég ennyi:
    rst.Open "Select * From CUSTOMER", conn

    nem kell az adOpenDynamic, adLockOptimistic beállítás.
    Mutasd a teljes hozzászólást!
  • .Range("A" & CStr(row)).Value = rst.Fields(1)
    "Ha jól gondolom a teszt adatbázis CUSTOMER tábláját fel tölti a "row" változóba (tömbbe), azaz az aktuális állást átmásolja"

    akkor egy kis oktatás, mert iszonyatosan hézagos a tudásod:
    A fenti kódban mi is a row?
    Egy egyszerű számláló. Láthatod, hogy először kapott egy 5-ös értéket, aztán a ciklusban mindig egyet hozzáadnak. (row=row+1)
    Tehát a fenti kód így néz ki, ha behelyettesítjük a row értékét:
    .Range("A5").Value = ...

    tehát az excel munkalap A5-ös cellája fog értéket kapni. Később az A6-os, A7-es... stb.
    A CStr függvény pusztán szöveggé alakítja a row értékét.(fölösleges)

    Más:
    miért kezdődik ponttal a parancssor?
    láthatsz egy Width Me sort a Do While sor előtt.
    Ez a Width elintézi, hogy innentől kezdve elég legyen egy pontot írni a me.Range... helyett
    Ilyen egyszerűsített kóddal accessben is találkozhatsz:

    width forms!másikűrlap!mezőNeve .backcolor=0 .value="labda" end with

    tök jó, mert nem kellett mindig kiírnom, hogy
    forms!másikűrlap!mezőNeve.backcolor=0
    forms!másikűrlap!mezőNeve.value="labda"
    Mutasd a teljes hozzászólást!
  • [törölve]
    Mutasd a teljes hozzászólást!
  • Így van "hézagosan tudok" . Sőt írták is, hogy sajna Excel kódot kaptam (próbálok dekódolni). Engem egy Accesses megoldás érdekelne.
    Mutasd a teljes hozzászólást!
  • Már megkaptad, ott van a nyitó hozzászólásodban (conn.open...)

    Egyébként Access VBA-ban az ADODB alapból bent van a referenciák között (2003-ig bezárólag biztosan), nem kell semmit sem bekapcsolni.
    Mutasd a teljes hozzászólást!
  • és megtaláltad már az activeX-et?
    ki van jelölve?

    a kód továbbmegy már a Dim conn As ADODB.Connection soron?

    -esetleg csatlakozzak a gépedre és megoldjam? -óra/2000-ért nagyon szívesen
    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