Avatar billede puppetmaster Nybegynder
16. december 2004 - 11:58 Der er 17 kommentarer og
2 løsninger

SQL på baggrund af array

Arrayet indholder navnene på de tabeller der skal vælges fra og der skal vælges fra alle tabeller på én gang, ligesom
"SELECT * FROM Tabel1, Tabel2, Tabel3 WHERE ..."
Avatar billede rbj_fp Nybegynder
16. december 2004 - 11:59 #1
hvad er spørgsmålet?
Avatar billede puppetmaster Nybegynder
16. december 2004 - 12:01 #2
Hvordan man "cykler" gennem arrayet, som er forskelligt afhængigt af hvilken backend frontend'en er hægtet på.
Avatar billede thesurfer Nybegynder
16. december 2004 - 12:04 #3
Prøv:

list = "tabel1,tabel2,tabel3,osv.."
a = split(list, ",")

t = ""
for i = 0 to ubound(a)
t = t & a(i) & ","
next

t = left(t, len(t) -1)

"select * from " & t & " where ..."
Avatar billede thesurfer Nybegynder
16. december 2004 - 12:10 #4
Her er en forklaring, hvis du ikke forstår det:

1) list = "tabel1,tabel2,tabel3,osv.."
listen med tabellerne indsættes i variablen "list"

2) a = split(list, ",")
listen splittes op ved ",", og indsættes i arrayen "a"

3) t = ""
indholdet af variablen t sættes til "" (ingenting)

4) for i = 0 to ubound(a)
start en for-next loop, hvor det er variablen i, der indeholder værdien (tallet der indholder arraynummeret) af arrayen. Den starter ved 0 og fortsætter til max (største array værdi -1, da den starter ved 0 og ikke 1)

5) t = t & a(i) & ","
t's værdi sættes det det tidligere, + indholdet af arrayen (med i's værdi), og tilsidst tilføjes et ","

6) next
fortsæt løkken

7) t = left(t, len(t) -1)
pga loopen, står der nu et komma sidst i værdien af t. Det vil give et problem, og skal derfor fjernes. t's værdi sættes til:
starten (fra venstre = Left) og til længden af t's værdi (hele strengen), minus det sidste tegn.
t's værdi er nu OK.

8 "select * from " & t & " where ..."
t's OK værdi indsættes i sql strengen.
Avatar billede thesurfer Nybegynder
16. december 2004 - 12:15 #5
Indholdet af list (#1: list = "tabel1,tabel2,tabel3,osv..") kan ændres til hvad som helst..

Eksempel:
list = "tabel_bil,tabel_ko,tabel_hus,osv.."

Eller hvad du nu kan finde på :-)
Husk bare:
- tabel navn separares med ";" (komma)
- der må ikke være mellemrum i listen
Avatar billede rbj_fp Nybegynder
16. december 2004 - 12:15 #6
Et andet forslag   
    Dim size As Integer: size = 10 ' din størrelse på arrayet
    Dim mit_array() As String ' definere dit array
   
    ReDim mit_array(0 To (size - 1)) 'skaber et array med den størrelse du ønske
   
    ' fylder data
    mit_array(0) = "Sted 0"
    mit_array(1) = "Sted 1"
    mit_array(2) = "Sted 2"
    mit_array(3) = "Sted 3"
    mit_array(4) = "Sted 4"
    mit_array(5) = "Sted 5"
    mit_array(6) = "Sted 6"
    mit_array(7) = "Sted 7"
    mit_array(8) = "Sted 8"
    mit_array(9) = "Sted 9"
   
    Dim index As Integer: index = 0
   
    While index < size
        MsgBox mit_array(index)
        index = index + 1
    Wend
Avatar billede puppetmaster Nybegynder
16. december 2004 - 12:15 #7
"Her er en forklaring, hvis du ikke forstår det:"
:) (men ellers tak!)

Problemet i din løsning er at jeg så står med 8-10 SQL strenge som afvikles UAFHÆNGIGT af hinanden og jeg derfor får 8-10 result set's.
Den kunne jeg selv have skrevet...jeg vil select'e f.eks. feltet Kundenavn fra samtlige tabeller i ét resultset, som jeg så kan løbe igennem
Avatar billede puppetmaster Nybegynder
16. december 2004 - 12:17 #8
Det er altsammen meget fint, men det er ikke dér problemet er, det er i at lave en SQL streng som kan vælge f.eks. kundenavn fra samtlige tabeller (som er defineret i array'et)
Avatar billede rbj_fp Nybegynder
16. december 2004 - 12:18 #9
Hvorfor skal du have et udtræk med de samme oplysninger fra flere tabeller? Det lyder lidt mystisk i mine ører!
Avatar billede thesurfer Nybegynder
16. december 2004 - 12:18 #10
Så har jeg vist misforstået dit spm:

Arrayet indholder navnene på de tabeller der skal vælges fra og der skal vælges fra alle tabeller på én gang, ligesom
"SELECT * FROM Tabel1, Tabel2, Tabel3 WHERE ..."

Hvad mener du præcist? (uddybende forklaring)
Avatar billede thesurfer Nybegynder
16. december 2004 - 12:22 #11
Er det ikke bare?:

"SELECT * FROM Tabel1, Tabel2, Tabel3 WHERE kundenavn = '" & strKundenavn & "'"

og mulligvis bruge af "order"..
Avatar billede rbj_fp Nybegynder
16. december 2004 - 12:23 #12
"select * from (dine tabelnavne her) where (værdi).(tabelnavn1) = kriterie and (værdi).(tabelnavn2) = kriterie    (osv)...
Avatar billede puppetmaster Nybegynder
16. december 2004 - 12:24 #13
Hvis der nu er tale om 2 tabeller
ordrer - København
ordrer - Odense
De 2 tabeller er identiske, i strukturen, men indeholder ordre for de respektive byer
(don't ask, jeg har IKKE lavet database strukturen! :( )
Så vil jeg vælge alle de kunder som hedder "kundenavn" og overføre dem til Excel.

Men jeg kan selvfølelig bruge rbj's forslag og køre arrayet igennem, hvor SQL strengen bliver større og større:
SQL = "SELECT * FROM "
While index < size
  SQL = SQL + mit_array(index)
Wend

Og så en tilsvarende for WHERE clausen
Avatar billede thesurfer Nybegynder
16. december 2004 - 12:25 #14
hvis det er som i 16/12-2004 12:23:35, kan du bruge en modificerede udgave af 16/12-2004 12:04:04
Avatar billede puppetmaster Nybegynder
16. december 2004 - 12:26 #15
ligesom rbj skriver, bare hvor (dine tabelnavne her) er erstattet af en plads i array'et.
Takker for hjælpen begge 2.
Smid et svar...
Avatar billede thesurfer Nybegynder
16. december 2004 - 12:27 #16
hehehe.. ok :-)
Sådan noget der, bruger man klart array til :-)
Avatar billede rbj_fp Nybegynder
16. december 2004 - 12:30 #17
here
Avatar billede puppetmaster Nybegynder
17. december 2004 - 08:11 #18
Har du da et bedre forslag, thesurfer? ;)
Avatar billede thesurfer Nybegynder
18. december 2004 - 00:50 #19
puppetmaster> Hvad tænkte du på?
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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