Avatar billede wandaxp Praktikant
14. maj 2004 - 21:11 Der er 30 kommentarer og
2 løsninger

Radom på flere tabeller?

Kan man gøre noget lignende som dette :

SUB RandomVare
    set rs=server.CreateObject("adodb.recordset")
    strSQL = "SELECT * FROM VHS, DVD, CD, Baand"
    RS.Open strSQL, con, 3, 1
    'Find antal records
    recCount = rs.RecordCount
    'Find random nummer
    randomize
    rec = int(rnd * recCount)
    'Flyt til den valgte record
    rs.Move rec
    'Tilføj som variabel
    varetype = "Her skal den så vælge det ud fra tabel navnet i databasen"
    varenr = rs("varenr")
End SUB

Hvordan gør man dette, så den kan ud fra flere tabeller i samme database fidne alle vare og tage en tilfældig hvor den så selv finder ud af tabel navnet, da det kun er tabellen der oplyser dette dette er ikke samtidig en felt i tabellen...
Avatar billede twm Nybegynder
14. maj 2004 - 21:14 #1
Hvilken database spørger du i mod? Det er evt lettere at lave i ren SQL.
Avatar billede wandaxp Praktikant
14. maj 2004 - 21:16 #2
en access database...
Avatar billede wandaxp Praktikant
14. maj 2004 - 21:17 #3
og det eneste jeg skal bruge fra databasen er den aktuelle tabels navn samt feltet varenr.
Avatar billede twm Nybegynder
14. maj 2004 - 21:21 #4
Jeg arbejder normalt ikke i access, men her er ihvertfald et site der diskuterer emnet! ;)
Avatar billede wandaxp Praktikant
14. maj 2004 - 21:31 #5
site? :-)
Avatar billede twm Nybegynder
14. maj 2004 - 21:33 #6
Avatar billede wandaxp Praktikant
14. maj 2004 - 21:50 #7
Hmmm jeg kan desværre ikke fidne deri hvordan man fanger den aktuelle tabels navn?
Avatar billede twm Nybegynder
14. maj 2004 - 21:55 #8
evt med tillæg til random tilføjelserne:
SELECT VHS.id as VHSID,DVD.id as DVDID,CD.id as Baand FROM VHS, DVD, CD, Baand
hvor id selvfølgelig er et felt i tabellen. Så kan du spørge hvilket id er der er data i
Avatar billede twm Nybegynder
14. maj 2004 - 21:55 #9
SELECT VHS.id as VHSID,DVD.id as DVDID,CD.id as CDID, Baand.id as BaandID FROM VHS, DVD, CD, Baand
Avatar billede wandaxp Praktikant
14. maj 2004 - 22:06 #10
Der der sker i det ovenstående script, er at den finder ALLE vare i ALLE tabeller, samler dem i en stor tabel i hukommelsen, og så tager den herfra et tilfældigt varenr blandt alle varenr. Hvordan skal jeg så kunne fidne ud af om den tilfældige varenr om den tilhører DVD eller VHS bare som eksempel?
Avatar billede twm Nybegynder
14. maj 2004 - 22:13 #11
hvis du istedet for SELECT * bruger:
SELECT VHS.id as VHSID,DVD.id as DVDID,CD.id as CDID, Baand.id as BaandID FROM VHS, DVD, CD, Baand
kan du bruge
if len(rs("VHSID"))>0 then
  ' så har du fundet en VHS
end if
if len(rs("DVDID"))>0 then
  ' så har du fundet en DVD
end if
Avatar billede twm Nybegynder
14. maj 2004 - 22:13 #12
jeg har ikke skrevet asp i længe håber syntaxen er rigtig ;)
Avatar billede wandaxp Praktikant
15. maj 2004 - 01:28 #13
ok, men da igen af punkterne er helt tomme vil den altid kun vælge fra den sidste tabel, hvad kan jeg så gøre for at undgå dette?
Avatar billede wandaxp Praktikant
15. maj 2004 - 01:36 #14
SUB RandomVare
    set rs=server.CreateObject("adodb.recordset")
    strSQL = "SELECT VHS.varenr AS VHSnr, DVD.varenr AS DVDnr, Diverse.varenr AS Diversenr FROM VHS, DVD, Diverse"
    RS.Open strSQL, con, 3, 1
    'Find antal records
    recCount = rs.RecordCount
    'Find random nummer
    randomize
    rec = int(rnd * recCount)
    'Flyt til den valgte record
    rs.Move rec
    'Tilføj som variabel
    if (rs("VHSnr")<>" ") then
      varetype = "VHS"
      varenr = rs("VHSnr")
    end if
    if (rs("DVDnr")<>" ") then
      varetype = "DVD"
      varenr = rs("DVDnr")
    end if
    if (rs("Diversenr")<>" ") then
      varetype = "Diverse"
      varenr = rs("Diversenr")
    end if
End SUB

Sådan ser den ud nu, og de gange den fejler er det ved linien : RS.Open strSQL, con, 3, 1
Med beskeden :
Error Type:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01FB)
Der er opstået en undtagelse: 'rs.Open'
Avatar billede wandaxp Praktikant
15. maj 2004 - 22:31 #15
Flere forslag?

HHHHJJJJJJÆÆÆÆÆLLLLLLLPPPPPPP
Avatar billede twm Nybegynder
16. maj 2004 - 16:18 #16
Har du en tom kopi af basen?
Avatar billede wandaxp Praktikant
16. maj 2004 - 18:16 #17
basen?
Databasen eller hvad?
Avatar billede wandaxp Praktikant
16. maj 2004 - 18:28 #18
Jeg har har tre tabeller i databasen...

Diverse
VHS
DVD

I hver af disse tabeller er der Felterne :
Varenr (Som er Unik)
Beskrivelse
Pris
Avatar billede wandaxp Praktikant
18. maj 2004 - 23:07 #19
Den første der kommer med det der løser problemet, eller hjælper til løsningen er fudnet, får pointene eller de deles, evt. med flere point....

HJJJÆÆÆÆLLLLPPPP
Avatar billede twm Nybegynder
22. maj 2004 - 17:12 #20
Jeg vil forslå du laver et ekstra felt i basen som indikerer hvilken type ting det er. Samtidig kan du derefter smide alle data i den samme tabel, det gør mange ting lettere, og er også en langt pænere normalisering af basen!
Avatar billede wandaxp Praktikant
22. maj 2004 - 18:34 #21
Det er det ja, men jeg vil lige i dette tilfælde foretrække, at det blev lavet på denne måde, da der er mange steder der skal rettes i koden ellers, da den så ved tilføjelese og sletning og ændringer, skal ind og rette i denne tabel også...
Avatar billede twm Nybegynder
23. maj 2004 - 17:43 #22
som alternativ løsning kan du lave et felt (varetype) der for hver tabel type har en default værdi for video f.eks 1 og dvd 2, og så bruge denne sql:
SELECT * FROM DVD UNION SELECT * FROM VHS UNION SELECT * FROM Diverse;
Så kan du spørge hvilket varetype det er!
Avatar billede wandaxp Praktikant
23. maj 2004 - 17:52 #23
og hvad hedder så sætningen til at spørge efter varetypen?
Avatar billede twm Nybegynder
24. maj 2004 - 20:24 #24
varenr = rs("varenr")
if (rs("varetype")="1") then
      varetype = "VHS"
      ' gør et eller andet VHS relevant
end if
if (rs("varetype")="2") then
      varetype = "DVD"
      ' gør et eller andet DVD relevant
end if
Avatar billede wandaxp Praktikant
24. maj 2004 - 21:17 #25
Dette virker ikke, da rs("varetype") ikke findes nogen stader, da det jo er tabel navnet der skal hentes for den tabel hvor varenummeret egentlig eksister i?
Avatar billede wandaxp Praktikant
24. maj 2004 - 21:18 #26
hvordan får vi varetypen (tabel navnenet) med for hver vare, når man laver en union
Avatar billede twm Nybegynder
25. maj 2004 - 19:45 #27
du skal som jeg har skrevet tilføje et ekstra felt "varetype", der for hver tabel type har en default værdi for video f.eks 1 og dvd 2, så kræver det ikke nogen ændring i din kode
Avatar billede wandaxp Praktikant
25. maj 2004 - 22:00 #28
Det er jeg ikke helt med på, kan du lige komme med en lille eksempel?
Avatar billede twm Nybegynder
26. maj 2004 - 22:40 #29
Lige nu har dine tabeller disse felter:
Varenr (Som er Unik)
Beskrivelse
Pris

Du tilføjer derefter et felt i tabellerne der hedder varetype
For hver af tabellerne sætter du nu en standard værdi:
VHS varetype = 1
DVD varetype = 2
osv...

Når du bagefter bruger denne union, vil alle resultater komme ud i et stort resultset:
SELECT * FROM DVD UNION SELECT * FROM VHS UNION SELECT * FROM Diverse;

varenr    beskrivelse            pris    varetype
1    bil    2000            3
2    bil2    2333            3
3    Ringenes Herre 1        120    2
4    Ringenes Herre 2        140    2
5    Ringenes Herre 3        160    2
6    Ringenes Herre 1 VHS    120    1
7    Ringenes Herre 2 VHS    140    1
8    Ringenes Herre 3 VHS    160    1
Derefter kan du spørge på varetype hvad slags vare du har fundet
Avatar billede twm Nybegynder
26. maj 2004 - 22:40 #30
hmmm tabellen blev ikke så køn håber du forstår meningen
Avatar billede wandaxp Praktikant
26. maj 2004 - 23:21 #31
Heh ja det er en mulighed, men dette giver igen en masse ekstra programmering for at disse oplysninger så gemmes og en del større database.
Det var var min pointe i denne spørgsmål er om man her ikke kan få den til selv at finde ud af hvilken tabel i databasen den har taget varenr fra, så den automatisk finder tabel navnet, uden at man skal lave ekstra felter... for så kan jeg lige så godt lave den samlede tabel med alle vare den ville være hurtigere at lave...
Men stadig tage lang tid...
Avatar billede twm Nybegynder
26. maj 2004 - 23:30 #32
Metoden jeg har beskrevet ovenfor koster ikke noget administration kun lidt ekstra plads, da felterne blot skal have sat en default værdi.
Men jeg giver dig fuldstændig ret i at databasen helst skulle ligges sammen.
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