ผมต้องการที่จะเช็คค่าในตาราง 2 ตาราง แล้วลบโดยใช้เงื่อนไขรบกวนพี่ๆๆช่วยหน่อยคับ
เงียบเลยรบกวนพี่ๆๆช่วยหน่อยนะคับ
Date :
2010-10-01 00:17:14
By :
Osel
Code (VB.NET)
If (New SqlClient.SqlCommand("select case when count(*) > 0 then 'true' else 'false' end from xxxx", lcConn)).ExecuteScalar Then
MsgBox("ไม่สามารถลบข้อมูลได้ ")
Else
'ToDo : ลบข้อมูลตรงนี้
End If
Date :
2010-10-01 10:31:08
By :
WingVian ZeaZar
[table02] related กับ [table01] โดย [table02].[UIDJob] = [table01].[id] (many-one)
คุณจะลบตารางไหนยังไงคะ อธิบายอีกที
a. ลบตารางที่ 1 และลบ ตารางที่ 2 ที่ related ด้วยทั้งหมดออก
b. ลบตารางที่ 2 ที่ไม่มี related กับ ตารางที่ 1
c. .................
ประวัติการแก้ไข 2010-10-01 10:34:03
Date :
2010-10-01 10:33:24
By :
blurEyes
ข้อมูลที่ผมต้องการจะลบนะคับ
จะมีตารางที่ 1 และตารางที่ 2 อยู่ จากนั้นผมดึงข้อมูลมาจากตารางที่ 1 มาแสดงทั้งหมดในหน้าหลัก
แล้วข้อมูลที่แสดงแต่ละแถว เมื่อเราคลิกเข้าไปจะมีงานย่อยอีกอีกทีนึงของแต่ล่ะแถวคับ (คงไม่งงนะ)
ส่วนงานย่อยผมได้เก็บไว้ในตารางที่ 2 พร้อมกับ id ของตารางที่ 1 ไว้ด้วยเพื่อไว้เช็คตอนที่คลิกดูข้อมูลจากหน้าหลัก
สิ่งที่ผมต้องการจะลบคือ
เมื่อผมคลิกเลือกข้อมูลจากหน้าหลัก สมมุติว่าเปง id 10 แล้วให้มันไปเว็คในตารางที่ 2 ด้วยว่ามี id 10 อยู่ในตารางที่ 2 ด้วยหรือป่าว
1. ถ้ามี id 10 เก็บอยู่ก็ให้มันแสดงไดอะล็อกว่ามีข้อมูลไม่สามารถลบได้เนื่องจากมีงานย่อยอยู่
2. ถ้าเช็คแล้วไม่มีว่าไม่มี id 10 อยู่ในตารางที่ 2 ก็ให้แสดงไดอะล็อกว่ายืนยันโดยการกด Yes เพื่อลบ
ผมต้องการใช้เช็คนะคับ count >0 ก็ห้ามลบ เท่ากับ 0 ก็ให้ลบตามคำอธิบายด้านบนนะคับ
Table1 มีฟิว uid
Table2 มีฟิว id และฟิว Uidjob
Uidjob จะเก็บ Uid ของ table1 นะคับ
คงไม่งงนะคับผมใช้ c#.net นะคับ ไม่ค่อยเก่ง database มือใหม่เลยก็ว่าได้อยากรบกวนพี่ช่วยหน่อยนะคับ ขอบคุณทุกท่านที่ให้คำแนะนำ และอธิบาย
Date :
2010-10-02 03:13:09
By :
Osel
โอเค
คุณสั่งลบ record จาก [table 01]
แต่มีเงื่อนไขว่า ถ้าไม่มี record จาก [table 02] มา related เลยก้อลบได้
Code (C#)
//แบบที่ 1 : (ตัวอย่างเพื่อความเข้าใจ)
cmdBuilder.AppendLine("DECLARE @DELETABLE_FLAG INT ;") ;
cmdBuilder.AppendLine("SET @DELETABLE_FLAG = 0 ;") ;
cmdBuilder.AppendLine()
cmdBuilder.AppendLine("SELECT @DELETABLE_FLAG = COUNT([table02].[id]) ") ;
cmdBuilder.AppendLine("FROM [table01]") ;
cmdBuilder.AppendLine(" RIGHT JOIN [table02]") ;
cmdBuilder.AppendLine(" ON [table01].[id]=[table02].[UIDJob] ;") ;
cmdBuilder.AppendLine("WHERE [table01].[id]=@VAR_ID;") ;
cmdBuilder.AppendLine()
cmdBuilder.AppendLine("IF (@DELETABLE_FLAG=0)") ;
cmdBuilder.AppendLine("BEGIN ")
cmdBuilder.AppendLine(" DELETE * FROM [table01] WHERE [table01].[id]=@VAR_ID;") ;
cmdBuilder.AppendLine(" SET@DELETABLE_FLAG = 1; ")
cmdBuilder.AppendLine("END")
cmdBuilder.AppendLine("ELSE")
cmdBuilder.AppendLine(" SET@DELETABLE_FLAG = 0; ")
cmdBuilder.AppendLine()
cmdBuilder.AppendLine("SELECT @DELETABLE_FLAG;") ;
//แบบสั้น
cmdBuilder.AppendLine("DELETE FROM [table01]");
cmdBuilder.AppendLine("FROM [table01]");
cmdBuilder.AppendLine(" RIGHT JOIN [table02]");
cmdBuilder.AppendLine(" ON [table01].[id]=[table02].[UIDJob] ;");
cmdBuilder.AppendLine("WHERE ([table01].[id]=@VAR_ID)");
cmdBuilder.AppendLine(" AND ([table02].[id] IS NULL) ;");");
cmdBuilder.AppendLine("-- ([table02].[id] IS NULL) << NO RELATED ROW ACQUIRE");
USAGE:
Code (C#)
System.Text.StringBuilder cmdBuilder = new System.Text.StringBuilder() ;
// เอา code จากแบบที่ 1 หรือ 2 มาแปะตรงนี้
int totalEffectRec = 0 ;
Using (SqlConnection myConn = new SqlConnection(uConnectionString))
{
SqlCommand myCommand = new myCommand( cmdBuilder.ToString() ,myConn );
myCommand.Parameters.AddWithValue("@VAR_ID" ,uID) ;
try
{
myConn.Open();
totalEffectRec = myCommand.ExecuteNonQuery() ;
}
catch (Exception Ex)
{
totalEffectRec = -1 ;
// error trap here
}
finally
{
if(myConn!=null)
myConn.Close();
}
}
switch (totalEffectRec)
{
case 0 :
// ลบไม่ได้้
break ;
case -1 "
// Error
break ;
default :
// ลบแล้ว
break;
}
จะประมาณนี้มังคะ ถ้าผิดยังไงลองไปแก้ดูค่ะเพราะไม่ได้ test
ประวัติการแก้ไข 2010-10-02 06:31:30 2010-10-02 06:34:30
Date :
2010-10-02 06:30:44
By :
blurEyes
ถ้าใช้ฐานข้อมูล My SQL ล่ะค่ะ
(ขอถามด้วยคนน่ะค่ะ มีปัญหาตรงจุดนี้เหมือนกัน )
คือจะลบ record จาก [table 1]
แต่มีเงื่อนไขว่า ถ้ามีข้อมูลใน[table 2] จะไม่สามารถลบได้เนื่องจากมีงานย่อยอยู่
แต่ถ้าไม่มี record จาก [table 2] มา related เลยก้อลบได้
Date :
2010-12-02 12:43:24
By :
คนไม่รู้
ช่วยตอบหน่อยนะค่ะ
จะไม่ทันแล้ว (ขอบคุณล่วงหน้าค่ะ)
Date :
2010-12-06 19:27:04
By :
คนไม่รู้
Load balance : Server 01