+1 امتیاز

با سلام

میخوام قبل ثبت چک بشه که:

هر نفر در یکسال فقط می تواند حاوی یک نفره باشه.... (مثلا کد پرسنلی 100 در سال 1396 دارای نمره 85 هست. حال اگه کاربر به اشتباه برای کد پرسنلی 100 در سال 1396 باز نمره داد سیستم پیغام هشدار بده) در غیر اینصورت ثبت بشه...

پایگاه داده من sql هست.

کد های من:

  private void insert_click(object sender, EventArgs e)
        {
            try
            {
                if (tids.Text != string.Empty && tyear.Text != string.Empty && taverage.Text != string.Empty)
                {

                    SqlConnection con = new SqlConnection(Connection);
                    /* OleDbCommand com = new OleDbCommand("INSERT into arzeshyabi ([tid],tyear,taverage) values('" + tids.Text + "','" + tyear.Text + "')", con);*/

                    SqlCommand com = new SqlCommand("Insert Into arzeshyabi ([tid],tyear,taverage) Values (@tid,@tyear,@taverage)", con);

                    com.Parameters.AddWithValue("@tid", tids.Text);
                    com.Parameters.AddWithValue("@tyear", tyear.Text);
                    com.Parameters.AddWithValue("@taverage", taverage.Text);

                    con.Open();
                    com.ExecuteNonQuery();
                    con.Close();
                    BindGrid();
                    FarsiMessageBox.MessageBox.Show("پیام", "اطلاعات با موفقیت ثبت شد", FarsiMessageBox.MessageBox.Buttons.OK, FarsiMessageBox.MessageBox.Icons.Information);

                    tids.Text = "";
                    tyear.Text = "";
                    taverage.Text = "";
                }
                else
                {

                    MessageBox.Show("همه مقادیر را پر کنید", "خطا");

                }
            }
            catch
            {
                MessageBox.Show("کارمندی با این کد پرسنلی ثبت نشده است");
            }

        }

 

2 پاسخ

+2 امتیاز
سلام دوست عزیز __من روشش رو میگم تست کن اگه نتیجه نداد بگو برات بفرستم ایتدا یه تابع تعیین کن که اون فیلد رو چک کنه بعد اون تابع رو بیار ابتدای کدهات که حین درج اون عدد مقایسه کنه اگه وجود داشته پیام بدی یا یه کاری انجام بده
والا زیاد روش کار کردم نتونستم....چک میکنم اما نمیتونم بگم این همه کارمندان با کد پرسنلی فلان را بررسی کن..

میشه قطعه کدش رو برام بنویسی؟
توسط (102 امتیاز) 3
بلی حتما__ بیرونم ظهر میرم خونه اومدم کد رو برات میفرستم
توسط (7,164 امتیاز) 4 7 141
ممنون
توسط (102 امتیاز) 3

سلامی دوباره 

1-صبح که بهتون پاسخ دادم فکر میکردم حین درج یا همون ثبت باید اینکارو بکنیم این توی ثبت نمیشه مگر اینکه یه حالت داشته باشه اونم مثلا شماره پرسنلی اون شخص چک بشه و پیام بدیم که رکورد موجود است 

2-اما اون چیزی که شما خواستید یعنی نمره رو نتونن عوض کنن توی ویرایش هست پس یه سورس براتون نوشتم که شامل درج و ویرایش هست با شرط اینکه وقتی ویرایش انجام میده و میخاد امتیاز شخص رو تغییر بده نمیتونه

بینید اگه موضوع ردیف 1 بود کد رو براتون اصلاح کنم بفرستم اگه نه همین رو استفاده کنید

http://www.w3-farsi.com/forum/?qa=blob&qa_blobid=14329874424097370083

 

 

توسط (7,164 امتیاز) 4 7 141

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        private int GetID = 0;
        private string conected = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DBtest.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
        public Form1()
        {
            InitializeComponent();
        }
//***************************************************************درج اطلاعات****************************************
        private void insert_tbl()
        {
            if (!label6.Visible && !label5.Visible && !label4.Visible)
            {
                if (GetID==0)
                {
                    SqlConnection cnn = new SqlConnection(conected);
                    SqlCommand cmd = new SqlCommand("Insert Into arzeshyabi (personalnum,year,score)Values(@1,@2,@3)", cnn);
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@1", textBox1.Text);
                    cmd.Parameters.AddWithValue("@2", textBox2.Text);
                    cmd.Parameters.AddWithValue("@3", textBox3.Text);
                    cnn.Open();
                    cmd.ExecuteNonQuery();
                    cnn.Close();
                    MessageBox.Show("ok");
                  
                }
                else
                {
                    looktbl();
                }
               
            }
          
            txtclr();
            gridshow();
                      
        }


        void txtclr()
        {

            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            button1.Text = "ثبت";
            GetID = 0;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            insert_tbl();
        }

//****************************************************************اتمام متد درج در تیبل******************************

        private void looktbl()
        {

            string txtnum = textBox2.Text.Trim();//اینو نادیده بگیر
            SqlCommand cmd1;
            SqlConnection cnn1;
            SqlDataReader reader;
            cnn1 = new SqlConnection(conected);
            cmd1 = new SqlCommand();
            cmd1.Connection = cnn1;
            cnn1.Open();
            cmd1.CommandText = "Select score From arzeshyabi";
            reader = cmd1.ExecuteReader();
            if (!reader.Read())
            {

                SqlConnection cnn = new SqlConnection(conected);

                SqlCommand cmd = new SqlCommand("Update arzeshyabi Set personalnum=@1,year=@2,score=@3 Where ID=" + GetID, cnn);

                cmd.Parameters.AddWithValue("@1", textBox1.Text);
                cmd.Parameters.AddWithValue("@2", textBox2.Text);
                cmd.Parameters.AddWithValue("@3", textBox3.Text);
                cnn.Open();
                cmd.ExecuteNonQuery();
                cnn.Close();

                gridshow();
            }
            else
            {
                MessageBox.Show("قبلا امتیاز ثبت شده");
                txtclr();
                return;
            }

        }

//*************************************تابع نمایش دیتاگرید******************************************
        private void gridshow()
        {
            SqlConnection cn = new SqlConnection(conected);
            SqlDataAdapter adap = new SqlDataAdapter("Select * From arzeshyabi", cn);
            DataSet dset = new DataSet();
            adap.Fill(dset, "arzeshyabi");
            dataGridView1.DataSource = dset.Tables[0].DefaultView;
            dataGridView1.DataSource = dset;
            dataGridView1.DataMember = "arzeshyabi";
        }
//*******************************************************************************************************
        private void Form1_Load(object sender, EventArgs e)
        {
            gridshow();
          
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            label6.Visible=(textBox1.Text.Trim()=="");
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            label5.Visible = (textBox2.Text.Trim() == "");
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            label4.Visible = (textBox3.Text.Trim() == "");
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
           
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            //textBox1.Text = dataGridView1[1, dataGridView1.CurrentRow.Index].Value.ToString();
           // textBox2.Text = dataGridView1[2, dataGridView1.CurrentRow.Index].Value.ToString();
            //textBox3.Text = dataGridView1[3, dataGridView1.CurrentRow.Index].Value.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (dataGridView1.CurrentRow != null)
            {
                textBox1.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
                textBox2.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
                textBox3.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();

                GetID = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString());
                button1.Text = "اعمال تغییر";


            }
            gridshow();
           
        }
    }
}
توسط (7,164 امتیاز) 4 7 141
سلام واقعا ممنون از وقتی که گذاشتی...

اما منظورم گزینه 1 بود...تو درج کارمند اول چک کنه کارمندی با این کد پرسنلی در سال X نمره داره ،اگه داره اون وقت بگه تکراری هست مگرنه که کد درج که خودمون داریم اعمال بشه.

ممنون
توسط (102 امتیاز) 3
ببینید برای این کار باید کارمند وجود داشته باشد

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

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

ولی اگر کارمند وجود نداشته باشه باید اون موقع نام کامند درج وامتیاز همان موقع یا بعد بهش اپدیت بشه
توسط (7,164 امتیاز) 4 7 141
البته یه نکته ای رو باید بگم

اگه همین فرم هست که روش کار میکنید احتمالا شما با وارد کردن کد پرسنلی دیتاگرید رو فیلتر کرده و سپس رو همان ردیف عملیات انجام میدی که همون ویرایشی هست که گفتم تفاوتی نداره

پروژه رو بزارید ببینم کجای کار ایراد داره
توسط (7,164 امتیاز) 4 7 141
متوجه شدم..

اما مسئله ویرایش نیست....کلا بزاریمش کنار ویرایش رو...

فقط میخواییم عمل درج انجام بدیم مثلا...

هدف اینه قبل درج یک نمره برا ی کارمند سالش رو چک کنه اگه کارمند تو اون سال نمره داره دیگه اجازه نده بگه تکراری هست ولی در غیر ایصورت اجاز ثبت بده...

باز میخوایید برنامه رو براتون بفرستم.
توسط (102 امتیاز) 3
ببنید اگر کارمند توی تیبل وجود داشته باشه یعنی دیگه از قبل درج شده دوباره بخوایی درجش کنی یا باید دوبار ثبت بشه یا پیام تکراری بودن بده
توسط (7,164 امتیاز) 4 7 141
لطفا یه آدرس تلگرام بدین تا سورس رو براتون بفرستم..شاید بهتر بشه رو اون توضیح داد...
توسط (102 امتیاز) 3
ccccc
ویرایش شده توسط
توسط (7,164 امتیاز) 4 7 141
تلگرام نشناخت

09149234809 به این لطفا یه پیام بدین

ممنون
توسط (102 امتیاز) 3

پروژه رو براتون ارسال کردم امیدوارم نتیجه بگیرید

 int createuser = p.GetYear(DateTime.Now);//الان سال 96 هست وقتی ثبت رو بزنی توی دیتابیس 96 خواهد بوذ
       int datee =int.Parse(tyear.Text);
            
            if (datee < p.GetYear(DateTime.Now))//این تا زمانیکه سال 97 نشه نمره ثبت نمیکنه
            {
                try
                {
                    if (tids.Text != string.Empty && taverage.Text != string.Empty)
                    {

                        SqlConnection con = new SqlConnection(Connection);
                        /* OleDbCommand com = new OleDbCommand("INSERT into arzeshyabi ([tid],tyear,taverage) values('" + tids.Text + "','" + tyear.Text + "')", con);*/

                        SqlCommand com = new SqlCommand("Insert Into arzeshyabi ([tid],tyear,taverage) Values (@tid,@tyear,@taverage)", con);

                        com.Parameters.AddWithValue("@tid", tids.Text);
                        com.Parameters.AddWithValue("@tyear", createuser);
                        com.Parameters.AddWithValue("@taverage", taverage.Text);

                        con.Open();
                        com.ExecuteNonQuery();
                        con.Close();
                        BindGrid();
                        FarsiMessageBox.MessageBox.Show("پیام", "اطلاعات با موفقیت ثبت شد", FarsiMessageBox.MessageBox.Buttons.OK, FarsiMessageBox.MessageBox.Icons.Information);

                        tids.Text = "";
                       // tyear.Text = "";
                        taverage.Text = "";
                    }
                    else
                    {

                        MessageBox.Show("همه مقادیر را پر کنید", "خطا");

                    }
                }
                catch
                {
                    MessageBox.Show("کارمندی با این کد پرسنلی ثبت نشده است");
                }
               
            }
            
            else
            {
                MessageBox.Show("قبلا ثبت شده است");
                tids.Text = "";
                tyear.Text = "";
                taverage.Text = "";
                return;

            }

 

توسط (7,164 امتیاز) 4 7 141
+1 امتیاز

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

ضمنا کاشکن استرینگ رو یه تغییرات جزیی دادم

این از محیط اجرای برنامه گرفتم

http://www.namasha.com/v/Ml2XvMXh

https://www.aparat.com/v/rsV6K

منا این کد رو هم بزار توی لود فرم همین صفحه

  tyear.Text = p.GetYear(DateTime.Now.AddDays(-365)).ToString();

پروژت یه قسمت کم داره اونم ذخیره نامه هست اگه قرار باشه یه فایل یا یه نامه براشون پیوست کنی باید این قسمت رو هم اضافه کنی
توسط (7,164 امتیاز) 4 7 141
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,921 کاربر

دسته بندی ها

...