Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 27 odgovora
  • 8.377 pregleda

Najnovija ↓

Izmjena Access-ove linked tabele iz koda 05.09.2013. u 11:06 · pre 160 meseci #1
Pozdrav!

U okviru Access aplikacije imam tabelu link-ovanu sa odgovarajucom tabelom u Oracle bazi podataka.
Potrebno je da realizujem VBA kod koji ce u zavisnosti od odabrane opcije tabelu linkovati sa produkcionim ili
testnim Oracle serverom (oba servera imaju potrebnu tabelu).

Koristio sam kod:

Dim Db As Database
Set Db = CurrentDb()

Db.TableDefs("ACCESS_TABLE_NAME").Connect = "ODBC;DSN=DSN_CONN;SERVER=MAINSERVER;UID=USERNAME;PWD=PASSWORD;TABLE=ORACLE_TABLE_NAME"
Db.TableDefs("ACCESS_TABLE_NAME").RefreshLink
Db.Close

za linkovanje na produkcioni server. Kod za link-ovanje sa testnim serverom je identican samo u konekcionom stringu stoji SERVER=TESTSERVER.
Medjutim svaki put kada izvrsim kod vidim da linkovanje nije izvrseno (na osnovu podataka u Acces tabeli i njenih kolona). Tek nakon sto resartujem Access aplikaciju
i izvrsim Resfresh pomocu "Linked Table Manager-a" tabela se zaista linkuje.

Imate li prijedloge?
Re: Izmjena Access-ove linked tabele iz koda 05.09.2013. u 18:03 · pre 160 meseci #2
Ako sam Vas dobro razumeo Vama treba nesto sto sam radio za linkovnje na SQL Server. Imate primer "LinkSQLServer.zip" na lokaciji http://zoraneremija.wix.com/eremijacv#!downloads/c1qda

Posto nemam Oracle instalisan ne mogu da probam. Pogledajte KonektString u kodu, treba da ga promenite sa parametrima za Oracle.
Potpis
http://zoraneremija.wix.com/eremijacv
Re: Izmjena Access-ove linked tabele iz koda 06.09.2013. u 09:20 · pre 160 meseci #3
Preuzeo sam dokument.

Da provjerim, komandom

DoCmd.TransferDatabase acLink, "ODBC Database", KonektString, acTable, "sysobjects", "LinkTables", , True

Vi link-ujete Access-ovu "LinkTables" tabelu sa "sysobjects" tabelom na MS SQL Serveru. Je li tako?
Re: Izmjena Access-ove linked tabele iz koda 06.09.2013. u 10:53 · pre 160 meseci #4
Odgovor je NE.
Parametar "sysobjects" je SQLServer sistemska tabela u kojoj se nalazi popis svih tabela i pogleda baze koju posmatramo. Pretpostavljam, jer odavno nisam radio s Oracle jos od verzije 6, da Oracle takodje ima neku sistemsku tabelu u kojoj ima popis svih tabela i pogleda i na mesto tog parametra "sysobjects" treba upisati ime Oracle sistemske tabele.

Parametar "LinkTables" je preimenovan naziv sistemske tabele "sysobjects", sto znaci da ce se u Access-u linkovana tabela zvati ne izvorno kako se zove u Oracle vec ce joj ime biti LinkTables.

Kada se linkuje ta tabela onda treba da korigujete upit QLinkTables prema pravim nazivima kolona koji su u toj linkovanoj tabeli...
Potpis
http://zoraneremija.wix.com/eremijacv
Re: Izmjena Access-ove linked tabele iz koda 06.09.2013. u 11:02 · pre 160 meseci #5
OK, ali nakon izvrsenja komande u Access-u cemo imati tabelu "LinkTables" sa istom strukturom i podacima kao
"sysobjects" SQL server sistemska tabela?
Re: Izmjena Access-ove linked tabele iz koda 06.09.2013. u 11:14 · pre 160 meseci #6
Tako je s time sto struktura i naziv tabele u Oracle nije ista najverovatnije. SQLServer-ova tabela "sysobjects" u sebi ima popis vise razlicitih objekata koji se dikriminiraju putem atributa "xtype". Koliko sam video na internetu Oracle ima posebnu tabelu za listu tabela i posebnu tabelu za listu View.
Potpis
http://zoraneremija.wix.com/eremijacv
Re: Izmjena Access-ove linked tabele iz koda 06.09.2013. u 11:19 · pre 160 meseci #7
Probao sam s Vasom komandom, s tim sto sam izmjenio konekcioni string i nazive tabela.
Medjutim nakon izvrsenja komande koja treba da poveze Access tabelu sa testnim serverom vidim
da je i dalje povezana sa tom tabelom na produkcionom serveru (na osnovu podataka i strukture).
Re: Izmjena Access-ove linked tabele iz koda 06.09.2013. u 11:31 · pre 160 meseci #9
Unio sam isti konekcioni string koji koristim za povezivanje iz Accessa na Oracle bazu i izvrsavanje upita
(taj dio funkcionise).

KonektString = "ODBC;DSN=DSN;SERVER=TESTSERVER;UID=USERNAME;PWD=PASSWORD;"
DoCmd.TransferDatabase acLink, "ODBC Database", KonektString, acTable, "Oracle_Table_Name", "Access_Table_Name", , True

Na Oracle serveru koliko vidim ne postoje odvojene baze podataka (kao kod MS SQL Servera) nego samo spisak objekata.
Re: Izmjena Access-ove linked tabele iz koda 09.09.2013. u 08:47 · pre 160 meseci #12
davno je to bilo, al evo kako sam se spajao na Oracle i pretrazivao po systemskoj tabeli Tabele, Viewe ......

trt = "Driver={Microsoft ODBC for Oracle}; Server=" + serv + "; Uid=" + loz + "; Pwd=" + pas

Dim wstemp As Workspace
Dim dbtemp As Database
Dim rstemp As Recordset

Set wstemp = DBEngine.Workspaces(0)

Set dbtemp = wstemp.OpenDatabase("", True, True, trt)

Set rstemp = dbtemp.OpenRecordset("select * from all_objects", dbOpenDynaset, dbSQLPassThrough)


If pcek = -1 And tcek = -1 And scek = -1 Then
rstemp.MoveFirst

Do While Not rstemp.EOF()

imeow = rstemp.Fields(0)
If imeow = loz Then

imetabele = rstemp.Fields(1)

If rstemp.Fields(3) = "TABLE" Then
brtab = brtab + 1
End If

If rstemp.Fields(3) = "VIEW" Then
brview = brview + 1
End If
If rstemp.Fields(3) = "SYNONYM" Then
brsyn = brsyn + 1
End If
If rstemp.Fields(3) = "TABLE" Or rstemp.Fields(3) = "VIEW" Or rstemp.Fields(3) = "SYNONYM" Then
aa = aa + rstemp.Fields(3) + ":" + imetabele + ";"
End If
End If
rstemp.MoveNext

Loop
End If


i drugi primjer linkovanja

serv = curserver
loz = curowner
pas = curowner
imelink = loz + "." + tabele

oddb = "ODBC;DSN=" + serv + "; Uid=" + loz + "; Pwd=" + pas + ";DATABASE=" + serv
DoCmd.TransferDatabase acLink, "ODBC Database", oddb, acTable, imelink, "orakle"
imptrt = "select * from orakle"



možda ti pomogne, pozdrav
Re: Izmjena Access-ove linked tabele iz koda 09.09.2013. u 15:38 · pre 160 meseci #14
Ako tabela tvrdoglavo odbija da promeni link, zasto ne obrises tabledef pa je onda zakacis ponovo, iz izvora koji ti treba?
Re: Izmjena Access-ove linked tabele iz koda 10.09.2013. u 09:01 · pre 159 meseci #18
Situacija mi je nejasna, imam Access tabelu link-ovanu sa glavnim serverom (MAINSERVER). Kada izvrsim kod ispod
situacija ostane nepromjenjena (iako prva linija koda ukloni Access tabelu, provjerio sam).


DoCmd.DeleteObject acTable, "ACCESS_TABLE_NAME"

Dim KonektString As String
KonektString = "ODBC;DSN=DSN_NAME;Server=TESTSERVER;UID=USERNAME;PWD=PASSWORD"

DoCmd.TransferDatabase acLink, "ODBC Database", KonektString, acTable, "ORACLE_TABLE_NAME", "ACCESS_TABLE_NAME", False, True
Re: Izmjena Access-ove linked tabele iz koda 10.09.2013. u 17:29 · pre 159 meseci
izmenjeno 2 puta, poslednji put Zidar 10.09.2013. u 17:50
  1. Zidar10.09.2013. u 17:50zapis iz teksta poruke
  2. Zidar10.09.2013. u 17:49zapis iz teksta poruke
#19
Zakacio sam MDB sa skupom funkcija koje rade ovo sto se trazi. Pogledati funkciju RefreshAttachedTAble, pa gledati dalje ako je potrebno.

Kod je baziran na knjizi "Essential Access 95" autori Allen Browne i Alison Balter. Dalje od ovoga ne znam.

Kod namerno nema error handling da bi se videlo sta se desava.
Re: Izmjena Access-ove linked tabele iz koda 11.09.2013. u 09:21 · pre 159 meseci #20
Implementirao sam kod koji ste mi poslali (koristeci moje nazive tabela). Kod se izvrsi bez
greske ali nova tabela je i dalje linkovana sa starim serverom.

Ispod je format konekcionog stringa koji sam koristio (za Oracle bazu).

"ODBC;DSN=DSN_NAME;SERVER=TESTSERVER;UID=USERNAME;PWD=PASSWORD"
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme