Avatar billede alex_sleiborg Nybegynder
06. marts 2007 - 10:29 Der er 9 kommentarer og
1 løsning

Søge i mysql database

Hej

Jeg skal søge i en mysql database, hvor jeg skal finde nogle brugere med forskellige rettigheder. I databasen er brugerens rettigheder bestemt med en int fra 1 - 5. I min app, er der 5 checkboxes. Når der er 3 checkboxes der er checked, skal jeg søge på feks alle dem der har int 1,3,5. En der kan hjælpe mig med at lave den mysql statement?
Avatar billede flyver23 Nybegynder
07. marts 2007 - 09:03 #1
Hvor langt kommer du i forsøget? og hvilke problemer render du ind i?
Prøv at paste det SQL ind som du allerede har, så kan vi måske hjælpe dig videre.

Vh Flyver23
Avatar billede alex_sleiborg Nybegynder
08. marts 2007 - 11:00 #2
FillDataGridView("SELECT name,authoritylevel,areacode,country,workphone,workmobile,worktitle,workplace,workemail,picture FROM Employees WHERE " +
            "name LIKE '%" + txtName.Text + "%' AND " +
            "areacode LIKE '%" + txtAreaCode.Text + "%' AND " +
            "country LIKE 'Danmark%' AND " +
            "workphone LIKE '%" + txtPhone.Text + "%' AND " +
            "workmobile LIKE '%" + txtMobile.Text + "%' AND " +
            "worktitle LIKE '%" + txtWorkingTitle.Text + "%' AND " +
            "workplace LIKE '%Aalborg%' AND " +
            "workemail LIKE '%" + txtEmail.Text + "%' AND " +
            "adress LIKE '%" + txtAdress.Text + "%' AND " +
            "city LIKE '%" + txtCity.Text + "%' AND " +
            "authoritylevel LIKE '%Her Skal den søge den søge på alle rows der feks indeholder 1,3,5%'");
Avatar billede alex_sleiborg Nybegynder
08. marts 2007 - 11:18 #3
Og sådan her ser min metode ud, den returnere en string som hedder feks. 134. Så jeg skal have alle dem med i kolonnen authoritylevel der har en int der hedder 1,3 eller 4 med

        private string GetAccessLevel()
        {
            string tmp = null;
            if(chcSA.Checked == true)
                tmp = tmp +"1";
            if (chcAdmin.Checked == true)
                tmp = tmp + "2";
            if (chcSU.Checked == true)
                tmp = tmp + "3";
            if (chcUser.Checked == true)
                tmp = tmp + "4";
            if (chcEmployee.Checked == true)
                tmp = tmp + "5";
            return tmp;
        }
Avatar billede flyver23 Nybegynder
08. marts 2007 - 12:01 #4
Okay. Jeg har ikke mulighed for at teste for syntaks fejl, men du burde kunne komme videre med dette her:


char[] acceslevels = GetAccessLevel().ToString().ToCharArray();
            string sql = "";
            sql = @"SELECT name,authoritylevel,areacode,country,workphone,workmobile,worktitle,workplace,workemail,picture FROM Employees WHERE " +
            "name LIKE '%" + txtName.Text + "%' AND " +
            "areacode LIKE '%" + txtAreaCode.Text + "%' AND " +
            "country LIKE 'Danmark%' AND " +
            "workphone LIKE '%" + txtPhone.Text + "%' AND " +
            "workmobile LIKE '%" + txtMobile.Text + "%' AND " +
            "worktitle LIKE '%" + txtWorkingTitle.Text + "%' AND " +
            "workplace LIKE '%Aalborg%' AND " +
            "workemail LIKE '%" + txtEmail.Text + "%' AND " +
            "adress LIKE '%" + txtAdress.Text + "%' AND " +
            "city LIKE '%" + txtCity.Text + "%' AND ";
           
            int count = 0;
            foreach (char c in acceslevels)
            {
                if (count == 0)
                {
                    sql += "authoritylevel LIKE " + c.ToString();
                }
                else
                {
                    sql += " AND " + c.ToString();
                }
                count++;
            }
            sql += ";";

            FillDataGridView(sql);

private string GetAccessLevel()
        {
            string tmp = "";
            if (chcSA.Checked == true)
                tmp = tmp + "1";
            if (chcAdmin.Checked == true)
                tmp = tmp + "2";
            if (chcSU.Checked == true)
                tmp = tmp + "3";
            if (chcUser.Checked == true)
                tmp = tmp + "4";
            if (chcEmployee.Checked == true)
                tmp = tmp + "5";
            return tmp;
        }


Koden tager udgangspunkt i at der altid er valgt mindst 1 acces level, ellers kommer der fejl i SQl strengen.

Vh FLyver 23
Avatar billede alex_sleiborg Nybegynder
08. marts 2007 - 12:38 #5
Ja det er noget a la det der... Men når jeg begynder at klikke på de checkboxe, vil den kun vise dem der har int = 1. De andre forsvinder som de skal, når de ikke er checked. Men kommer ikke tilbage når de bliver checked igen.

Her er lidt kode

        private void ReFillDataSet()
        {
            char[] acceslevels = GetAccessLevel().ToString().ToCharArray();
            string sql = "";
            sql = @"SELECT name,authoritylevel,areacode,country,workphone,workmobile,worktitle,workplace,workemail,picture FROM Employees WHERE " +
            "name LIKE '%" + txtName.Text + "%' AND " +
            "areacode LIKE '%" + txtAreaCode.Text + "%' AND " +
            "country LIKE 'Danmark%' AND " +
            "workphone LIKE '%" + txtPhone.Text + "%' AND " +
            "workmobile LIKE '%" + txtMobile.Text + "%' AND " +
            "worktitle LIKE '%" + txtWorkingTitle.Text + "%' AND " +
            "workplace LIKE '%Aalborg%' AND " +
            "workemail LIKE '%" + txtEmail.Text + "%' AND " +
            "adress LIKE '%" + txtAdress.Text + "%' AND " +
            "city LIKE '%" + txtCity.Text + "%' AND ";

            int count = 0;
            foreach (char c in acceslevels)
            {
                if (count == 0)
                {
                    sql += "authoritylevel LIKE " + c.ToString();
                }
                else
                {
                    sql += " AND " + c.ToString();
                }
                count++;
            }
            sql += ";";

            FillDataGridView(sql);
        }
        private string GetAccessLevel()
        {
            string tmp = string.Empty;
            if (chcSA.Checked == true)
                tmp += "1";
            if (chcAdmin.Checked == true)
                tmp += "2";
            if (chcSU.Checked == true)
                tmp += "3";
            if (chcUser.Checked == true)
                tmp += "4";
            if (chcEmployee.Checked == true)
                tmp += "5";
            if (tmp == string.Empty)
                tmp = "0";
            return tmp;
        }
Avatar billede flyver23 Nybegynder
08. marts 2007 - 13:59 #6
Hvis du har alle authority level i et felt i databasen, skal du skifte AND ud med OR.
Kan der tildeles flere auhority levels til en post?
Avatar billede alex_sleiborg Nybegynder
08. marts 2007 - 15:32 #7
Nej authority level er talene fra 1-5. Andet kan der ikke stå i den kolonne
Avatar billede flyver23 Nybegynder
08. marts 2007 - 15:40 #8
Okay. Så skal der stå OR istedet for AND prøv evt med OR authoritylevel LIKE i stedet for AND
Avatar billede alex_sleiborg Nybegynder
09. marts 2007 - 13:57 #9
Har fået det til at virke sådan nogenlunde. Så smid et svar. Og tak for hjælpen:)
Avatar billede flyver23 Nybegynder
09. marts 2007 - 14:20 #10
Okay. Håber det kører som forventet.
Vh FLyver23
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