/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
SQL liste fra 2 tabeller
Fra : Ukendt


Dato : 17-10-07 10:52

Hej,

Jeg har brug for at sammenkæde og liste indholdet af 2 tabeller med SQL
SELECT:

Fra tabellen 'tblIncidentLog' henter jeg foregående måned med:

SQLstmt = "SELECT IncidentNo, DisplayDate, DisplayTime,InitRptBy, OffRptBy,
MonthlyRepType, Status, IncidentReported FROM tblIncidentLog WHERE
DisplayDate > DateAdd('m',-1,Now()) ORDER BY " & x & ""

Fra tabellen 'tblIncidentUpdate' skal jeg derefter hente 'UpdateText,
UpdateBy' fra sidste record 'WHERE IncidentId =" & rs("IncidentNo")' fra
ovenstående søgning.

Kan nogen i gruppen hjælpe med en løsning på at finde sidste record i en
tabellen 'tblIncidentUpdate' hvor 'IncidentId = rs("IncidentNo")' og
eventuelt sammenkæde de 2 søgninger i en SQL sætning?

På forhånd tak
Henning






 
 
Christian R. Larsen (18-10-2007)
Kommentar
Fra : Christian R. Larsen


Dato : 18-10-07 08:01

"Henning Smed" <henning snabela smeds.dk> wrote in message
news:4715db33$0$2682$d40e179e@nntp06.dk.telia.net...
> Hej,
>
> Jeg har brug for at sammenkæde og liste indholdet af 2 tabeller med SQL
> SELECT:
>
> Fra tabellen 'tblIncidentLog' henter jeg foregående måned med:
>
> SQLstmt = "SELECT IncidentNo, DisplayDate, DisplayTime,InitRptBy,
> OffRptBy, MonthlyRepType, Status, IncidentReported FROM tblIncidentLog
> WHERE DisplayDate > DateAdd('m',-1,Now()) ORDER BY " & x & ""
>
> Fra tabellen 'tblIncidentUpdate' skal jeg derefter hente 'UpdateText,
> UpdateBy' fra sidste record 'WHERE IncidentId =" & rs("IncidentNo")' fra
> ovenstående søgning.
>
> Kan nogen i gruppen hjælpe med en løsning på at finde sidste record i en
> tabellen 'tblIncidentUpdate' hvor 'IncidentId = rs("IncidentNo")' og
> eventuelt sammenkæde de 2 søgninger i en SQL sætning?

Indeholder tblIncidentUpdate et timestamp eller et andet datostempel, som du
kan sortere efter, for at få vist den seneste record først?

I så fald ... ORDER BY <timestamp> LIMIT 1



Ukendt (18-10-2007)
Kommentar
Fra : Ukendt


Dato : 18-10-07 09:56


"Christian R. Larsen" <crlarsen@hotmail.com> wrote in message
news:471704a7$0$90270$14726298@news.sunsite.dk...
> "Henning Smed" <henning snabela smeds.dk> wrote in message
> news:4715db33$0$2682$d40e179e@nntp06.dk.telia.net...
>> Hej,
>>
>>
>> Kan nogen i gruppen hjælpe med en løsning på at finde sidste record i en
>> tabellen 'tblIncidentUpdate' hvor 'IncidentId = rs("IncidentNo")' og
>> eventuelt sammenkæde de 2 søgninger i en SQL sætning?
>
> Indeholder tblIncidentUpdate et timestamp eller et andet datostempel, som
> du kan sortere efter, for at få vist den seneste record først?
>
> I så fald ... ORDER BY <timestamp> LIMIT 1
Hej Christian,
Ja jeg har en autonummering så jeg kan finde sidste record med ORDER BY og
LIMIT 1, men jeg har også brug for at kende det antal records der er bundet
til et bestemt 'IncidentId' fra den første tabel, det kan klares med SELECT
COUNT(Id) AS antal WHERE ---

Tak for hjælpen
Henning



Ukendt (18-10-2007)
Kommentar
Fra : Ukendt


Dato : 18-10-07 10:43


"Christian R. Larsen" <crlarsen@hotmail.com> wrote in message
news:471704a7$0$90270$14726298@news.sunsite.dk...
> "Henning Smed" <henning snabela smeds.dk> wrote in message
> news:4715db33$0$2682$d40e179e@nntp06.dk.telia.net...
>> Hej,
>>
> Indeholder tblIncidentUpdate et timestamp eller et andet datostempel, som
> du kan sortere efter, for at få vist den seneste record først?
>
> I så fald ... ORDER BY <timestamp> LIMIT 1
Hej Igen Christian,

Jeg kan ikke få LIMIT 1 til at fungere:

SQLstmt = "SELECT UpdateText, UpdateBy FROM tblIncidentUpdate WHERE
IncidentId =" & rs("IncidentNo") & " ORDER BY UpdateId ASC"

Fungerer fint men:

SQLstmt = "SELECT UpdateText, UpdateBy FROM tblIncidentUpdate WHERE
IncidentId =" & rs("IncidentNo") & " ORDER BY UpdateId ASC LIMIT 1"

Giver fejlen:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in ORDER BY clause

M.v.h.
Henning



Ukendt (18-10-2007)
Kommentar
Fra : Ukendt


Dato : 18-10-07 10:50

"Henning Smed" <henning snabela smeds.dk> wrote in message
news:47172aa0$0$2673$d40e179e@nntp06.dk.telia.net...
>
> "Christian R. Larsen" <crlarsen@hotmail.com> wrote in message
> news:471704a7$0$90270$14726298@news.sunsite.dk...
>> "Henning Smed" <henning snabela smeds.dk> wrote in message
>> news:4715db33$0$2682$d40e179e@nntp06.dk.telia.net...
>>> Hej,
>>>
>> Indeholder tblIncidentUpdate et timestamp eller et andet datostempel, som
>> du kan sortere efter, for at få vist den seneste record først?
>>
>> I så fald ... ORDER BY <timestamp> LIMIT 1
> Hej Igen Christian,
>
> Jeg kan ikke få LIMIT 1 til at fungere:
>
Efter lidt søgning viser det sig at LIMIT fungerer i MySql men ikke i MsSql

http://www.google.dk/search?hl=da&q=MsSql+LIMIT+1&meta=

M.v.h.
Henning



Christian R. Larsen (18-10-2007)
Kommentar
Fra : Christian R. Larsen


Dato : 18-10-07 11:11

"Henning Smed" <henning snabela smeds.dk> wrote in message
news:47172c3c$0$2680$d40e179e@nntp06.dk.telia.net...
> "Henning Smed" <henning snabela smeds.dk> wrote in message
> news:47172aa0$0$2673$d40e179e@nntp06.dk.telia.net...
>>
>> "Christian R. Larsen" <crlarsen@hotmail.com> wrote in message
>> news:471704a7$0$90270$14726298@news.sunsite.dk...
>>> "Henning Smed" <henning snabela smeds.dk> wrote in message
>>> news:4715db33$0$2682$d40e179e@nntp06.dk.telia.net...
>>>> Hej,
>>>>
>>> Indeholder tblIncidentUpdate et timestamp eller et andet datostempel,
>>> som du kan sortere efter, for at få vist den seneste record først?
>>>
>>> I så fald ... ORDER BY <timestamp> LIMIT 1
>> Hej Igen Christian,
>>
>> Jeg kan ikke få LIMIT 1 til at fungere:
>>
> Efter lidt søgning viser det sig at LIMIT fungerer i MySql men ikke i
> MsSql

Nej, der skal du i stedet bruge SELECT TOP 1 FROM ...



Christian R. Larsen (18-10-2007)
Kommentar
Fra : Christian R. Larsen


Dato : 18-10-07 11:10

"Henning Smed" <henning snabela smeds.dk> wrote in message
news:47172aa0$0$2673$d40e179e@nntp06.dk.telia.net...
>
> "Christian R. Larsen" <crlarsen@hotmail.com> wrote in message
> news:471704a7$0$90270$14726298@news.sunsite.dk...
>> "Henning Smed" <henning snabela smeds.dk> wrote in message
>> news:4715db33$0$2682$d40e179e@nntp06.dk.telia.net...
>>> Hej,
>>>
>> Indeholder tblIncidentUpdate et timestamp eller et andet datostempel, som
>> du kan sortere efter, for at få vist den seneste record først?
>>
>> I så fald ... ORDER BY <timestamp> LIMIT 1
> Hej Igen Christian,
>
> Jeg kan ikke få LIMIT 1 til at fungere:
>
> SQLstmt = "SELECT UpdateText, UpdateBy FROM tblIncidentUpdate WHERE
> IncidentId =" & rs("IncidentNo") & " ORDER BY UpdateId ASC"
>
> Fungerer fint men:
>
> SQLstmt = "SELECT UpdateText, UpdateBy FROM tblIncidentUpdate WHERE
> IncidentId =" & rs("IncidentNo") & " ORDER BY UpdateId ASC LIMIT 1"
>
> Giver fejlen:
> Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
> [Microsoft][ODBC Microsoft Access Driver] Syntax error in ORDER BY clause

Umiddelbart ville jeg droppe ASC. Den siger jo, der er fejl i ORDER BY -
udtrylkket.




Ukendt (18-10-2007)
Kommentar
Fra : Ukendt


Dato : 18-10-07 09:15


"Henning Smed" <henning snabela smeds.dk> wrote in message
news:4715db33$0$2682$d40e179e@nntp06.dk.telia.net...
> Hej,
>
> Jeg har brug for at sammenkæde og liste indholdet af 2 tabeller med SQL
> SELECT:
>
> Fra tabellen 'tblIncidentLog' henter jeg foregående måned med:
>
> SQLstmt = "SELECT IncidentNo, DisplayDate, DisplayTime,InitRptBy,
> OffRptBy, MonthlyRepType, Status, IncidentReported FROM tblIncidentLog
> WHERE DisplayDate > DateAdd('m',-1,Now()) ORDER BY " & x & ""
>
> Fra tabellen 'tblIncidentUpdate' skal jeg derefter hente 'UpdateText,
> UpdateBy' fra sidste record 'WHERE IncidentId =" & rs("IncidentNo")' fra
> ovenstående søgning.
>
> Kan nogen i gruppen hjælpe med en løsning på at finde sidste record i en
> tabellen 'tblIncidentUpdate' hvor 'IncidentId = rs("IncidentNo")' og
> eventuelt sammenkæde de 2 søgninger i en SQL sætning?
>
Min løsning blev indtil videre:
Jeg kontroller om "UpdateDate" i den første tabel 'tblIncidentLog'
eksisterer og kører forespørgsel i 'tblIncidentUpdate' og en loop for at
tælle antal records og finde sidste record.
Der vil være et meget begrænset antal records i 'tblIncidentUpdate' så
loop'n påvirker ikke hastigheden mærkbart. Men det må kunne løses mere
elegant.

<%
SQLstmt = "SELECT IncidentNo, DisplayDate, UpdateDate,
DisplayTime,InitRptBy, OffRptBy,
MonthlyRepType, Status, IncidentReported FROM tblIncidentLog WHERE
DisplayDate > DateAdd('m',-1,Now()) ORDER BY " & x & ""
%>
og derefter:

<%
IF rs("UpdateDate") = "" OR NOT IsNull(rs("UpdateDate")) THEN
' get Updated incident from DB by UpdateId
SQLstmt = "SELECT UpdateText, UpdateBy FROM tblIncidentUpdate WHERE
IncidentId =" & rs("IncidentNo")
Conn.Execute(SQLstmt)
Set rsUpdate = Conn.Execute(SQLstmt)
IF NOT rsUpdate.EOF THEN
Dim UpdateNo
UpdateNo=0
DO WHILE NOT rsUpdate.EOF
UpdateNo=UpdateNo + 1
UpdateBy = rsUpdate("UpdateBy")
UpdateText=left((rsUpdate("UpdateText")),150)
rsUpdate.MoveNext
LOOP
%>

M.v.h.
Henning




Ukendt (18-10-2007)
Kommentar
Fra : Ukendt


Dato : 18-10-07 11:55


"Henning Smed" <henning snabela smeds.dk> wrote in message
news:47171609$0$2667$d40e179e@nntp06.dk.telia.net...
>
<%
> SQLstmt = "SELECT IncidentNo, DisplayDate, UpdateDate,
> DisplayTime,InitRptBy, OffRptBy,
> MonthlyRepType, Status, IncidentReported FROM tblIncidentLog WHERE
> DisplayDate > DateAdd('m',-1,Now()) ORDER BY " & x & ""
> %>
> og derefter:
>
>
Hvilken MsSql søgning vil være hurtigst hvis forudsætningen er at record
sættet 'rsUpdate' indeholder max 6 poster pr LOOP og søgninggen gentages
1000 gange ?

1. Som loop med 1 MsSql opslag:
<%
IF rs("UpdateDate") = "" OR NOT IsNull(rs("UpdateDate")) THEN
' get Updated incident from DB by UpdateId
SQLstmt = "SELECT UpdateText, UpdateBy FROM tblIncidentUpdate WHERE
IncidentId =" & rs("IncidentNo")
Conn.Execute(SQLstmt)
Set rsUpdate = Conn.Execute(SQLstmt)
IF NOT rsUpdate.EOF THEN
Dim UpdateNo
UpdateNo=0
DO WHILE NOT rsUpdate.EOF
UpdateNo=UpdateNo + 1
UpdateBy = rsUpdate("UpdateBy")
UpdateText=left((rsUpdate("UpdateText")),150)
rsUpdate.MoveNext
LOOP
%>


2. Uden loop men med 2 MsSql opslag:
<%
IF rs("UpdateDate") = "" OR NOT IsNull(rs("UpdateDate")) THEN
' Get No of incident Updates and latest Update from DB by UpdateId
SQLstmt = "SELECT COUNT(UpdateId) AS antal FROM tblIncidentUpdate WHERE
IncidentId =" & rs("IncidentNo")

Conn.Execute(SQLstmt)
Set rsNo = Conn.Execute(SQLstmt)
UpdateNo = rsNo("Antal")
rsNo.Close

SQLstmt = "SELECT TOP 1 UpdateText, UpdateBy FROM tblIncidentUpdate WHERE
IncidentId =" & rs("IncidentNo") & " ORDER BY UpdateId DESC"
Conn.Execute(SQLstmt)
Set rsUpdate = Conn.Execute(SQLstmt)
UpdateBy = rsUpdate("UpdateBy")
UpdateText=left((rsUpdate("UpdateText")),150)
rsUpdate.Close
%>

M.v.h.
Henning



Christian R. Larsen (18-10-2007)
Kommentar
Fra : Christian R. Larsen


Dato : 18-10-07 13:31

"Henning Smed" <henning snabela smeds.dk> wrote in message
news:47173b75$0$2677$d40e179e@nntp06.dk.telia.net...
> Hvilken MsSql søgning vil være hurtigst hvis forudsætningen er at record
> sættet 'rsUpdate' indeholder max 6 poster pr LOOP og søgninggen gentages
> 1000 gange ?

Jeg vil anbefale dig at flytte data til et array frem for at loope gennem
recordsettet.

MyArray = RS.Getrows()

Herefter ligger recordsettet som kolonner og rækker i dit array. Dete
performer langt bedre end at skulle stå og læse og skrive til og fra
databasen hele tiden.




Ukendt (18-10-2007)
Kommentar
Fra : Ukendt


Dato : 18-10-07 13:48


"Christian R. Larsen" <crlarsen@hotmail.com> wrote in message
news:471751f2$0$90265$14726298@news.sunsite.dk...
> "Henning Smed" <henning snabela smeds.dk> wrote in message
> news:47173b75$0$2677$d40e179e@nntp06.dk.telia.net...
>> Hvilken MsSql søgning vil være hurtigst hvis forudsætningen er at record
>> sættet 'rsUpdate' indeholder max 6 poster pr LOOP og søgninggen gentages
>> 1000 gange ?
>
> Jeg vil anbefale dig at flytte data til et array frem for at loope gennem
> recordsettet.
>
> MyArray = RS.Getrows()
>
> Herefter ligger recordsettet som kolonner og rækker i dit array. Dete
> performer langt bedre end at skulle stå og læse og skrive til og fra
> databasen hele tiden.
>
Hej Christian,

Tak for dir svar.

Jeg ved ikke hvordan man anvender data gemt i et array, men hvis det kan
forbedre hastigheden når jeg skal liste < 1000 records vil jeg forsøge at
finde info om arrays.
Gemmer jeg alle records i et array lige efter Sql søgningen, lukker record
sættet og lister derefter data fra indholdet array ?

M.v.h.
Henning



Christian R. Larsen (19-10-2007)
Kommentar
Fra : Christian R. Larsen


Dato : 19-10-07 10:12

"Henning Smed" <henning snabela smeds.dk> wrote in message
news:471755ec$0$2679$d40e179e@nntp06.dk.telia.net...
>
> "Christian R. Larsen" <crlarsen@hotmail.com> wrote in message
> news:471751f2$0$90265$14726298@news.sunsite.dk...
>> "Henning Smed" <henning snabela smeds.dk> wrote in message
>> news:47173b75$0$2677$d40e179e@nntp06.dk.telia.net...
>>> Hvilken MsSql søgning vil være hurtigst hvis forudsætningen er at record
>>> sættet 'rsUpdate' indeholder max 6 poster pr LOOP og søgninggen
>>> gentages 1000 gange ?
>>
>> Jeg vil anbefale dig at flytte data til et array frem for at loope gennem
>> recordsettet.
>>
>> MyArray = RS.Getrows()
>>
>> Herefter ligger recordsettet som kolonner og rækker i dit array. Dete
>> performer langt bedre end at skulle stå og læse og skrive til og fra
>> databasen hele tiden.
>>
> Hej Christian,
>
> Tak for dir svar.
>
> Jeg ved ikke hvordan man anvender data gemt i et array, men hvis det kan
> forbedre hastigheden når jeg skal liste < 1000 records vil jeg forsøge at
> finde info om arrays.
> Gemmer jeg alle records i et array lige efter Sql søgningen, lukker record
> sættet og lister derefter data fra indholdet array ?

Ja.

Arrays er nemme at bruge.

Et recordset med 5 kolonner og 100 rækker vil eksempelvis kunne bruges som
følger:

....
MyArray = RS.getrows()
RS.close

For x = 1 to ubound(MyArray,2)

Felt1 = MyArray (0, x)
Felt2 = MyArray (1, x)
Felt3 = MyArray (2, x)
Felt4 = MyArray (3, x)
Felt5 = MyArray (4, x)

next









Ukendt (20-10-2007)
Kommentar
Fra : Ukendt


Dato : 20-10-07 12:37


"Christian R. Larsen" <crlarsen@hotmail.com> skrev i en meddelelse
news:471874ed$0$90274$14726298@news.sunsite.dk...
> "Henning Smed" <henning snabela smeds.dk> wrote in message
> news:471755ec$0$2679$d40e179e@nntp06.dk.telia.net...
>>
>> "Christian R. Larsen" <crlarsen@hotmail.com> wrote in message
>> news:471751f2$0$90265$14726298@news.sunsite.dk...
>>> "Henning Smed" <henning snabela smeds.dk> wrote in message
>>> news:47173b75$0$2677$d40e179e@nntp06.dk.telia.net...
>>>> Hvilken MsSql søgning vil være hurtigst hvis forudsætningen er at
>>>> record sættet 'rsUpdate' indeholder max 6 poster pr LOOP og søgninggen
>>>> gentages 1000 gange ?
>>>
>>> Jeg vil anbefale dig at flytte data til et array frem for at loope
>>> gennem recordsettet.
>>>
>>> MyArray = RS.Getrows()
>>>
>>> Herefter ligger recordsettet som kolonner og rækker i dit array. Dete
>>> performer langt bedre end at skulle stå og læse og skrive til og fra
>>> databasen hele tiden.
>>>
>> Hej Christian,
>>
>> Tak for dir svar.
>>
>> Jeg ved ikke hvordan man anvender data gemt i et array, men hvis det kan
>> forbedre hastigheden når jeg skal liste < 1000 records vil jeg forsøge at
>> finde info om arrays.
>> Gemmer jeg alle records i et array lige efter Sql søgningen, lukker
>> record sættet og lister derefter data fra indholdet array ?
>
> Ja.
>
> Arrays er nemme at bruge.
>
> Et recordset med 5 kolonner og 100 rækker vil eksempelvis kunne bruges som
> følger:
>
> ...
> MyArray = RS.getrows()
> RS.close
>
> For x = 1 to ubound(MyArray,2)
>
> Felt1 = MyArray (0, x)
> Felt2 = MyArray (1, x)
> Felt3 = MyArray (2, x)
> Felt4 = MyArray (3, x)
> Felt5 = MyArray (4, x)
>
> next
Hej Christian,

Jeg har prøver at liste 1200 rækker og 8 kolonner ved at flytte record
sættet til et array, og hastigheden er langt bedre.

Tak for hjælpen
Henning



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409080
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste