2016-01-23 64 views
0

根據列表框中的所有項目選擇數據時遇到問題。在這裏,我的列表框中有兩個項目,分別命名爲Kamera125和Kamera127。 Kamera125和Kamera127存在於MS Access數據庫中。所以,當我運行我的程序時,我希望我的程序從連接到MS Access的列表框中選擇Kamera125和Kamera127。我用下面的查詢從數據庫中選擇數據取決於列表框中的項目c#

string selectsemuakoordgaris = "select * from koordinatgaris where namakamera='" + listBox3.Text + "'"; 

它不起作用。

這是我的代碼:

  private void ProsesSemuaKamera() 
      { 
       Stopwatch watch = Stopwatch.StartNew(); 

       Ping ping = new Ping(); 
       PingReply pingreply; 

       OleDbConnection kon = new OleDbConnection(koneksi); 
       OleDbCommand command = kon.CreateCommand(); 
       kon.Open(); 
       string selecturl = "select * from datakamera"; 
       command.CommandText = selecturl; 
       OleDbDataReader bacadata = command.ExecuteReader(); 

       while (bacadata.Read()) 
       { 
        int counturl = 0; 
        pingreply = ping.Send(bacadata["ipadd"].ToString()); 

        if (pingreply.Status == IPStatus.Success) 
        { 
         listBox1.Items.Add(bacadata["ipadd"].ToString()); 
         listBox3.Items.Add(bacadata["namakamera"].ToString()); 
         textBox1.Text += bacadata["namakamera"].ToString() + Environment.NewLine; 

         CaptureSemuaKamera = new Capture(bacadata["urlkamera"].ToString()); 
         Application.Idle += new EventHandler(ProcessFrameSemuaKamera); 
        } 
        else if (pingreply.Status != IPStatus.Success) 
        { 
         listBox2.Items.Add(bacadata["ipadd"].ToString()); 
        } 
       } 
       kon.Close(); 

       watch.Stop(); 
       File.AppendAllText(@"D:\Dokumen\Alfon\TA Alfon\Waktu Eksekusi Ping.txt", "Waktu eksekusi ping " + DateTime.Now + " :" + " " + watch.Elapsed.TotalMilliseconds.ToString() + Environment.NewLine); 
      } 


      private void ProcessFrameSemuaKamera(object sender, EventArgs e) 
      { 
       Image<Bgr, Byte> sourceImage = CaptureSemuaKamera.QueryFrame(); 
       SourceBox.Image = sourceImage.Bitmap; 
ProsesSemuaKamera(); 
      } 

      private void ProsesKameraSemua() 
      { 
       Image<Bgr, Byte> sourceImage = CaptureSemuaKamera.QueryFrame(); 
       SourceBox.Image = sourceImage.Bitmap; 

       OleDbConnection kon = new OleDbConnection(koneksi); 
       OleDbCommand commandkoord = kon.CreateCommand(); 
       OleDbCommand commandkoordgaris = kon.CreateCommand(); 

       kon.Open(); 

       string selectsemuakoord = "select * from koordinatkotak where namakamera='"+ listBox3.Items + "'"; 
       string selectsemuakoordgaris = "select * from koordinatgaris where namakamera='" + listBox3.Items + "'"; 
       commandkoord.CommandText = selectsemuakoord; 
       commandkoordgaris.CommandText = selectsemuakoordgaris; 
       OleDbDataReader bacakoord = commandkoord.ExecuteReader(); 
       OleDbDataReader bacakoordgaris = commandkoordgaris.ExecuteReader(); 

       while (bacakoord.Read() && bacakoordgaris.Read()) 
       { 
        #region Perspective projection 

        PointF[] srcs = new PointF[4]; 
        srcs[0] = new PointF(int.Parse(bacakoord["x1source"].ToString()), int.Parse(bacakoord["y1source"].ToString())); //119, 187 
        srcs[1] = new PointF(int.Parse(bacakoord["x2source"].ToString()), int.Parse(bacakoord["y2source"].ToString())); //242, 181 
        srcs[2] = new PointF(int.Parse(bacakoord["x3source"].ToString()), int.Parse(bacakoord["y3source"].ToString())); //253, 225 
        srcs[3] = new PointF(int.Parse(bacakoord["x4source"].ToString()), int.Parse(bacakoord["y4source"].ToString())); //112, 231 

        PointF[] dsts = new PointF[4]; 
        dsts[0] = new PointF(int.Parse(bacakoord["x1proj"].ToString()), int.Parse(bacakoord["y1proj"].ToString())); 
        dsts[1] = new PointF(int.Parse(bacakoord["x2proj"].ToString()), int.Parse(bacakoord["y2proj"].ToString())); 
        dsts[2] = new PointF(int.Parse(bacakoord["x3proj"].ToString()), int.Parse(bacakoord["y3proj"].ToString())); 
        dsts[3] = new PointF(int.Parse(bacakoord["x4proj"].ToString()), int.Parse(bacakoord["y4proj"].ToString())); 


        HomographyMatrix mywarpmat = CameraCalibration.GetPerspectiveTransform(srcs, dsts); 
        Image<Bgr, Byte> newImage = sourceImage.WarpPerspective(mywarpmat, 355, 288, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR, Emgu.CV.CvEnum.WARP.CV_WARP_FILL_OUTLIERS, new Bgr(0, 0, 0)); 
        Image<Gray, Byte> newImageGray = newImage.Convert<Gray, Byte>(); 

        Image<Bgr, Byte> imageToShow = newImage.Copy(); 
        Image<Bgr, Byte> imageToShowGaris = newImage.Copy(); 

        ProjectionBox.Image = newImage.Bitmap; //I want to show Projection result in ProjectionBox. All of coordinates are saved in database. When Kamera125 is choosen, all of coordinates in Kamera125 will be executed. So here, I want to execute all of coordinates of Kamera125 and Kamera127 that is shown in listBox. 

        #endregion 
       } 
       kon.Close(); 
      } 
+0

? – null1941

+0

listBox3.Text幾乎不是您應該在此查詢中使用的值。你需要使用listBox3.Items集合。但是你的問題太難以回答了。爲什麼我的代碼不工作,不提供代碼真的沒用。請添加您嘗試從數據庫中選擇的實際代碼 – Steve

+0

我已經在下面發佈了我的代碼。請幫幫我。 –

回答

1

這裏有一個簡單的方法,你可以在列表框中有選擇的項目通過。它將返回從選定項目構建的where子句的字符串。

private string BuildWhereClause(ListBox lb) 
    { 
     string WHEREclause = string.Empty; 
     foreach(var itm in lb.SelectedItems) 
     { 
      if (WHEREclause == string.Empty) 
      { 
       WHEREclause += " WHERE namakamera = '" + itm + "' "; 
      } 
      else 
      { 
       WHEREclause += " OR namakamera = '" + itm + "' "; 
      } 
     } 
     return WHEREclause; 
    } 

從此你在哪裏執行查詢,你可以建立你的聲明

string selectsemuakoord = "select * from koordinatkotak " + BuildWhereClause(YourListBox);

+0

所以,根據你的代碼,如果我選擇我的listBox中的一個項目,我的程序將工作? –

+0

您可以選擇無,一個或多個。它將根據您選擇的內容構建WHERE子句。如果你傳入一個沒有選中的列表框,你將得到一個空字符串。否則,您將在他們之間使用OR來接收您的選擇的where子句。 –

+0

謝謝Charles。我試圖實現你的代碼,但它仍然無法正常工作。當我的列表框中存在Kamera125和Kamera127時,我的程序無法進行投影。所以,換句話說,我的程序沒有閱讀和選擇列表框中的任何項目 –

相關問題