0

プログラムからデータベースにデータを差し引くにはどうすればよいですか?

データベースに数量と説明があります。数量は 100 で、その説明は A になります。

このようにプログラムを入力すると(プログラムの実行後):数量は50で、その説明はAです。

データベース: 数量は 50 になります (データベースと私のプログラムではマイナス "100 - 50 = 50" であるため、説明は A と同じままです。

それ、どうやったら出来るの?

前もって感謝します!

編集:

私はすでにこれを好きでした:

if (textBoxCodeContainer[index].TextLength != 0)
                    {
                        this.textBoxQuantityContainer[index].Value = Convert.ToDecimal(dReader["Quantity"].ToString());
                        this.textBoxDescContainer[index].Text = dReader["Description"].ToString();
                        this.textBoxSubTotalContainer[index].Text = dReader["Price"].ToString();
                    }

                    if (textBoxQuantityContainer[index].Value != 0)
                    {
                        if (textBoxQuantityContainer[index].Value >= Convert.ToDecimal(dReader["Quantity"].ToString()))
                        {
                             decimal newVal = textBoxQuantityContainer[index].Value - Convert.ToDecimal(dReader["Quantity"].ToString());
                             cmd = new OleDbCommand("UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN (");
                        }
                    }

しかし、プログラムを実行すると、データベースとまったく同じように読み込まれた数量が変更されません。数量を 50 と入力すると、プログラムは自動的に 100 に戻ります (データベース内の数量とまったく同じです)。

なぜそうなのですか?

注: テキストボックスの数量については、Numeric Up Down を使用します。

編集:完全なコードは以下にあります:

        private void UpdateDatas()
        {
            int codeValue = 0;
            int index = 0;

            if (firstForm.textBox1.Text == "Seranne")
            {
                string query = "SELECT [Quantity], [Description], [Price] FROM [Seranne] WHERE [Code] IN (";

                OleDbDataReader dReader;
                OleDbConnection conn = new OleDbConnection(connectionString);
                conn.Open();

                if (int.TryParse(this.textBoxCodeContainer[0].Text, out codeValue))
                {
                    query = query + codeValue.ToString();
                }

                for (int i = 1; i < 17; i++)
                {
                    if (int.TryParse(this.textBoxCodeContainer[i].Text, out codeValue))
                    {
                        query = query + "," + codeValue.ToString();
                    }
                }

                query = query + ")";

                OleDbCommand cmd = new OleDbCommand(query, conn);

                cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
                cmd.Parameters.Add("Quantity", System.Data.OleDb.OleDbType.Integer);

                dReader = cmd.ExecuteReader();

                while (dReader.Read())
                {
                    if (textBoxCodeContainer[index].TextLength != 0)
                    {
                        this.textBoxQuantityContainer[index].Value = Convert.ToDecimal(dReader["Quantity"].ToString());
                        this.textBoxDescContainer[index].Text = dReader["Description"].ToString();
                        this.textBoxSubTotalContainer[index].Text = dReader["Price"].ToString();
                    }

                    if (textBoxQuantityContainer[index].Value != 0)
                    {
                        if (textBoxQuantityContainer[index].Value >= Convert.ToDecimal(dReader["Quantity"].ToString()))
                        {
                             decimal newVal = textBoxQuantityContainer[index].Value - Convert.ToDecimal(dReader["Quantity"].ToString());
                             cmd = new OleDbCommand("UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN (");
                        }
                    }

                    index += 1;
                }

                dReader.Close();
                conn.Close();
            }
        }

        private void UpdatePrice()
        {
            int totalPrice = 0;
            int quantity = 0;
            int price = 0;

            for (int i = 0; i < 17; i++)
            {
                if (textBoxQuantityContainer[i].Value > 0)
                {
                    quantity = (int)textBoxQuantityContainer[i].Value;
                    price = Convert.ToInt32(textBoxSubTotalContainer[i].Text);
                    textBoxTotalContainer[i].Text = (quantity * price).ToString();
                }

                else
                {
                    textBoxSubTotalContainer[i].Text = "";
                    textBoxTotalContainer[i].Text = "";
                }
            }

            for (int i = 0; i < 17; i++)
            {
                if (textBoxTotalContainer[i].TextLength != 0)
                {
                    totalPrice += Convert.ToInt32(textBoxTotalContainer[i].Text);
                }
            }

            textBoxAllTotalContainer.Text = totalPrice.ToString("n2");
        }

        private void textBox_TextChanged(object sender, EventArgs e)
        {
            UpdateDatas();
            UpdatePrice();
        }

    }
}

スクリーンショットは次のとおりです。 ここに画像の説明を入力ここに画像の説明を入力

上のスクリーンショットに表示されている「コード」はデータベースを参照しており、「数量」も参照しています。データベースに既にあるコードを入力すると、残りのボックスがいっぱいになります。しかし、「数量」を 100 から 50 に変更すると、自動的にプログラムが更新されて 100 に戻ります。

4

2 に答える 2

0
cmd = new OleDbCommand("UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN (");

[これは、閉じ引用符と括弧がないため、実際のコードではありません。常に実際のコードをコピーして貼り付けてください。]

WHERE [Code] IN (")

Codeが空の文字列である場所を更新しようとしていますか? NULL である可能性がはるかに高いため、これが更新されない理由の 1 つです。ただし、このコマンドを実行していないため、何も変更されません。

[本当に を持たないすべてのレコードを更新するつもりCodeですか?]

また、cmd を出力し、デバッグ手順の一部として Access 内から実行してみてください。

最後に、なぜQuantityアポストロフィで引用しているのですか? おそらく、これは数値フィールドです。

于 2013-08-24T17:21:15.513 に答える