PDA

View Full Version : مبتدی: گرفتن فیلدهای پر و فیلتر کردن فیلدهای خالی



managment-barnamenevis
یک شنبه 08 مرداد 1402, 14:41 عصر
با سلام دوستان
من داخل جدول طبق تصویر زیر
چندتا فیلد دارم که تعدادی از این فیلدها در بعضی سطرها مقدار دارند
و بعضی دیگر خالی هستند.
من میخوام کل این فیلدهایی که مقدار دارند را select کنم


مشکل اینه زمان چاپ مقدار های خالی هم همراه فیلدهای مقدار دارند select می شود
و گزارشم را خراب می کنند

می خوام راهنماییم کنید

چطوری فقط فیلدهای مقدار دار رو دریافت کنم


154828


از این select که استفاده می کنم هیچ چیزی انتخاب نمی شود

adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = '" + CodeExam + "' AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL";


ممنون میشم راهنماییم کنی

mazoolagh
دوشنبه 09 مرداد 1402, 11:52 صبح
سلام و روز خوش
کوئری ظاهرش درسته هرچند که بهتره پارامتر تعریف کنین.
یکی مقدار اون codeexam رو چک کنین، و یکی این که اون دو فیلد دیگه حتما null باشن. شاید مقدارشون white space باشه.

پرستو پارسایی
دوشنبه 09 مرداد 1402, 21:35 عصر
برای جلوگیری از فیلدهای خالی و دریافت فقط فیلدهایی که مقدار دارند ، می‌توانید از عبارت WHERE با استفاده از عملگر IS NOT NULL استفاده کنید. این عبارت به شما امکان می‌دهد فقط سطرهایی را که مقدار دارند را انتخاب کنید. بعنوان مثال:

SELECT column1, column2, column3
FROM table_name
WHERE column1 IS NOT NULL AND column2 IS NOT NULL AND column3 IS NOT NULL;





ولی با توجه به کدی که ارائه دادید، برای اطمینان از اجرای صحیح کوئری، طبق فرمایش استاد در پست قبلی می‌توانید از از پروپرتی‌های SqlParameter استفاده کنید. :

adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = @CodeExam AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL";
adp.SelectCommand.Parameters.AddWithValue("@CodeExam", CodeExam);

در این کد، از پارامتر `@CodeExam` برای ارسال مقدار متغیر `CodeExam` به کوئری استفاده شده است.

managment-barnamenevis
پنج شنبه 12 مرداد 1402, 20:18 عصر
برای جلوگیری از فیلدهای خالی و دریافت فقط فیلدهایی که مقدار دارند ، می‌توانید از عبارت WHERE با استفاده از عملگر IS NOT NULL استفاده کنید. این عبارت به شما امکان می‌دهد فقط سطرهایی را که مقدار دارند را انتخاب کنید. بعنوان مثال:

SELECT column1, column2, column3
FROM table_name
WHERE column1 IS NOT NULL AND column2 IS NOT NULL AND column3 IS NOT NULL;





ولی با توجه به کدی که ارائه دادید، برای اطمینان از اجرای صحیح کوئری، طبق فرمایش استاد در پست قبلی می‌توانید از از پروپرتی‌های SqlParameter استفاده کنید. :

adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = @CodeExam AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL";
adp.SelectCommand.Parameters.AddWithValue("@CodeExam", CodeExam);


سلام دوست عزیز وقت بخیر تو این حالت هیچ سطری را Select نمیکنه

اگر بینشون OR بذارم هم هیچ سطریو نمیگیره

در این کد، از پارامتر `@CodeExam` برای ارسال مقدار متغیر `CodeExam` به کوئری استفاده شده است.


ممنون میشم کمکم کنی

پرستو پارسایی
پنج شنبه 12 مرداد 1402, 21:08 عصر
اگر این کد هیچ سطری را انتخاب نمی‌کند، ممکن است دلیل آن این باشد که شرط `CodeExam = @CodeExam` در جدول `QueryExam` هیچ رکوردی را برآورده نمی‌کند. لطفاً از درستی مقدار `CodeExam` که به عنوان پارامتر استفاده شده است، مطمئن شوید. همچنین، مطمئن شوید که در جدول `QueryExam` فیلدهای `Question4Gozineh` و `NumFill` دارای مقادیر غیر NULL هستند.

و یا اینگونه بررسی کنید
using (SqlCommand command = new SqlCommand("SELECT * FROM QueryExam WHERE CodeExam = @CodeExam AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL", connection))
{
command.Parameters.Add("@CodeExam", SqlDbType.VarChar).Value = CodeExam;


using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
// انجام عملیات مورد نیاز با داده‌های دریافت شده
}
}

managment-barnamenevis
جمعه 13 مرداد 1402, 01:24 صبح
اگر این کد هیچ سطری را انتخاب نمی‌کند، ممکن است دلیل آن این باشد که شرط `CodeExam = @CodeExam` در جدول `QueryExam` هیچ رکوردی را برآورده نمی‌کند. لطفاً از درستی مقدار `CodeExam` که به عنوان پارامتر استفاده شده است، مطمئن شوید. همچنین، مطمئن شوید که در جدول `QueryExam` فیلدهای `Question4Gozineh` و `NumFill` دارای مقادیر غیر NULL هستند.

و یا اینگونه بررسی کنید
using (SqlCommand command = new SqlCommand("SELECT * FROM QueryExam WHERE CodeExam = @CodeExam AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL", connection))
{
command.Parameters.Add("@CodeExam", SqlDbType.VarChar).Value = CodeExam;


using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
// انجام عملیات مورد نیاز با داده‌های دریافت شده
}
}



من اطلاعات ثبت شده در جدول دارم و وقتی از شرطی استفاده می کنم که کل سطر های جدول را برگرداند

سطرهای دارای فیلد پر و فیلد خالی را بر می گرداند

پس از وجود مقادیر غیر خالی مطمئن هستم

اما این که من فقط مقادیر غیر خالی را نیاز دارم و در هر صورت هر کدی می نویسم یا هیچ سطری را بر نمی گرداند
یا این که سطرهای دارای فیلد با مقادیر خالی و مقادیر پرا را با هم ارسال می کند. دقیقاً مثل عکس جدولم

Mahmoud.Afrad
جمعه 13 مرداد 1402, 10:30 صبح
با سلام دوستان
من داخل جدول طبق تصویر زیر
چندتا فیلد دارم که تعدادی از این فیلدها در بعضی سطرها مقدار دارند
و بعضی دیگر خالی هستند.
من میخوام کل این فیلدهایی که مقدار دارند را select کنم


مشکل اینه زمان چاپ مقدار های خالی هم همراه فیلدهای مقدار دارند select می شود
و گزارشم را خراب می کنند

می خوام راهنماییم کنید

چطوری فقط فیلدهای مقدار دار رو دریافت کنم


154828


از این select که استفاده می کنم هیچ چیزی انتخاب نمی شود

adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = '" + CodeExam + "' AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL";


ممنون میشم راهنماییم کنی

بایست همه ستونهای مورد نیاز رو سلکت کنید
اگر گزارش مشکل داره باید اونو اصلاح کنید

managment-barnamenevis
جمعه 13 مرداد 1402, 14:48 عصر
بایست همه ستونهای مورد نیاز رو سلکت کنید
اگر گزارش مشکل داره باید اونو اصلاح کنید


گزارشم درسته
چون وقتی فقط یک ستون را می خوام کامل و بدون نقص Select می کنه

اما وقتی AND می ذارم بینشون دیگه چیزیو Select نمی کنه

managment-barnamenevis
جمعه 13 مرداد 1402, 16:51 عصر
اگر این کد هیچ سطری را انتخاب نمی‌کند، ممکن است دلیل آن این باشد که شرط `CodeExam = @CodeExam` در جدول `QueryExam` هیچ رکوردی را برآورده نمی‌کند. لطفاً از درستی مقدار `CodeExam` که به عنوان پارامتر استفاده شده است، مطمئن شوید. همچنین، مطمئن شوید که در جدول `QueryExam` فیلدهای `Question4Gozineh` و `NumFill` دارای مقادیر غیر NULL هستند.

و یا اینگونه بررسی کنید
using (SqlCommand command = new SqlCommand("SELECT * FROM QueryExam WHERE CodeExam = @CodeExam AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL", connection))
{
command.Parameters.Add("@CodeExam", SqlDbType.VarChar).Value = CodeExam;


using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
// انجام عملیات مورد نیاز با داده‌های دریافت شده
}
}



دوست عزیز حتی کدم را با این شکل تغییر دادم

con.Open();

// Query 1: CodeExam = @CodeExam



// Query 2: [Question4Gozineh] IS NOT NULL
adp.SelectCommand = new OleDbCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = @CodeExam AND Question4Gozineh IS NOT NULL";
adp.SelectCommand.Parameters.AddWithValue("@CodeExam", CodeExam);
adp.Fill(ds, "QueryExam");


// Query 3: [NumFill] IS NOT NULL
adp.SelectCommand = new OleDbCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = @CodeExam AND NumFill IS NOT NULL";
adp.SelectCommand.Parameters.AddWithValue("@CodeExam", CodeExam);
adp.Fill(ds, "QueryExam");


con.Close();


DataTable filteredTable = new DataTable("filteredTable");
foreach (DataColumn column in ds.Tables["QueryExam"].Columns)
{
filteredTable.Columns.Add(column.ColumnName, column.DataType);
}


foreach (DataRow row in ds.Tables["QueryExam"].Rows)
{
filteredTable.ImportRow(row);
}


if (filteredTable.Rows.Count > 0)
{
stiReport1.Load(Application.StartupPath + "\\ReportMyQuestion.mrt");
stiReport1.RegBusinessObject("QueryExam2", filteredTable);
stiReport1.Show();
}
else
{
MessageBox.Show("هیچ داده‌ای برای چاپ یافت نشد.", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}





اما کماکان مشکل پا برجاست

این هم خروجی کد بالا

154836

اینم دیزاینش

154837

پرستو پارسایی
جمعه 13 مرداد 1402, 20:21 عصر
به نظر من در این کد، مشکلی وجود ندارد و به نظر می‌رسد کد صحیح باشد. این کد باید سطرهایی را انتخاب کند که شرایط `CodeExam = @CodeExam` و `Question4Gozineh IS NOT NULL` یا `NumFill IS NOT NULL` را برآورده می‌کنند. اگر این کد هیچ سطری را انتخاب نمی‌کند، ممکن است مشکل دیگری در داده‌ها یا در پیکربندی دیتابیس وجود داشته باشد که باید بررسی شود. لطفاً چک کنید که داده‌های مورد نیاز برای شرایط مذکور وجود دارند

managment-barnamenevis
جمعه 13 مرداد 1402, 20:52 عصر
به نظر من در این کد، مشکلی وجود ندارد و به نظر می‌رسد کد صحیح باشد. این کد باید سطرهایی را انتخاب کند که شرایط `CodeExam = @CodeExam` و `Question4Gozineh IS NOT NULL` یا `NumFill IS NOT NULL` را برآورده می‌کنند. اگر این کد هیچ سطری را انتخاب نمی‌کند، ممکن است مشکل دیگری در داده‌ها یا در پیکربندی دیتابیس وجود داشته باشد که باید بررسی شود. لطفاً چک کنید که داده‌های مورد نیاز برای شرایط مذکور وجود دارند

اگه بنویسم
adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = '"
+ CodeExam + "' AND [Question4Gozineh] IS NOT NULL";

به درستی جواب میده و خالی برنمی گردونه

اما اگه بنویسم

adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = '"
+ CodeExam + "' AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL";


سطر خالی و پر را با هم میده
جدول بانک اکسس را براتون ارسال کنم؟

پرستو پارسایی
جمعه 13 مرداد 1402, 23:56 عصر
لطفا اینگونه بررسی کنید

adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = @CodeExam AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL";
adp.SelectCommand.Parameters.Add("@CodeExam", OleDbType.VarChar).Value = CodeExam;

managment-barnamenevis
شنبه 14 مرداد 1402, 00:50 صبح
لطفا اینگونه بررسی کنید

adp.SelectCommand.CommandText = "SELECT * FROM QueryExam WHERE CodeExam = @CodeExam AND [Question4Gozineh] IS NOT NULL AND [NumFill] IS NOT NULL";
adp.SelectCommand.Parameters.Add("@CodeExam", OleDbType.VarChar).Value = CodeExam;
سلام این کد جواب نداد


کاری که کردم این بود

اول کوئری جدا نوشتم برای هر کدوم از گروههایی که باید با هم select بشن

و regbusines در استیمول را هم مثل کوئری گروه بندی جدا کردم

و خدا رو شکر تو این حالت جواب داد

ROSTAM2
شنبه 14 مرداد 1402, 08:27 صبح
سلام.

https://stackoverflow.com/questions/8660203/how-to-check-for-is-not-null-and-is-not-empty-string-in-sql-server (https://stackoverflow.com/questions/8660203/how-to-check-for-is-not-null-and-is-not-empty-string-in-sql-server)