Avatar billede steen_hansen Forsker
23. marts 2004 - 10:11 Der er 19 kommentarer og
1 løsning

ASP og Access DB

Jeg er ved at lave en side, som er bygget på ASP og Access-databaser (synes MS SQL 2000-server vil udgøre for stor en post på budgettet).

Mine erfaringer siger mig, at når en Access-database opnår en størrelse på 20-25 MB, så begynder den at blive tung.

Nu skal der bl.a. være artikler, debat m.m. Så derfor har jeg delt databaserne så meget op, som jeg synes det kan lade sig gøre: Artikler i én database, debat og interne beskeder i en anden, afstemning i en tredie etc.

Der er flere funktioner, som jeg har været nødt til at gemme i samme database. F.eks. debatindlæg og interne beskeder. Jeg har yderligere sørget for, at alle interne beskeder bliver slettet efter x dage. Så bliver der da muget lidt ud en gang imellem.

Nu går mit spørgsmål på, om man kan lave flere databaser, så de forskellige funktioner alligevel kan tilknyttes til den samme bruger?

F.eks. kunne det være rart, hvis debat-DB og interne beskeder-DB bliver delt op i - ikke to tabeller - men to databaser. Jeg har ikke meget styr på det, men jeg kunne FORESTILLE mig, at man kunne bruge noget session kombineret med SQL:

WHERE Session("udername") = RS("username")

Eller omvendt. Eller hva'? Er det ikke noget inner join man bruger til det? Håber I forstår hvor jeg vil hen, og håber på nogle gode idéer.
Avatar billede steen_hansen Forsker
23. marts 2004 - 10:14 #1
WHERE Session("udername") = RS("username") = WHERE Session("username") = RS("username")
Avatar billede tubber Juniormester
23. marts 2004 - 10:18 #2
Du nævner selv MS SQL Server, har du overvejet mySQL ?

Ved ikke om du kan kombinere Session og SQL direkte men du kan evt. sætte en variabel som indeholder session username og så sammenholde den med username i db. du skal bare tilføje username til alle poster i alle databaser som den givne user tilføjer noget ?
Avatar billede steen_hansen Forsker
23. marts 2004 - 10:24 #3
Ja, mySQL kender jeg intet til, så der hopper jeg let og elegant over :o)

Når en bruger poster et indlæg i debatten, bliver hans username gemt sammen med indlægget.

Ligeledes (i samme DB) bliver brugeren gemt under sender/recipient, afhængigt om vedkommende sender eller modtager en intern besked.

Får sitet bare 100 brugere, så kan jeg forestille mig, at der ikke går længe, før debatindlæg og interne beskeder får størrelsen på DB op på over de 20-25 MB. Så derfor ville det være fedt, hvis man kunne dele det yderligere op.
Avatar billede steen_hansen Forsker
23. marts 2004 - 10:31 #4
Jeg ved godt, at hvis siden bliver en success, så er det ikke holdbart med Access-databaser, ikke i længden. Men inden jeg går ud og investerer en mindre formue i SQL server, vil jeg gerne se, hvordan det spænder af :o)
Avatar billede tubber Juniormester
23. marts 2004 - 10:37 #5
er det et kommercielt site ?
Avatar billede tubber Juniormester
23. marts 2004 - 10:39 #6
hmmm ser ikke ud til det har noget at sige

http://www.mysql.com og så under download

den er gratis og som jeg har forstået det så er den gratis :)

Skal selv til at se på mySQL skal til at lave noget indkøbssystem og så er en accessdb nok heller ikke nok til kundedb
Avatar billede tubber Juniormester
23. marts 2004 - 10:40 #7
den er gratis og som jeg har forstået det så er den gratis :)

skulle være

den er gratis og som jeg har forstået det så funker den på samme måde som MS SQL Server :)

Er vist ikke vågen endnu
Avatar billede steen_hansen Forsker
23. marts 2004 - 10:57 #8
Nej, det er et non-profit site.

Jeg ved godt mySQL er gratis, men jeg HAR jo et produkt hos min host, som er brugbart. Jeg har lige været inde at tjekke priser, og selv med med MySQL vil det blive en del dyrere.

Lige nu betaler jeg ca. 450,- om året for ASP, Access, JMail, ASPImage og Dundas Upload. Det niveau vil jeg gerne holde det på, indtil jeg kan se udviklingen. Så indtil videre vil jeg fortsætte med mit nuværende abonnement :o)
Avatar billede steen_hansen Forsker
23. marts 2004 - 11:02 #9
Når brugeren er logget på, er sessionen jo aktiv, og så tror jeg, (med min begrænsede viden :o)), at man kan omsætte Session("username") til en variabel, som du omtaler, til at poste indlæg m.m. under den pågældende bruger i de relevante databaser. Nogle gode idéer?
Avatar billede overchord Nybegynder
23. marts 2004 - 11:13 #10
skal du ikke bare oprette sessions til alle db'erne og derefter execute din sql paa den rigtige connection?
Jeg tror du faar svaert ved at inlkudere sessionID i en SQL-string idet SQL'en jo normalt bare sendes til DB'en og eksekveres der.
Hvis du opretter connPost og ConnPM til hhv posts i forum og private beskeder kan du eksekvere SQL-saetninger paa de to.
Avatar billede steen_hansen Forsker
23. marts 2004 - 11:25 #11
Kan du kort ridse det op, overchord?

Når f.eks. en bruger svarer på et emne, bliver der også sendt en mail:

<%
Const MaxLength = 5000

Dim Conn, RS, vID

vID = Request.Form("id")
If Not IsNumeric(vID) Then vID = 0
vID = Int(vID)
If vID < 0 Then vID = 0

If vID = 0 Then
    Response.Redirect "default.asp"
End If

If Trim(Request.Form("content")) = "" Then
    Response.Redirect "/view.asp?id=" & vID
ElseIf Len(Request.Form("message")) > MaxLength Then
    Response.Redirect "/error.asp?msg=Kommentaren+er+for+lang."
End If
   
Set Conn = CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/fpdb/mindatabase.mdb")

'Debatemne eksisterer ikke:
If Conn.Execute("SELECT postID FROM posts WHERE postID = " & vID).EOF Then
    Conn.Close
    Response.Redirect "/error.asp?msg=Debatemnet+som+kommenteres+findes+ikke."
End If
   
Conn.Execute "INSERT INTO posts (catID, author, content, posted, postparent) VALUES (" & _
    "0, " & _
    "'" & SQLEncode(Session("username")) & "', " & _
    "'" & SQLEncode(Request.Form("content")) & "', " & _
    "'" & Day(Date()) & "-" & Month(Date()) & "-" & Year(Date()) & " " & Time() & "', " & _
    vID & ")"

SQL = "SELECT DISTINCT [profiles].[email] FROM posts INNER JOIN profiles ON [posts].[author]=[profiles].[username] WHERE [posts].[postid]= " & vID & " Or [posts].[postparent] = " & vID
Set RSMAILS = Conn.Execute(SQL)

DO UNTIL RSMAILS.EOF
Set JMail          = Server.CreateObject("JMail.SMTPMail")
JMail.ServerAddress = "smtp.mail.dk"
JMail.Sender        = "min@email.dk"
JMail.Subject      = "Dit spørgsmål er besvaret!"
JMail.AddRecipient  RSMAILS("Email")
JMail.Priority      = 3
JMail.AddHeader    "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
JMail.Body = "DENNE MAIL ER GENERERET AUTOMATISK, OG KAN IKKE BESVARES!" & vbCrLf & vbCrLf & "Indlæg er besvaret!"& vbCrLf & "Se det på: http://www.minside.dk/debatten/view.asp?id=105"
JMail.Execute
Set JMail = Nothing
RSMAILS.MOVENEXT
LOOP
   
Response.Redirect "view.asp?id=" & vID
%>
Avatar billede steen_hansen Forsker
23. marts 2004 - 11:44 #12
Ikke fordi du skal lave koden, bare for at du kan se hvordan mit er bygget op :o)
Avatar billede tubber Juniormester
23. marts 2004 - 11:51 #13
Ja jeg tror jeg er stået af nu :)
Men følger lige med man kunne jo lære noget
Avatar billede overchord Nybegynder
23. marts 2004 - 16:58 #14
ok vender lige tilbage lidt senere - mm andre har bedre bud i mellemtiden
Avatar billede overchord Nybegynder
24. marts 2004 - 11:56 #15
Jeg har svaert ved at se hvordan du kan bryde det mere ned end det du allerede har i koden. Selvf kunne du bryde INSERT INTO saetning op og smide del-informationer i to forskellige database - men jeg tror helt aerligt ikke at det vil vaere en god ide - du vil goere sitet meget langsommere ved at skulle lave queries i to forskellige databaser for hvoer kommentar der traekkes ud. Selvom databasen maaske hurtigere naar de 25 mb tror jeg at med indeksering af f.eks "posted" vil du kunne lave langt hurtigere opslag i en enkelt database fremfor at splitte det op.
Det vil ogsaa blive ret tricky med en opdeling eftersom du ville vaere noed til at eksekvere en query til db nr 2 inde i rs-loop for nr 1 naar du traekker posts og kommentarer ud igen.
Avatar billede steen_hansen Forsker
24. marts 2004 - 12:32 #16
Ok, det var ikke lige med debatten. Jeg skulle have forklaret det bedre, det må du undskylde.

I samme DB har jeg både en debat og interne beskeder. Det er de 2 ting, jeg gerne ville have skilt ad:

1. Alt, hvad der bliver postet af den pågældende bruger i debatten, skal gemmes i DB1

2. Alt hvad han sender/modtager af interne beskeder skal gemmes i DB2
Avatar billede overchord Nybegynder
24. marts 2004 - 14:32 #17
arh ok nu forstaar jeg bedre :-)

Men er det ikke bare et spm om at lave to conn's:

set connIntern = CreateObject("ADODB.Connection")
ConnIntern.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/fpdb/DB1.mdb")

set ConnPosts = CreateObject("ADODB.Connection")
ConnPosts.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/fpdb/DB2.mdb")

Og herefter dele SQL op i de to med RSMail og RSPost?
Avatar billede steen_hansen Forsker
24. marts 2004 - 17:19 #18
overchord, det vil jeg afprøve, men jeg får ikke tid lige nu. Nok først i aften eller i morgen. Kan du ikke lægge et svar? :o)
Avatar billede overchord Nybegynder
26. marts 2004 - 11:06 #19
jo da :-)
Avatar billede steen_hansen Forsker
28. marts 2004 - 16:55 #20
Takker :o)
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