Avatar billede webbe Nybegynder
08. maj 2002 - 12:53 Der er 8 kommentarer og
1 løsning

Flytning af data fra Oracle til Access

Hejsa

Jeg har en Oracle tabel med følgende struktur:

Filmnr    Feature
------    ----------------
220      Værdi1
220      Værdi2
220      Værdi3
330      Værdi1
330      Værdi2

Dette vil jeg have flyttet over i en Access DB med følgende struktur

Filmnr    Feature1    Feature2    Feature3    Feature4
------    --------    --------    --------
220      Værdi1      Værdi2      Værdi3
330      Værdi1      Værdi2

Håber i kan se idéen, men jeg kan ikke rigtig få det til at lykkes.

Anyone?
Avatar billede rou Nybegynder
08. maj 2002 - 13:14 #1
lige en kommentar:

din struktur (i begge databaser) er ret grim, set med normaliserings briller på.

Over vej at benytte 2 tabeller istedet, med noget ala denne struktur:

film:
film_id
film_name

features:
feat_id
film_id
feat_name

så kan du have ubegrænsede features per film.
Du kunne evt. lave en linktabel imellem, så du istedet for en-til-mange, har mange-til-mange relationer.
Avatar billede webbe Nybegynder
08. maj 2002 - 13:16 #2
rou:

Ved godt strukturene er grimme, men jeg har ikke selv valgt at lave dem sådan.

Der er fra overordnet sted valgt at der ikke skal mere end 4 extrafeatures på - derfor denne struktur.
Avatar billede rou Nybegynder
08. maj 2002 - 13:38 #3
det er stadigt smartere at normalisere. Du vinder eventuelt også den fordel at du kan genbruge features, fra film til film, således at hver feature kun optræder een gang i databasen, men kan tilknyttes flere film.
Såfremt det er praktisk anvendeligt i din applikation.
Avatar billede webbe Nybegynder
08. maj 2002 - 13:53 #4
Kender godt normaliserings-metoderne - er ikke det jeg vil diskutere her hvis du forstår.

Er bare interesseret i at få de data fra Oracle over i Access.
Avatar billede coltau Juniormester
08. maj 2002 - 22:11 #5
Kan dette anvendes:

<%
Dim aF(4), LastFilm, Cnt
Dim ConnAccess, ConnOracle

' Setup ADO-connections for ConnAccess/ConnOracle

function GetSQLValue(F)
  if F <> "" then
    GetValue = "'" & F & "'" ' Husk plinger hvis det er tekstfelter
  else
    GetValue = NULL
end function

sub ClearFs
  aF(1) = "" ' En for-løkke kan også anvendes
  aF(2) = ""
  aF(3) = ""
  aF(4) = ""
end sub

sub InsNew(Filmnr)
Dim Values
  Values = CStr(Filmnr)
  Values = Values & "," & GetSQLValue(aF(1)) ' En for-løkke kan også anvendes
  Values = Values & "," & GetSQLValue(aF(2))
  Values = Values & "," & GetSQLValue(aF(3))
  Values = Values & "," & GetSQLValue(aF(4))

  ConnAccess.Execute("insert into access (filmnr,Feature1,Feature2,Feature3,Feature4) values (" & Values & ")")
end sub

' Hent alla data fra Oracle
Set RSO = ConnOracle.Execute("select * from Oracle")

if not RSO.EOF then
  ClearFs
  LastFilm = RSO("filmnr")
  Cnt = 1
  Do while not RSO.EOF
    if (LastFilm <> RSO("filmnr")) then
      InsNew(LastFilm)
      ClearFs ' Nulstil features igen
      Cnt = 1
    end if
    aF(Cnt) = RSO("Feature")
    Cnt = Cnt + 1
    RSO.MoveNext
  Loop
  InsNew(LastFilm) ' Få lige den sidste med
else
  Response.Write("Udtrækket gik ikke godt.")
end if
%>
Avatar billede webbe Nybegynder
10. maj 2002 - 18:44 #6
Tjekker det lige mandag, men det ser da lovende ud.
Avatar billede webbe Nybegynder
14. maj 2002 - 08:34 #7
coltau:

Lige et enkelt tillægsspørgsmål.

Jeg har fået alle filmnumrene over i tabellen, så der er kun tale om en opdatering af posterne.
Kan jeg bare bruge en UPDATE statement i stedet for den INSERT du har skrevet?
Avatar billede webbe Nybegynder
14. maj 2002 - 08:46 #8
Har også lige tjekket det og det ser ikke ud til at virke.

Ved en INSERT statement får jeg kun ét filmnr ud, men jeg får ingen features med.

Hvad går der galt?
Avatar billede webbe Nybegynder
16. maj 2002 - 10:15 #9
Fandt selv en løsning på det.

Vælger bare specifikke værdier og konverterer til Access.

Fx.

sql = "SELECT * FROM oracle_table WHERE felt=1"
Set rs = OraConn.Execute(sql)

do while not (rs.bof or rs.eof)

Filmnr = rs("Filmnr")

strSQL = "UPDATE access_table SET felt='on' WHERE Filmnr="&Filmnr
AcConn.Execute(strSQL)

rs.movenext
loop

Så nu er mine data konverteret
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
Kurser inden for grundlæggende programmering

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