Hej Hejsan Nina, Hej och tack för svaret! Hejsan igen, Så här har jag fått till det nu..... Eller kanske man skall ha group by eller inner join (eller vad det heter) ? Hej igen! Vet inte om jag skulle svara eftersom jag inte är riktigt säker på vad du vill göra, men om jag föstått dig rätt så gör något sånt här: Jag ger inte upp så lätt!! Nu har jag fått till det så att allt visas i en lång rad med endast ett ortnamn över flera personer :-) Det är bara det att varje person står 2 gånger. OM personen har BÅDE födelse- och dödsplats står hon med, annars inte..... Kanske detta är till någon hjälp? Hej Andreas! Tipps: Hejlista ortsnamn och gårdar
Jag undrar hur man gör om man vill göra följande:
Jag har ett alfabet, där varje bokstav är klickbar. När man tex klickar på G så skall alla personer som bor tex på en ort som börjar på G visas,,,dessutom skall de gårdsnamnen som tillhör Gamleby visas, med de personerna som levde där visas...se ex.
För att förstå vad jag menar så kolla på http://www.ninaz.com och klicka på knappen ortregister. Jag vill att de skall se ut som det gör där men att det blir dynamiskt och själv plockar upp från databasen. Som jag har nu så är det en lååååång sida med alla namnen skrivna inne på sidan. Ganska jobbigt att hålla reda på allt.! I databsen har jag "fodelseplats" och "dodsplats" som man skulle kunna använda men jag vet inte hur man gör!
---------------------------------------------------------------------------------------
Exempel:
Gamleby, Kalmar län (H)
Baldursrum
Elisabeth Mårtensdotter ca 1685-1750
Elsa Cajsa Johansdotter 1775-1854
Johan Månsson 1741-1810
Johan Nilsson ca 1677-1767
Stina Persdotter 1747-1834
Båtsmanstorpet
Maths Törnbuske ca 1729/31 -1789
Brita Månsdotter ca 1734-1797
Himmelsrum
Anna Brita Larsdotter 1787-1854
Anna Lovisa Jansdotter 1837-
Catharina Jonsdotter 1752-1842
Jan Gustaf Jansson 1811-1891
Lars Bengtsson 1750-1813
Kallåker
Brita Larsdotter
Maja Persdotter 1770-1822
Pehr Larsson
Löckerum
Anna Danielsdotter 1788-1879
Anna Persdotter
Börje Persson ca 1668-senast 1744
Catharina Jönsdotter
??NinaSv: lista ortsnamn och gårdar
Vet inte om det är personer med födelseplatsen, dödsplatsen eller båda, som du vill ska hamna under ex. Gamleby...?
Om det bara är den ena av dom (verkar som du har dödsplats i listan idag), så kan man göra enligt följande:
Om man i alfabetet skickar med en QueryString som innehåller ex. G (ex. visa.asp?plats=g), kan man skapa SQL-strängen enligt följande:
visa = "SELECT * FROM tblPersoner WHERE dodsplats LIKE '" & Request.QueryString("plats") & "%' ORDER BY dodsplats, Namn"
Då får man ut info med samtliga personer som har en dödsplats som börjar på G...
Hoppas det är till nån' hjälp!
//TommySv: lista ortsnamn och gårdar
Hur blir det om jag vill ha både födelse- och dödsplats?
Och hur gör man med rubrikerna? Hur får man med dem?
Det blir ju tex
Gamleby, Småland (H)
namn
namn
(Gård) Baldursrum (som ju ligger i Gamleby, och som börjar på B? )
namn
namn
mvh NinaSv: lista ortsnamn och gårdar
Jag ska göra ett försök...
...men jag gissar det finns bättre sätt att lösa det på...!
...och att jag kanske gör bort mig helt! :)
Man skulle kunna dela upp det på flera SQL-frågor.
Om man börjar med att gå igenom tabellen efter platser som börjar på vald bokstav, och slår ihop alla med samma namn till en:
(Detta får man göra två gånger, eftersom det är två separata kolumner... (...eller går det att göra en 'INNER JOIN' och få med bägge i samma?? Någon som kan??))
<% Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databas.mdb")
Set RSFodPlats = Server.CreateObject("ADODB.Recordset")
fodplats = "SELECT fodelseplats FROM tblPersoner WHERE fodelseplats LIKE '" & Request.QueryString("plats") & "%' GROUP BY fodelseplats ORDER BY fodelseplats"
RSFodPlats.Open fodplats, Conn, adOpenDynamic, adLockOptimistic
Set RSDodPlats = Server.CreateObject("ADODB.Recordset")
dodplats = "SELECT dodsplats FROM tblPersoner WHERE dodsplats LIKE '" & Request.QueryString("plats") & "%' GROUP BY dodsplats ORDER BY dodsplats"
RSDodPlats.Open dodplats, Conn, adOpenDynamic, adLockOptimistic %>
När detta är gjort, får man göra en liten loop som går igenom tabellen igen och hämtar alla personer som finns registrerade på dessa platser:
(Även här får man göra en för dödsplats resp. en för födelseplats.)
<table>
<% Do Until RSFodPlats.EOF %>
<tr>
<td><font size="1"><% =RSFodPlats("fodelseplats") %> </font></td>
</tr>
<% strFodPlats = RSFodPlats("fodelseplats")
Set RSFodPers = Server.CreateObject("ADODB.Recordset")
FodPers = "SELECT * FROM tblPersoner WHERE fodelseplats = '" & strFodPlats & "' ORDER BY personnamn"
RSFodPers.Open FodPers, Conn, adOpenDynamic, adLockOptimistic %>
strGardsnamn = RSFodPers("gardsnamn") %>
<tr>
<td><font size="1"><% =RSFodPers("gardsnamn") %> </font></td>
</tr>
<% Do Until RSFodPers.EOF
If strGardsnamn <> RSFodPers("gardsnamn") Then
strGardsnamn = RSFodPers("gardsnamn") %>
<tr>
<td><font size="1"><% =RSFodPers("gardsnamn") %> </font></td>
</tr>
<tr>
<td><font size="1">"><% =RSFodPers("Namn") %> </font></td>
</tr>
<% Else %>
<tr>
<td><font size="1">"><% =RSFodPers("Namn") %> </font></td>
</tr>
<% End If
RSFodPers.MoveNext
Loop
RSFodPers.Close
strGardsnamn = 0
RSFodPlats.MoveNext
Loop
RSFodPlats.Close %>
</table>
<table>
<% Do Until RSDodPlats.EOF %>
<tr>
<td><font size="1"><% =RSDodPlats("dodsplats") %> </font></td>
</tr>
<% strDodPlats = RSDodPlats("dodsplats")
Set RSDodPers = Server.CreateObject("ADODB.Recordset")
DodPers = "SELECT * FROM tblPersoner WHERE dodsplats = '" & strDodPlats & "' ORDER BY personnamn"
RSDodPers.Open DodPers, Conn, adOpenDynamic, adLockOptimistic %>
strGardsnamn = RSDodPers("gardsnamn") %>
<tr>
<td><font size="1"><% =RSDodPers("gardsnamn") %> </font></td>
</tr>
<% Do Until RSDodPers.EOF
If strGardsnamn <> RSDodPers("gardsnamn") Then
strGardsnamn = RSDodPers("gardsnamn") %>
<tr>
<td><font size="1"><% =RSDodPers("gardsnamn") %> </font></td>
</tr>
<tr>
<td><font size="1">"><% =RSDodPers("Namn") %> </font></td>
</tr>
<% Else %>
<tr>
<td><font size="1">"><% =RSDodPers("Namn") %> </font></td>
</tr>
<% End If
RSDodPers.MoveNext
Loop
RSDodPers.Close
strGardsnamn = 0
RSDodPlats.MoveNext
Loop
RSDodPlats.Close %>
</table>
Kanske nån' annan kan lösa det hela på nåt' bättre sätt?
Om inte annat, är det en liten hint om hur man får göra...
Allt är skrivet rakt ur huvudet, så det finns säkert nån' miss i det...
//TommySv: lista ortsnamn och gårdar
http://127.0.0.1/genealogy/ort.asp?bokstav=R
det är bara det att jag vill ha att det står Ramkvilla 1 gång och sedan de 3 personerna under, och sedan Roma med sina 5 personer under...jag kan inte få till det så bara :-(
Koden jag använder är:
<code>strSQL = "SELECT distinct fodelseplats, info, enamn, fornamn FROM tabellen WHERE fodelseplats LIKE '" & Request.QueryString("bokstav") & "%' order by fodelseplats, enamn asc"
</code>
Och sedan fattar jag inte var jag skall sätta "brake-commandot" nånstans så att raden bryts av?
mvh NIna
http://www.ninaz.com/ort.asp?bokstav=RSv: lista ortsnamn och gårdar
/NinaSv: lista ortsnamn och gårdar
ingen som har någon idé?
Fråga: Jag har altså 2 kolumner i databasen där ortnamn står. En där personen är född och en där han dog.
Nu vill jag via ett klick på tex A få upp alla ortnamn som börjar på A och där de 2 kolumnerna visas i samma lista under rubriken Orter, och personen som bor på de olika platserna skall radas upp under Orter?
Hur gör man detta? Är det svårt?
NinaSv: lista ortsnamn och gårdar
Läs upp alla ortsnamn med en loop i en array. Gör sedan en annan loop där du läser upp alla personer som matchar första dimensionen i arrayen och skriv arrayen-dimensionen och resultaten, sedan går du vidare i loopen med nästa dimension osv.Sv: lista ortsnamn och gårdar
nån som kan se vad som är galet?
<code>
<tr><td id="b" colspan="5">Klicka på begynnelsebokstaven till det efternamn du söker</td></tr>
<tr>
<td id="bb" colspan="5">
| A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
</TD>
</tr>
<tr>
<td id="bb" colspan="5">
| X |
Y |
Z |
Å |
Ä |
Ö |
</td></tr>
<tr><td height="10"> </td></tr>
<% Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("forskning.mdb")
Set RSFodPlats = Server.CreateObject("ADODB.Recordset")
fodplats = "SELECT fodelseplats2 FROM tabellen WHERE fodelseplats2 LIKE '" & Request.QueryString("bokstav") & "%' GROUP BY fodelseplats2 ORDER BY fodelseplats2"
RSFodPlats.Open fodplats, Conn, adOpenDynamic, adLockOptimistic
Set RSDodPlats = Server.CreateObject("ADODB.Recordset")
dodplats = "SELECT dodplats FROM tabellen WHERE dodplats LIKE '" & Request.QueryString("bokstav") & "%' GROUP BY dodplats ORDER BY dodplats"
RSDodPlats.Open dodplats, Conn, adOpenDynamic, adLockOptimistic %>
<table>
<% Do Until RSFodPlats.EOF %>
<tr>
<td id="bb"><% =RSFodPlats("fodelseplats2") %> </font></td>
</tr>
<% strFodPlats = RSFodPlats("fodelseplats2")
Set RSFodPers = Server.CreateObject("ADODB.Recordset")
FodPers = "SELECT * FROM tabellen WHERE fodelseplats2 = '" & strFodPlats & "' ORDER BY info"
RSFodPers.Open FodPers, Conn, adOpenDynamic, adLockOptimistic
strinfo = RSFodPers("info") %>
<tr>
<td id="bb"><% =RSFodPers("info") %> </font></td>
</tr>
<% Do Until RSFodPers.EOF
If strinfo <> RSFodPers("info") Then
strinfo = RSFodPers("info") %>
<tr>
<td id="bb"><% =RSFodPers("info") %> </font></td>
</tr>
<tr>
<td id="bb">"><% =RSFodPers("info") %> </font></td>
</tr>
<% Else %>
<tr>
<td id="bb">"><% =RSFodPers("info") %> </font></td>
</tr>
<% End If
RSFodPers.MoveNext
Loop
RSFodPers.Close
strinfo = 0
RSFodPlats.MoveNext
Loop
RSFodPlats.Close %>
</table>
<table>
<% Do Until RSDodPlats.EOF %>
<tr>
<td id="aa"><% =RSDodPlats("dodplats") %> </font></td>
</tr>
<% strDodPlats = RSDodPlats("dodplats")
Set RSDodPers = Server.CreateObject("ADODB.Recordset")
DodPers = "SELECT * FROM tabellen WHERE dodplats = '" & strDodPlats & "' ORDER BY info asc"
RSDodPers.Open DodPers, Conn, adOpenDynamic, adLockOptimistic
strinfo = RSDodPers("info") %>
<tr>
<td id="bb"><font><% =RSDodPers("info") %> </font></td>
</tr>
<% Do Until RSDodPers.EOF
If strinfo <> RSDodPers("info") Then
strinfo = RSDodPers("info") %>
<tr>
<td id="bb"><% =RSDodPers("info") %> </font></td>
</tr>
<tr>
<td id="bb">"><% =RSDodPers("info") %> </font></td>
</tr>
<% Else %>
<tr>
<td id="bb">"><% =RSDodPers("info") %> </font></td>
</tr>
<% End If
RSDodPers.MoveNext
Loop
RSDodPers.Close
strinfo = 0
RSDodPlats.MoveNext
Loop
RSDodPlats.Close %>
</table>
</code>
------------------------------------------
Personen skall stå med 1 gång om hon är född och död på samma ställe.
Är hon född tex i Gamleby och död i Ukna skall hon stå på bägge dessa ställena.
Om personen BARA har tex en födelseplats Tex Ukna skall personen stå med där...
mvh NinaSv: lista ortsnamn och gårdar
<code>
<tr><td id="b" colspan="5">Klicka på begynnelsebokstaven till det efternamn du söker</td></tr>
<tr>
<td id="bb" colspan="5"> | <%
Dim Letter
Dim strBokstav
strBokstav = UCase(Left(Request.QueryString("bokstav"), 1))
For Each Letter In Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "U", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Å", "Ä", "Ö")
If Letter = strBokstav Then
Response.Write "<b>" & Server.HTMLEncode(Letter) & "</b> | "
Else
Response.Write "" & Server.HTMLEncode(Letter) & " | "
End If
Next
%>
</TD>
</tr>
<tr><td height="10"> </td></tr>
<table>
<%
Dim Conn
Dim rsPlatser
Dim rsPersoner
Dim strSQL
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("forskning.mdb")
strSQL = "SELECT fodelseplats2 As PlatsNamn" & vbCrLf & _
"FROM tabellen" & vbCrLf & _
"WHERE fodelseplats2 LIKE '" & strBokstav & "%' GROUP BY fodelseplats2" & vbCrLf & _
"UNION ALL" & vbCrLf & _
"SELECT dodplats As PlatsNamn" & vbCrLf & _
"FROM tabellen" & vbCrLf & _
"WHERE dodplats LIKE '" & strBokstav & "%' GROUP BY dodplats"
Set rsPlatser = Server.CreateObject("ADODB.Recordset")
rsPlatser.Open strSQL, Conn
Set rsPersoner = Server.CreateObject("ADODB.Recordset")
Do Until rsPlatser.EOF
%>
<tr>
<td id="bb"><% =rsPlatser("PlatsNamn") %> </font></td>
</tr>
<%
strSQL = "SELECT *" & vbCrLf & _
"FROM tabellen" & vbCrLf & _
"WHERE fodelseplats2 = '" & Replace(rsPlatser("PlatsNamn"), "'", "''") & "' OR dodplats = '" & Replace(rsPlatser("PlatsNamn"), "'", "''") & "' ORDER BY info" &
rsPersoner.Open strSQL, Conn
%>
<tr>
<td id="bb"><% =RSFodPers("info") %> </font></td>
</tr>
<%
Do Until rsPersoner.EOF
%>
<tr>
<td id="bb">"><% =rsPersoner("info") %> </font></td>
</tr>
<%
rsPersoner.MoveNext
Loop
rsPersoner.Close
rsPlatser.MoveNext
Loop
rsPlatser.Close
%>
</table>
</code>Sv: lista ortsnamn och gårdar
Jag testade din kod men får följande:
Eds Bruk, Västra Ed (H)
Körningsfel i Microsoft VBScript fel '800a000d'
Inkompatibla typer: 'RSFodPers'
/genealogy/ort3.asp, rad 78
på raden 78 står det:
<td id="bb"><% =RSFodPers("info") %> </font></td>
-------------------------------------------------------------------------------
Personen skall stå med 1 gång om hon är född och död på samma ställe.
Är hon född tex i Gamleby och död i Ukna skall hon stå på bägge dessa ställena.
Om personen BARA har tex en födelseplats Tex Ukna skall personen endast stå med där...
mvh Nina
Sv: lista ortsnamn och gårdar
Kolla om databasen är riktigt normaliserad för att passa ditt syfte.
Om man får problem med att få till SQL satser mm kan det vara resultatet av att man missat något vid designen av databasens tabeller.
Vissa missar kan man ofta lösa genom luriga SQL satser men vissa ställer bara till mer elände än man får om man gör om databasens design.Sv: lista ortsnamn och gårdar
frågan är ju om det är rätt att <% =RSFodPers("info") %> skall vara med. Eftersom det inte finns nånannanstans i koden?
Jag har aldrig haft problem med min databas förut, men jag vet dock så mycket att skriver man bara en grej fel i asp så funkar det inte.
Nina