2016-03-29 5 views
0

私はasp.net VBで書かれたプロジェクトとmssqlを使っているimを引き継いでいます。ユーザーがクリックを提出したときにjoinコマンドを逆にする

私は私がやりたいどのような施設(FacName)のテキスト値を持つテキストボックス

を持っているが、プログラムは見上げ、テキストボックスに入力されたテキストを取ります施設テーブルを検索し、施設名を見つけ、施設IDと一致させ、および、エピソード施設ID列を更新する。ここで

は私の二つの表のとおりです。

Episode     Facilities 

ID__________FacilityID | ID__________FacName 
1___________10   | 10__________Beenleigh 
2___________14   | 14__________Sunnybank 
3___________15   | 15__________Brisbane 

ユーザーが別の施設を指すようにエピソードを更新 - '、この場合には、新しいfacililityを参照するために、彼らはEpisode.ID「2」をしたいとしましょうブリスベン」

彼らテキストボックスに入力ブリスベンと提出ヒット、となるエピソード表の結果:

Episode     Facilities 

ID__________FacilityID | ID__________FacName 
1___________10   | 10__________Beenleigh 
2___________15   | 14__________Sunnybank 
3___________15   | 15__________Brisbane 

施設]タブで検索を行うので、その種le.FacilityID列

私はよく働くために私の選択した声明を得ました、うまくいけば誰かが私の質問に答えるのを助けるでしょう! 動作していないUPDATE声明

SELECT Episode.ID, Episode.NOCSID, Episode.Disease, Episode.PHUID,  
     Episode.Status, Episode.Date, Episode.PersonID, Episode.ChangeType, 
     Episode.ChangeBy, Episode.ChangeDate, Episode.DoctorID, 
     Episode.FacilityID, Episode.OnsetDate, Episode.CloseDate, 
     Episode.Duplicate, Episode.OutbreakID, Episode.ClinicalLead, 
     Episode.NextActionDate, Facilities.FacName, Facilities.ID AS Expr1 
     FROM Episode 
     LEFT OUTER JOIN Facilities 
     ON Episode.FacilityID = Facilities.ID WHERE (Episode.ID = @ID) 

Becuase I:ので、ここで

UPDATE Episode 
SET NOCSID = @NOCSID, 
    Disease = @Disease, 
    PHUID = @PHUID, 
    Status = @Status, 
    PersonID = @PersonID, 
    ChangeType = 'Updated', 
    ChangeBy = @ChangeBy, 
    ChangeDate = GETDATE(), 
    DoctorID = @DoctorID, 
    OnsetDate = @OnsetDate, 
    CloseDate = @CloseDate, 
    Duplicate = @Duplicate, 
    OutbreakID = @OutbreakID, 
    ClinicalLead = @ClinicalLead, 
    NextActionDate = @NextActionDate, 
    FacilityID = @FacilityID 
FROM Episode 
INNER JOIN Facilities 
    ON Episode.FacilityID = Facilities.FacName 
WHERE (Episode.ID = @original_ID) 
AND (Episode.NOCSID = @original_NOCSID 
OR Episode.NOCSID IS NULL 
AND @original_NOCSID IS NULL) 
AND (Episode.Disease = @original_Disease) 
AND (Episode.PHUID = @original_PHUID) 
AND (Episode.Status = @original_Status) 
AND (Episode.PersonID = @original_PersonID 
OR Episode.PersonID IS NULL 
AND @original_PersonID IS NULL) 
AND (Episode.DoctorID = @original_DoctorID 
OR Episode.DoctorID IS NULL 
AND @original_DoctorID IS NULL) 
AND (Episode.FacilityID = @original_FacilityID 
OR Episode.FacilityID IS NULL 
AND @original_FacilityID IS NULL) 
AND (Episode.OnsetDate = @original_OnsetDate 
OR Episode.OnsetDate IS NULL 
AND @original_OnsetDate IS NULL) 
AND (Episode.CloseDate = @original_CloseDate 
OR Episode.CloseDate IS NULL 
AND @original_CloseDate IS NULL) 
AND (Episode.Duplicate = @original_Duplicate 
OR Episode.Duplicate IS NULL 
AND @original_Duplicate IS NULL) 
AND (Episode.OutbreakID = @original_OutbreakID 
OR Episode.OutbreakID IS NULL 
AND @original_OutbreakID IS NULL) 
AND (Episode.ClinicalLead = @original_ClinicalLead 
OR Episode.ClinicalLead IS NULL 
AND @original_ClinicalLead IS NULL) 
AND (Episode.NextActionDate = @original_NextActionDate 
OR Episode.NextActionDate IS NULL 
AND @original_NextActionDate IS NULL) 
+0

私はまだあなたが求めていることではっきりしていません。私がこれを読んでいるところでは、外部キー(Episode.FacilityID)を更新したいように思えます。これはタイプミスですか? – Dustin

+0

DropDownListを使ってみませんか?あなたがユーザー入力に基づいて存在しない場合、新しい施設を作りたいですか? –

+0

Dustin - FacName列でFacilityテーブルを検索し、一致するIDを取得し、EpisodeテーブルのFacilityID列を更新します。私は実際にユーザーの入力に基づいてjqueryドロップダウンリストを持っています。以前のリビジョンではドロップダウンが使用されましたが、何千もの結果が出ていました。 –

答えて

0

わかりましたが、私がやってしまったものですselect文作業

ashxハンドラも使用したjqueryドロップダウンリストを使用していましたが、私はFacility名I私はちょうどID名を必要としたので、IDを投稿時にデータベースにポストすることができました。だから私はそうのような施設名をIDに引っ張るなどして、SQLコマンドをモッド:

Public Class Search_VB : Implements IHttpHandler 

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 
    Dim prefixText As String = context.Request.QueryString("q") 
    Dim conn As SqlConnection = New SqlConnection 
    conn.ConnectionString = ConfigurationManager _ 
      .ConnectionStrings("CDI").ConnectionString 
    Dim cmd As SqlCommand = New SqlCommand 
    cmd.CommandText = ("select ID, FacName from Facilities where FacName like '%' + @SearchText + '%'") 


    cmd.Parameters.AddWithValue("@SearchText", prefixText) 
    cmd.Connection = conn 
    Dim sb As StringBuilder = New StringBuilder 

    conn.Open() 
    Dim sdr As SqlDataReader = cmd.ExecuteReader 
    While sdr.Read 
     sb.Append(sdr("FacName") & (" ID: ")) 
     sb.Append(sdr("ID")).Append(Environment.NewLine) 


    End While 
    conn.Close() 
    context.Response.Write(sb.ToString) 

End Sub 

the drop down list showing facility id's だから今、私は私がポストバックの準備ができて施設IDをつかむために必要な、私の施設IDを持っていました。

だから私は、ページのスクリプトタグで次のように更新:

<script type="text/javascript"> 
    //the code below gets the jquery drop down working, and uses the ashx handler to feed it results to populate the list 
    $(document).ready(function() { 
     $('[id$=txt_Search]').autocomplete('/Facility_Search.ashx'); 


     //monitor for when the user clicks the update button. 
     $("[id$=Button1]").click(function() { 

      //fetch the selected value from the text box 
      FacNameTextValue = $('[id$=txt_Search]').val() 
      //pull off the prefix (the facility name, leaving only the characters after the : character, this should 
      //only leave the facility ID 
      FacNameTextValue = FacNameTextValue.substring(FacNameTextValue.indexOf(":") + 2); 
      //Filter everything out except numbers 
      FacNameTextValue = FacNameTextValue.replace(/\D/g, ''); 
      // Now if the string is empty, we need to alert the user that no Facility match was found, and they need to create a new one. 


      //Now populate the text box with the filtered facility ID 
      document.getElementsByName('DetailsViewEpisodeEdit$FacilityIDTextBox')[0].value = FacNameTextValue; 
      //alert is for debug purposes bellow, comment out when the code is working :) 
      //alert(":" + FacNameTextValue + ":"); 

      //now check the string, and if we are left with nothing, then alert the user that the record will be left blank 
      if (FacNameTextValue.length < 1) { 
       alert("No matching facilility was found, facility field will be left blank.") 
      } 







     }); 

    }); 
</script> 

だから、あなたはそれを持っています。お役に立てれば。これは実際にそれを行う横方向の方法だと確信しています。提案/改善があれば教えてください!

関連する問題