Avatar billede kroger Nybegynder
18. maj 2002 - 23:54 Der er 17 kommentarer og
1 løsning

søg i flere tabeller

Jeg har en side hvor vise resultatet fra flere tabeller, men kun dem hvor feltet pass indeholder en given værdi. koden er som følger:

    Dim arrNames(1)
arrNames(0) = "a "
arrNames(1) = "b "

For i = LBound(arrNames) To UBound(arrNames)

tabel = tabel & "SELECT * FROM " & arrNames(i) & " where pass=" & request.querystring("pass2") & " " 

Next

Problemet er at den kommer med følgende fejlmeddelese:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name '1234'.

Hvor 1234 er værdien af pass. For mig ser sql strengen rigtig ud, men åbenbart ikke.

SELECT * FROM a where pass=1234 SELECT * FROM b where pass=1234

Håber i kan hjælpe...
   
Avatar billede kroger Nybegynder
18. maj 2002 - 23:54 #1
hvor vise = hvor den viser
Avatar billede askhoej Praktikant
18. maj 2002 - 23:59 #2
Kan du ikke lige beskrive dine tabeller og fortælle hvad du gerne vil vise?
Avatar billede kroger Nybegynder
19. maj 2002 - 00:06 #3
Det er en bannerstatistik side hvor den skal kigge i flere tabeller efter bannere der har "pass" værdien i "pass" feltet i tabellen. tabellen indeholder følg. rækker:
ID: int, identity
URL: ntext
ImageURl: ntext
alt: ntext
Clicks: int
Views: int
pass: nvarchar

Så viser den de bannere den finder frem, og antal klik og visninger for hver.
Avatar billede askhoej Praktikant
19. maj 2002 - 00:12 #4
Hvorfor har du flere end en tabel?
Avatar billede kroger Nybegynder
19. maj 2002 - 00:16 #5
På grund af at jeg kører med forskellige kategorier af bannere, og det giver mig en nem måde at administrere det på...
Avatar billede askhoej Praktikant
19. maj 2002 - 00:19 #6
Det kan godt være at det ser mere overskueligt ud i access, men det er helt håbløst at kode noget seriøst til sådan en database.

Sig til hvis du skal have hjælp til rette din database.

/Askhoej
Avatar billede kroger Nybegynder
19. maj 2002 - 00:22 #7
Øhhh, det er nu godt nok i MS SQL det ligger...
Avatar billede askhoej Praktikant
19. maj 2002 - 00:48 #8
okay - men problemet er det samme, du bliver nød til at normalisere din database, hvis du vil kode noget fornuftigt.
Avatar billede kroger Nybegynder
19. maj 2002 - 00:51 #9
Hvad tænker du på med at normalisere.., er det ikke ganske normalt at søge i flere tabeller. Tænk på en søgemaskine hvor der kan være flere hundrede tabeller... Eller misforstår jeg dig?
Avatar billede askhoej Praktikant
19. maj 2002 - 00:56 #10
Okay - bliver lige nød til at vide hvor meget du kender til databaser, kender du til relationer?

- det er selvfølgelig meget normalt at lave SELECT fra flere tabeller samtidig, men for at kunne gøre det skal de altså hænge sammen via af relationer ellers giver det ingen mening.

Hvis en søgemaskine er ordenligt designet, så er jeg ret sikkert på at den ikke indeholder flere hundrede tabeller :-)
Avatar billede kroger Nybegynder
19. maj 2002 - 01:05 #11
Relationer er nu ikke nødvendigt, men jeg vil da gerne indrømme at det er lidt dårligt design, grundet i at dengang jeg opbyggede hjemmesiden / databasen anede jeg sq ikke lige hvad relationer var, og det vil kræve TEMMELIG meget omprogrammering at ændre det. Så derfor vil jeg prøve at gøre det på ovennævnte måde.

Håber du stadig vil hjælpe en doven hund:)
Avatar billede askhoej Praktikant
19. maj 2002 - 01:14 #12
Hmm...det bliver sq noget være pladder programmering, men noget i denne her retning:



Dim arrID(1)
Dim arrURL(1)
Dim arrImageUrl(1)
Dim arrClicks(1)
Dim arrViews(1)

Dim arrNames(1)
arrNames(0) = "a "
arrNames(1) = "b "

'Opret Recordset
For i = LBound(arrNames) To UBound(arrNames)

strSQL = "SELECT * FROM " & arrNames(i) & " where pass=" & request.querystring("pass2")

'Smid data ind i RecordSet
arrID(i) = RS.Fields(0).value
arrURL(i) = RS.Fields(1).value
arrImageUrl(i) = RS.Fields(2).value
arrClicks(i) = RS.Fields(3).value
arrViews(i) = RS.Fields(4).value

Next

'Nedlæg Recordset

'Udskriv array med data fra tabellerne
Avatar billede kroger Nybegynder
19. maj 2002 - 01:19 #13
Det efterfølgende er ikke noget problem, det er mere det at den tror at 1234 er et rækkenavn istedet for en værdi...
Avatar billede askhoej Praktikant
19. maj 2002 - 01:26 #14
Det er jo fordi:

SELECT * FROM a where pass=1234 SELECT * FROM b where pass=1234

er noget totalt rod!

Du kan gøre følgende hvis du skal eksekvere to SELECT statements:

SELECT * FROM a where pass=1234;SELECT * FROM b where pass=1234

men du kan ikke smide data ind i et recordset på ovenstående måde.
Avatar billede kroger Nybegynder
19. maj 2002 - 01:31 #15
Hmmm, det kunne også bare være at jeg skulle få styr på databasen istedet, jeg bygger det forfra, og laver det relationelt istedet, ellers tak for hjælpen, du får også pointene for forsøget på min klosede kode :) så fyr lige et svar af...
Avatar billede askhoej Praktikant
19. maj 2002 - 09:28 #16
Det var også den løsning jeg havde valgt, du kommer til at få noget meget pænere kode og performance bliver væsentligt forbedret.

/Askhoej
Avatar billede Slettet bruger
19. maj 2002 - 22:08 #17
En god opbygget database med relationer som er gennemtænkt er nu sagen... :D
Avatar billede kroger Nybegynder
27. maj 2002 - 22:48 #18
Undskyld Askhoei at jeg først fik givet dig pointene idag, jeg er ligså langsom som mine databaser :)
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