Avatar billede x-pander Nybegynder
01. marts 2007 - 13:29 Der er 29 kommentarer og
1 løsning

Tjekke flere værdier i en database

Hej.

Jeg sidder med et lidt uoverskueligt problem. Jeg er igang med et forum og nu skal jeg tjekke flere ting inden indlæggende bliver udskrevet:

Et indlæg lavet af en administrator skal have en anden farve end et oprettet af en normal bruger.
Når min bruger logger ind, gemmes hans rettigheder (0 og 1) i en Session("Userstatus"). Den tildeles så (row.Item("fldStatus")) som er enten 0 eller 1.
Når så en bruger eller en administrator laver et indlæg, så er det eneste der skal gemmes med indlægget, hans ID.

Så selve problemet er at jeg skal læse hvad en brugers Session("Userstatus") svarer til udfra at kende hans ID i en anden tabel.

Hvis i ikke forstår spørgsmålet, så sig endelig til.
Avatar billede x-pander Nybegynder
01. marts 2007 - 13:34 #1
Jeg kunne forestille mig det var noget med INNER JOIN i databasen måske, men det har jeg aldrig arbejdet med.
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 13:36 #2
hvordan udskriver du dine indlæg ?
Avatar billede x-pander Nybegynder
01. marts 2007 - 13:39 #3
I en tabel, så hvert indlæg bliver skrevet ud en tabel direkte i code behinden og baggrundsfarven bliver bestemt af en variabel ved navn bgColor, som så bliver sat til enten eller:

If Session("UserStatus") = 0 Then

bgColor = "#DE9C33"
adminStatus = " - (Administrator)"
  Else

bgColor = "#DEBB84"
adminStatus = " - (User)"
  End If
Avatar billede x-pander Nybegynder
01. marts 2007 - 13:39 #4
Og adminStatus skal så ændres til navnet, men føler ikke jeg kan komme videre lige nu inden det der problem bliver løst ordenligt, så jeg ved om det er muligt eller om jeg bare må begive mig videre...
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 13:41 #5
noget med:
SELECT UserStatus FROM indlaeg i
JOIN Brugere b ON b.brugerid=i.brugerid
WHERE i.indlaægid = etindlaegid
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 13:41 #6
nu kender jeg ikke dine tabel navne.
Avatar billede x-pander Nybegynder
01. marts 2007 - 13:53 #7
Argh, er virkelig glad for du skriver så hurtigt tilbage! :)

Men hvis du vil, så får du mine tabelnavne, så hvis du kunne sætte de rigtige navne ind, for mit hoved er gået i stykker efter det her.

tblHotline:
ID fldHeadline fldText fldStatus fldPostID fldTextType fldDate fldUser
---------------------------------------------------------------------------------
ID = n på indlægget
fldHeadline = Overskrift på indlægget
fldText = Teksten i indlægget
fldStatus = ID n på brugeren der har oprettet indlægget
fldPostID = Trådens unikke ID n
fldTextType = 0 = nyt indlæg OG 1 = svar på eksisterende indlæg
fldDate = Datoen og tid på indlægget
fldUser = (Skal nok bruges istedte for fldStatus)

tblUsers:
ID fldUsername fldPassword fldStatus
---------------------------------------------------------------------------------
ID = n på brugeren.
fldUsername = Brugernavnet
fldPassword = Adgangskoden
fldStatus = 0 = admin OG 1 = bruger
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 13:59 #8
noget med:
SELECT fldStatus FROM tblHotline tl
JOIN tblUsers t ON t.ID =tl.fldUser
WHERE tl.ID = etid
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 14:01 #9
Du skal evt hente feltet ud samtidig med at du hente dine indlæg fra databasen.
Hvordan ser den sql ud ?
og hvordan gennemløber du resultaterne af denne sql sætning altså hvordan generer du output til brugeren.?
Avatar billede x-pander Nybegynder
01. marts 2007 - 14:13 #10
Dette er teksten i indlægget:

SELECT * FROM tblHotline WHERE fldPostID=" & PostID & " ORDER BY ID asc

Jeg satte mig lige ud i helt stilhed og læste http://www.quackit.com/sql/tutorial/sql_join.cfm igennem, så jeg er kommet frem til følgende:

SELECT * FROM tblUsers INNER JOIN tblHotline ON tblUser.ID = tblHotline.fldStatus

Ser det ikke nogenlunde fornuftigt ud?
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 14:23 #11
tblHotline.fldStatus indeholder det brugerid ?
Avatar billede x-pander Nybegynder
01. marts 2007 - 14:25 #12
Ja det er den der svarer til ID ovre i tblUsers.
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 14:30 #13
ja det gør det.
Avatar billede kalp Novice
01. marts 2007 - 14:32 #14
:S besværligt alt det der. Hvis der alligevel kun er 2 farve så lav da en Session["AdminColor"] = "yes";

eller noget i den stil.. og så bare tjek om den er null (vil den være med alle andre end admin).

if(Session["AdminColor"] != null)
udskriv indlæg med admin's farve.
else
udskrive indlæg med brugers farve.


så slipper du da for alt det der database fis.
Avatar billede x-pander Nybegynder
01. marts 2007 - 14:33 #15
Men altså jeg har forstået det rigtigt, hvis jeg siger JOIN fungerer sådan at SQL genererer en tabel med samtlige feltnavne fra begge tabeller og fylder data i tabellen alt efter hvilke data der svarede overens med JOIN i SQL-forespørgelsen.
Avatar billede x-pander Nybegynder
01. marts 2007 - 14:33 #16
Det var lige præcis det jeg gjorde der:

If Session("UserStatus") = 0 Then

bgColor = "#DE9C33"
adminStatus = " - (Administrator)"
  Else

bgColor = "#DEBB84"
adminStatus = " - (User)"
  End If
Avatar billede kalp Novice
01. marts 2007 - 14:34 #17
Denne bliver selvfølgelig kun sat hvis man logger ind som admin.
Session["AdminColor"] = "yes";
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 14:37 #18
ja men her handler det om udskrivningen af det poster som er genereret.
Hvis jeg ikke har misforstået noget skal et indlæg skrevet af en admin have en anden farve ?

Hvordan ser koden ud som generer output til brugeren ?
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 14:41 #19
du kan også nøjes med at hente bestemte felter ud f.eks:
SELECT tblUser.ID,tblHotline.fldStatus FROM tblUsers INNER JOIN tblHotline ON tblUser.ID = tblHotline.fldStatus
Avatar billede x-pander Nybegynder
01. marts 2007 - 14:47 #20
Ahhhh. Oki, smart nok, hvis det nu er en stor database med mange indlæg eller brugere.

Lige nu vælger jeg dog at hive det hele med ud, da jeg ikke er helt klar over hvor meget jeg skal bruge. Nu prøver jeg at sætte det ind på siden og se om det virker.
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 14:55 #21
ja.
Det er smart kun at hente de felter ud man skal bruge.
Avatar billede x-pander Nybegynder
01. marts 2007 - 15:48 #22
Hej igen.

Tænkte på om der var en måde man kan tjekke indholdet af ens Dataset som ligger i hukommelsen? Det er deri ens data som er trukket ud gennem SQL-sætningen ligger i vel?

Så jeg kunne godt tænke mig at tjekke om det er rigtigt det som jeg har hevet ud.

Btw. den ser sådan ud nu:

SELECT * FROM tblHotline INNER JOIN tblUsers ON tblHotline.fldUser = tblUsers.ID WHERE fldPostID=" & PostID & " ORDER BY tblHotline.ID ASC
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 16:01 #23
ja enten med et break point og så holde musen over det når den når til breakpointet
Eller f.eks. gemme indholdet som xml.

WriteXmlToFile (ditdataset);
private void WriteXmlToFile ( DataSet thisDataSet ) {
  if ( thisDataSet == null ) {
      return;
  }
  // create a file name to write to.
  string filename = "c:\myXmlDoc.xml";
  // create the FileStream to write with.
  System.IO.FileStream myFileStream = new System.IO.FileStream
      ( filename, System.IO.FileMode.Create );
  // create an XmlTextWriter with the fileStream.
  System.Xml.XmlTextWriter myXmlWriter =
      new System.Xml.XmlTextWriter ( myFileStream, System.Text.Encoding.Unicode );
  // Write to the file with the WriteXml method.
  thisDataSet.WriteXml ( myXmlWriter ); 
  myXmlWriter.Close ( );
}
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 16:01 #24
så kan du bare tjekke xml filen.
Avatar billede x-pander Nybegynder
01. marts 2007 - 16:03 #25
Har desværre ikke styr på C#. :/
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 16:13 #26
Private Sub WriteXmlToFile(thisDataSet As DataSet)
    If thisDataSet Is Nothing Then
        Return
    End If
    ' Create a file name to write to.
    Dim filename As String = "myXmlDoc.xml"
    ' Create the FileStream to write with.
    Dim myFileStream As New System.IO.FileStream _
      (filename, System.IO.FileMode.Create)
    ' Create an XmlTextWriter with the fileStream.
    Dim myXmlWriter As New System.Xml.XmlTextWriter _
      (myFileStream, System.Text.Encoding.Unicode)
    ' Write to the file with the WriteXml method.
    thisDataSet.WriteXml(myXmlWriter)
    myXmlWriter.Close()
End Sub
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 16:13 #27
WriteXmlToFile (ditdataset)
Avatar billede x-pander Nybegynder
01. marts 2007 - 16:22 #28
Jeg gemmer den du skrev der, men DET VIRKER! :D

adminStatus = row.Item("fldUsername") Det beviser ligesom at de to tabeller er lagt fint nok sammen når den både kan udskrive navnet nu, samt teksten da de to mængder data befinder sig i to forskellige tabeller.

Det er simpelthen  alt for fedt! Jeg ved ikke om der dukker flere spørgsmål op lidt længere henne i forløbet, men jeg håber da du vil svare på dem senere, hvis det er. :)

Men for nu, ligger du bare et svar, så får du pointene! :)
Avatar billede dr_chaos Nybegynder
01. marts 2007 - 16:24 #29
svar :)
Avatar billede x-pander Nybegynder
01. marts 2007 - 16:37 #30
Jeg sidder lige nu her og kigger de forskellige variabler igennem med breakpoints. Det er faktisk en MEGET nyttig funktion i Visual Web Developer må man sige.
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