Avatar billede thomas_b Nybegynder
26. august 2004 - 18:21 Der er 69 kommentarer og
2 løsninger

Inde i DB-udtræk - endnu et DB-udtræk !

Hej eksperter...

Jeg har et lille problem...
Jeg har et DB-udtræk (DB1) med loop... Inde i det vil jeg gerne have et DB-udtræk (DB2) fra en anden tabel i samme DB, men den er bestemt via (DB1)'s ID nummer...!

Please hjælp...
Avatar billede dr-kermit Nybegynder
26. august 2004 - 18:44 #1
Jeg ville lave det med et join, er det ikke det nemmeste....

Så slipper di også for endnu et roundtrip til databasen

Mvh kenneth
Avatar billede thomas_b Nybegynder
26. august 2004 - 19:00 #2
hvordan skriver man det...?
Avatar billede arne_v Ekspert
26. august 2004 - 19:22 #3
SELECT tabel_1.felt_1,...,tabel_1.felt_n,tabel_2.felt_1,...,tabel_2.felt_m
FROM tabel1_1,tabel_2
WHERE tabel_1.id=tabel_2.id
Avatar billede thomas_b Nybegynder
26. august 2004 - 21:09 #4
Jeg er lidt dun til det her...
Men kan du ikke hjælpe mig, hvis du nu får denne kode at sætte den ind i ???


<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("man.mdb")

SQLstmt = "SELECT * FROM elever WHERE klaere='" & Session("Intter") & "' ORDER BY Efternavn"

Conn.Execute (SQLstmt)

Set rs = conn.Execute(SQLstmt)

If (rs.BOF Or rs.EOF) Then
Response.Redirect("?cmd=tom")
Else
  DO WHILE NOT rs.EOF

    If blnBGColor = True Then
      strBGColor = "#F4F4F4"
      blnBGColor = False
    Else
      strBGColor = "#DFEBBB"
      blnBGColor = True
    End If

%><tr bgcolor="<%=strBGColor%>">
<td class="index" width="100%" style="border-right:1px solid #FFFFFF;padding-left:4px;padding-right:4px;padding-top:2px;padding-bottom:2px;" nowrap><%=rs("Fornavn")%>&nbsp;<%=rs("Efternavn")%></td>
<td class="index" style="border-right:1px solid #FFFFFF;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;" nowrap><%=rs("nummer")%></td>
<td class="index" style="border-right:1px solid #FFFFFF;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;" nowrap><%=rs("klaere")%></td>
<td class="index" style="padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;" nowrap><%=rs("starttet")%></td>
</tr>
<%
    rs.MoveNext
  LOOP
  RS.Close

conn.Close
Set conn = nothing
Set SQLstmt = nothing
End If
%>
Avatar billede arne_v Ekspert
26. august 2004 - 21:12 #5
Er der ikke kun 1 sql statement i den kode ?
Avatar billede thomas_b Nybegynder
26. august 2004 - 21:16 #6
jov men kan du ikke hjælpe mig med den anden ??

Den anden skal være basseret på en <%=rs("ID")%>
Avatar billede arne_v Ekspert
26. august 2004 - 21:18 #7
Måske men jeg skal have tabelnavn og felt navne
Avatar billede thomas_b Nybegynder
26. august 2004 - 21:23 #8
er det ikke nok hvis jeg nu skriver hvordan den skulle se ud, HVIS den var alm. ????

SQLstmt = "SELECT * FROM timer WHERE til='" & rs("ID")
Avatar billede thomas_b Nybegynder
26. august 2004 - 21:48 #9
arne_v ---> vil du ikke hjælpe mig...?
Avatar billede arne_v Ekspert
26. august 2004 - 21:53 #10
Jo men jeg har også andet at lave ...
Avatar billede arne_v Ekspert
26. august 2004 - 21:54 #11
Jeg tror at du mener:

SQLstmt = "SELECT * FROM elever,timer WHERE elever.ID=timer.til klaere='" & Session("Intter") & "' ORDER BY Efternavn"
Avatar billede thomas_b Nybegynder
26. august 2004 - 21:56 #12
men hvordan finder jeg så f.eks. <%=rs("skifer")%> som ligger i tabelen "timer", og henholdsvis i "elever" ???

sender du ikke også et svar...
Avatar billede arne_v Ekspert
26. august 2004 - 22:01 #13
Hvis i.s.f.

SELECT * FROM ...

bruger:

SELECT elever.skifer AS eskifer, timer.skifer AS tskifer,... FROM ...

så kan du bruge rs("eskifer") og rs("tskifer")
Avatar billede arne_v Ekspert
26. august 2004 - 22:02 #14
Jeg kan godt ligge et svar, men jeg tror at du har lidt vej endnu inden du
har det hel på plads.
Avatar billede arne_v Ekspert
26. august 2004 - 22:03 #15
med hensyn til SQL så har jeg skrevet en artikel om SQL queries, hvor du kan læse
lidt om mulighederne:
  http://www.eksperten.dk/artikler/389
Avatar billede arne_v Ekspert
26. august 2004 - 22:04 #16
En af de ting som muligvis vil drille dig er at hvis 1 række i elver matcher 10 rækker
i timer, så vil den joinede query returnere 10 rækker og så vil elev informationen være
10 doblet og din ASP kode skal så håndtere det fornuftigt.
Avatar billede thomas_b Nybegynder
26. august 2004 - 22:22 #17
den virker stadig ikke således...

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("man.mdb")

SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn FROM elever WHERE klaere='" & Session("Int") & "' ORDER BY Efternavn"

Conn.Execute (SQLstmt)

Set rs = conn.Execute(SQLstmt)

If (rs.BOF Or rs.EOF) Then
Response.Redirect("?kategorier=" & Request.QueryString("kategorier") & "&cmd=tom")
Else
  DO WHILE NOT rs.EOF

    If blnBGColor = True Then
      strBGColor = "#F4F4F4"
      blnBGColor = False
    Else
      strBGColor = "#DFEBBB"
      blnBGColor = True
    End If

%>

<%=rs("for_sent_tid")%>


-----------------------------------------------------------


Den siger bare denne fejl..:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

opgoerelse.asp, line 41
Avatar billede arne_v Ekspert
26. august 2004 - 22:24 #18
Hvilken linie er linei 41 ?
Avatar billede thomas_b Nybegynder
26. august 2004 - 22:47 #19
Conn.Execute (SQLstmt)
Avatar billede arne_v Ekspert
26. august 2004 - 22:55 #20
Hvorfor executer du 2 gange:

Conn.Execute (SQLstmt)

Set rs = conn.Execute(SQLstmt)

?
Avatar billede ellebaek Nybegynder
26. august 2004 - 22:58 #21
hvilken type er feltet klaere i din database..?

for hvis det er tal, så skal der ikke '' omkring i din sql..!
Avatar billede thomas_b Nybegynder
26. august 2004 - 22:58 #22
med kun : Set rs = conn.Execute(SQLstmt) --- siger den stadig samme fejl...
Avatar billede arne_v Ekspert
26. august 2004 - 23:00 #23
Så er ellebaeks hypotese nok den bedste vi har
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:02 #24
havd er det ?
Avatar billede arne_v Ekspert
26. august 2004 - 23:03 #25
SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn FROM elever WHERE klaere=" & Session("Int") & " ORDER BY Efternavn"
Avatar billede arne_v Ekspert
26. august 2004 - 23:04 #26
Hov der mangler da noget i FROM !
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:05 #27
Jeg ved ikke hvad det betyder, men nu siger lige pludselig Expected 2 istedet for Expected 1
Avatar billede arne_v Ekspert
26. august 2004 - 23:05 #28
SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn
FROM elever,timer
WHERE elever.ID=timer.til klaere='" & Session("Int") & "'
ORDER BY Efternavn"

feltnavnene i den første where betingelse skal lige checkes
Avatar billede ellebaek Nybegynder
26. august 2004 - 23:07 #29
retter dig lige lidt arne :-)

SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn
FROM elever,timer
WHERE elever.ID=timer.til, klaere='" & Session("Int") & "'
ORDER BY Efternavn"

der manglede lige et komma, men der mangler da et tabelnavn på feltet klaere, hvilken tabel ligger den i..?
Avatar billede arne_v Ekspert
26. august 2004 - 23:11 #30
komma ? der mangler vel et AND !
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:14 #31
den ligger i elever
Avatar billede arne_v Ekspert
26. august 2004 - 23:15 #32
SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn
FROM elever,timer
WHERE elever.ID=timer.til AND elever.klaere='" & Session("Int") & "'
ORDER BY Efternavn"
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:15 #33
hvis jeg skriver denne sætning:
SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn FROM elever WHERE elever.Id=timer.til, elever.klaere='" & Session("Int") & "' ORDER BY Efternavn"

Kommer denne fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (comma) in query expression 'elever.Id=timer.til, elever.klaere='MAN''.

opgoerelse.asp, line 37
Avatar billede arne_v Ekspert
26. august 2004 - 23:17 #34
Du skal bruge AND ikke komma
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:18 #35
SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn FROM elever WHERE elever.Id=timer.til AND elever.klaere='" & Session("Int") & "' ORDER BY Efternavn"


Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.

opgoerelse.asp, line 37
Avatar billede ellebaek Nybegynder
26. august 2004 - 23:26 #36
Sorry...

Det var min fejl :-)
Tog lige fejl af where og order by..

Bliver vidst nødt til at hoppe i seng..!
Avatar billede arne_v Ekspert
26. august 2004 - 23:28 #37
Der mangler stadig en tabel i FROM.

SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn FROM elever,timer WHERE elever.Id=timer.til AND elever.klaere='" & Session("Int") & "' ORDER BY Efternavn"
Avatar billede arne_v Ekspert
26. august 2004 - 23:29 #38
Og check lige om det er elever.Id som skal sættes lig med timer.til
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:31 #39
det kan den godt, men ikke i alle posterne...
Avatar billede arne_v Ekspert
26. august 2004 - 23:36 #40
Den skal jeg lige have forklaret lidt nærmere
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:38 #41
Jeg har en post i timer hvor kolonnen med "til" står til 2 (der kommer flere bare ikke med den samme værdi i kolonnen til)

I tabellen elever har jeg 3 poster hvor ID er 1;2;3;
Avatar billede arne_v Ekspert
26. august 2004 - 23:41 #42
Spørgsmålet er: hvilket kriterie skal bruges for at koble en række fra elever
tabellen sammen med en række fra timer tabellen ?
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:42 #43
Jeg ved det ikke...!
Avatar billede arne_v Ekspert
26. august 2004 - 23:44 #44
Det skal vi jo nok have fundet ud af !

Kan du give os noget tabel struktur og/eller en skitse af hvordan output skal se ud ?
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:46 #45
altså design-mæssigt ?
Eller i DB'en ?
Avatar billede arne_v Ekspert
26. august 2004 - 23:49 #46
Hvad som helst der kan give os et indtryk af problem stillingen.
Avatar billede thomas_b Nybegynder
26. august 2004 - 23:56 #47
Avatar billede arne_v Ekspert
27. august 2004 - 00:01 #48
Men lad os nu tage ham der "hej hej".

Vi skal have vist en værdi fra timer tabellen til kolonnen.

Men hvilken række skal vi vælge ?
Avatar billede thomas_b Nybegynder
27. august 2004 - 00:04 #49
lave en tekst-treng med noget: IF hej hej i tabellen timer er 0 THEN (og så et eller andet...!)
Avatar billede eagleeye Praktikant
27. august 2004 - 00:06 #50
Tror du ikke der er kolonnen timer.til som er bindeledet til elever.id. Det lyder sådan ud fra din beskrivelse 26/08-2004 23:38:39.
Hvordan virker arne_v's SQL sætning vist 26/08-2004 23:28:43?
Er kolonne timer.til en tal kolonne?
Avatar billede thomas_b Nybegynder
27. august 2004 - 00:07 #51
ja...
Avatar billede thomas_b Nybegynder
27. august 2004 - 00:10 #52
Den viser nu kun den post hvor der kommer et output fra timer.til
De andre er væk...
Avatar billede arne_v Ekspert
27. august 2004 - 00:12 #53
Prøv:

SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn FROM elever LEFT JOIN timer ON elever.Id=timer.til WHERE elever.klaere='" & Session("Int") & "' ORDER BY Efternavn"
Avatar billede eagleeye Praktikant
27. august 2004 - 00:12 #54
Det er fordi den SQL svare til en inner join, så det skal laves en left join, som arne_v lige har vist :)
Avatar billede thomas_b Nybegynder
27. august 2004 - 00:25 #55
nu er jeg snart ved aat blive træt... Hvad betyder nu dette her...:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.
Avatar billede arne_v Ekspert
27. august 2004 - 00:28 #56
Har du copy pastet korrekt ind ?
Avatar billede thomas_b Nybegynder
27. august 2004 - 00:29 #57
ja, i en fil magen til... - men hvad står der...!
Avatar billede eagleeye Praktikant
27. august 2004 - 00:30 #58
Prøv lige at sætte klammer omkring timer: .. LEFT JOIN [timer] ON  ...
Avatar billede thomas_b Nybegynder
27. august 2004 - 00:34 #59
Altså det er i en anden fil, men den er altså helt magen til...

Meni den oprentlige fil, der skriver den ikke noget tal ud fra timer.til - Jeg skriver bare i mit dokument: <%=rs("for_sent_tid")%>
Avatar billede thomas_b Nybegynder
27. august 2004 - 00:35 #60
eagleeye -> det virker ikke...! - viser stadig fejlen...
Avatar billede arne_v Ekspert
27. august 2004 - 00:36 #61
Prøv lige og post din SQLstmt som den ser ud nu
Avatar billede eagleeye Praktikant
27. august 2004 - 00:44 #62
SQLstmt = "SELECT timer.for_sent_tid AS for_sent_tid, elever.Id AS Id, elever.Fornavn AS Fornavn, elever.Efternavn AS Efternavn FROM elever LEFT JOIN timer ON elever.Id=timer.til WHERE elever.klaere='" & Session("Int") & "' ORDER BY elever.Efternavn"
Avatar billede thomas_b Nybegynder
27. august 2004 - 00:44 #63
nu har jeg fejlen væk... men den viser igen resultat - Jeg skriver bare :
<%=rs("for_sent_tid")%>

For at få den til at hente resultatet (hvis den ikke finder noget resultat må den gerne skrive 0,00)
Avatar billede eagleeye Praktikant
27. august 2004 - 00:50 #64
Så prøv rette:

<%=rs("for_sent_tid")%>

til:

<% if isNull(rs("for_sent_tid")) then Response.Write "0,00" else Response.Write rs("for_sent_tid") end if %>
Avatar billede thomas_b Nybegynder
27. august 2004 - 00:56 #65
okay.. Lige et sidste spørgesmål... er der nogle der kan huske hvordan man regner mange minutter om til hele timer og hele min...
Eksempel:
110 minutter

110/60=1,833333333 timer men hordan får jeg det til at slå så man kan læse det sådan:
1t. 50min.


---

Og så ved jeg ikke hvem jeg skal give point...
Avatar billede eagleeye Praktikant
27. august 2004 - 01:00 #66
hvis du har antal minutter så kan det gøres sådan her:


mins=110
t=int(mins/60)
m=mins-t*60
str = t&"t. " & m &"min."
response.write str


Du bestemmer hvem der skal havde dem, de kan også deles med knappen advanseret.
Avatar billede eagleeye Praktikant
27. august 2004 - 01:01 #67
Jeg smutter for i aften :)
Avatar billede thomas_b Nybegynder
27. august 2004 - 01:02 #68
hvordan er det lige jeg får dem ind i denne...:
<% if isNull(rs("for_sent_tid")) then Response.Write "0,00" else Response.Write rs("for_sent_tid") end if %>
Avatar billede eagleeye Praktikant
27. august 2004 - 01:04 #69
Så lav en lille funktion og put ind i din kode.

<%
funktion tid(mins)
t=int(mins/60)
m=mins-t*60
tid = t&"t. " & m &"min."
end funktoin
%>

og så blivre din linje:

<% if isNull(rs("for_sent_tid")) then Response.Write "0,00" else Response.Write tid(rs("for_sent_tid")) end if %>
Avatar billede thomas_b Nybegynder
27. august 2004 - 01:07 #70
takker.... 1000 takker...
Avatar billede thomas_b Nybegynder
12. marts 2006 - 13:43 #71
nogle der vil hjælpe på:
http://www.eksperten.dk/spm/694406

Er kørt lidt fast, kunne godt bruge et lille tip...
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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