Avatar billede Kim Neesgaard Seniormester
02. oktober 2003 - 15:42 Der 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?
Avatar billede tfa_dk Nybegynder
02. oktober 2003 - 23:50 #1
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)
Avatar billede Kim Neesgaard Seniormester
03. oktober 2003 - 10:44 #2
Jeg har prøvet nøjagtig denne kode og den giver stadig ORA-00905. Har du et forslag til hvad man så kan skrive?
Avatar billede tfa_dk Nybegynder
03. oktober 2003 - 10:50 #3
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).
Avatar billede Kim Neesgaard Seniormester
03. oktober 2003 - 12:26 #4
De er faktisk allerede lavet sådan: linked ODBC tabel - går ud fra, at det er det, du mener?
Avatar billede tfa_dk Nybegynder
03. oktober 2003 - 13:16 #5
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

    ....
Avatar billede Kim Neesgaard Seniormester
03. oktober 2003 - 13:32 #6
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.
Avatar billede the_bma_man Nybegynder
24. oktober 2003 - 10:20 #7
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.
Avatar billede Kim Neesgaard Seniormester
30. oktober 2003 - 18:00 #8
bma man -> Koden afvikles ikke som ASP, men som VBA inde i en Access applikation - gælder dit indlæg så stadig?
Avatar billede tfa_dk Nybegynder
31. oktober 2003 - 00:21 #9
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.
Avatar billede Kim Neesgaard Seniormester
10. december 2003 - 14:30 #10
Hvordan udfører man trin 1?
Avatar billede tfa_dk Nybegynder
10. december 2003 - 14:36 #11
Har du oprettet en ODBC forbindelse fra din maskine til oracle databasen?
Avatar billede Kim Neesgaard Seniormester
10. december 2003 - 14:47 #12
Ja.
Avatar billede tfa_dk Nybegynder
10. december 2003 - 14:52 #13
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.
Avatar billede Kim Neesgaard Seniormester
10. december 2003 - 15:29 #14
Nåh - det er helt herude! Vil det så sige, at når man gør det sådan, så 'opfører' Oracle tabellen sig som en lokal Accesstabel?
Avatar billede tfa_dk Nybegynder
10. december 2003 - 16:32 #15
Ja.

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!
Avatar billede tfa_dk Nybegynder
10. december 2003 - 16:34 #16
bruget => bruger
få lav => så lav
samler i 2 => mener samler i én kaldet "2".
Avatar billede Kim Neesgaard Seniormester
10. december 2003 - 16:44 #17
Spændende - det vil jeg prøve! Hvis man linker direkte på Oracletabellerne, er det i hvert fald ikke nemt (har jeg også fundet ud af i dag)!
Avatar billede Kim Neesgaard Seniormester
24. april 2004 - 10:22 #18
Undskyld sen afprøvning! Det virker fint på den måde!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester