02. oktober 2003 - 15:42Der er
17 kommentarer og 1 løsning
ORA-00905: missing keyword
Jeg har i en Access database lavet en forbindelse til en Oracletabel og vil gerne gemme oplysninger fra Oracletabellen i en Access tabel. Jeg skriver følgende:
Public Conn As New ADODB.Connection Conn.Open "Provider=MSDAORA;Data Source=Enlist_WH_P", "hans", "xx"
yy = "SELECT VIQMSM.QMNUM INTO [tblAkimn] FROM ENLIST_WH.VIQMSM" Conn.Execute (yy)
VIQMSM er en Oracletabel og tblAkimn er en Access tabel.
Kørsel giver hårdnakket ovennævnte fejlmelding - havd kan det være, at der mangler?
For mig at se prøver du at indsætte noget i en table på oraclen. Conn.Execute(yy) udføres på oracle ikke i Access.
Prøv med en simpel forespørgsel hvor du henter data fra Oracle og brug denne i en oprettelsesforespørgsel hvor du gemmer i access.
Hvis du indtaster din sætning i en Access forespørgsel i SQL design skifter til alm design og tilbage til SQL får du følgende retur "SELECT VIQMSM.QMNUM AS Udtryk1 INTO tblAkimn FROM [ENLIST_WH].VIQMSM;" prøv evt. at bruge det i stedet for. (Hvis det virker tager jeg fejl og udtrykket afvikles af Access da "AS" ikke bruges på Oracle)
Når du får ORA-xxxxx fejl er det fordi din forespørgsel afvikles på oracle, og der er din Access tabel jo ikke. Lav en 'ekstern' table i Access der pejer på din Oracle tabel og brug denne som kilde i din Access opdaterings forespørgsel. (Jeg kan ikke lige huske hvad Access kalder denne type link).
Hvis VIQMSM er navnet på Access tabellen der linker til Oracle (hvor den også heddder VIQMSM) skal du ikke oprette en connection (Conn) og udføre Conn.execute(yy). I det tilfælde skal du bare oprette et Access Recordset og indsætte nye records i det.
Dim rcs As Recordset
Set db = CurrentDb() Set rcs = db.TableDefs("T_MinTabel").OpenRecordset
VIQMSM er Oracle tabellen og tblAkimn er Access tabellen. Den SQL som jeg har brugt her, er ikke den 'rigtige', men er mere kompleks (og der er flere forskellige over samme 'tema'), så jeg mener at behøve SQL forespørgslen mod Oracle tabellen.
Hvis du har oprettet en "Link til eksterne data" i Access (dem med globus'en på), der peger på din oracle-tabel (via odbc), så skal du i din asp lave en connection til ACCESS, og her lave en "insert into accesstabel a(felt1, felt2) select felt1, felt2 from accesstabel2 where ..." Dette er oracle-syntax - den er sikkert lidt anderledes i access. Mener det er noget med "select felt into felt2 from ..." - men jeg er ikke sikker.
1. Opret en ny tabel "sammenkædet tabel" skift filtype til "ODBC database" find din datakilde og vælg de ønskede tabeller (VIQMSM).
2. Opret en ny forespørgsel og vælg tabellen (VIQMSM) i design vælges menuen forespørgsel->tilføjelsesforespørgsel.
3. Vælg den tabel der skal modtage data (tblAkimn)
4. Vælg felt og vælg føj til.
5. Du har nu en forespørgsel du kan bruge direkte, eller fra Access kode.
Denne metode er simple, visuel, nem at vedligeholde og gør at koden stadig virker selvom du ændre i forespørgslen. F.eks. hvis du ikke vil indsætte værdier der allerede findes tilføjer du bare en outerjoin mellem tabellerne hvor outerjoin siden skal være NULL.
1. I Access opretter du en ny table. 2. Der fremkommer nu en dialog hvor du skal vælge typen 'Link' eller 'Sammenkædet' (Ordene skifter mellem versioner af Access) 3. Nu kommer en ny dialogboks. Nederst skal du vælge filtype. Vælg 'ODBC databases()' 4. Nu kommer en dialogboks med dine ODBC datasources, vælg din oracle. 5. Der kommer nogle spørgsmål om brugernavn og password du skal tage stilling til.
Hvis du har sat ODBC timeout til f.eks 60 bliver dine forespørgsler afbrudt efter 60 sek. Jeg bruget næsten altid unlimited for ikke at få problemer.
Husk oracle ikke er meget for join mellem mange tabeller. Hvis du skal lave join mellem 5 tabeller få lav 3 forespørgsler. 1a og 1b som du samler i 2 a.h.t. performance.
Hvis du bruger 'store' tal i oracle får du dem over i access som strings!
Undskyld sen afprøvning! Det virker fint på den måde!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.