Atul Rokade Ответов: 1

Как вставить еще одну таблицу данных из запроса SELECT для таблицы


Всем привет,

На самом деле я создаю одно базовое приложение даты, где если человек первый день войдет в систему, то его sales_count будет один, тот же человек снова войдет в систему, то его sales_count будет 2 , тот же пользователь войдет в систему на следующий день, то его sales_count снова будет 1, Как
Для этого я создал две таблицы Login и Sales_Details в Login с именем пользователя, паролем и уникальным номером. Сейчас, в sales_details я хочу принести только пользователь,Unique_no от входа деталь, но в то же время я хочу, чтобы приращение sales_count в sales_details таблице также обновление сегодня дата Sales_details имея Sales_id,Имя_пользователя,Unique_No,Sales_count,даты на самом деле я пытался, но ничего не произойдет, если даты null тогда вставить дату сегодня+sales_count как 1 в sales_details

ниже я вставляю весь свой код

Что я уже пробовал:

string todaydate = DateTime.Now.ToString("dd/MM/yyyy");
string access = "select To_Date from Sales_Details";
            cmd = new OleDbCommand(access, con);
             con.Open();
             using (OleDbDataReader read = cmd.ExecuteReader())
             {
                 while (read.Read())
                 {
                     string date2 = read["To_Date"].ToString();
                     if (todaydate == date2)
                     {
                         cmd = new OleDbCommand("update Sales_Details set Sales_count= IIF(IsNull(Sales_count), 0, Sales_count) + 1, [To_Date]=Date() where [Unique_No]=@Unique_No", con);
                         cmd.Parameters.AddWithValue("@Unique_No", txtinput.Text);
                         con.Open();
                         int n = cmd.ExecuteNonQuery();

                         if (n == 0)
                         {
                             MessageBox.Show("Invalid Unique No.");

                         }
                         else
                         {
                             this.DialogResult = DialogResult.OK;
                         }

                         con.Close();

                       

                     }
                     else
                     {
                         
                        int counter=1;
                        cmd = new OleDbCommand("insert into Sales_Details select User_name,Unique_No from Login where Unique_No=@Unique_No Union select ISNULL(Sales_Count+1,0) as [@Sales_Count],DATE() AS [To_date]", con);
                         cmd.Parameters.AddWithValue("@Unique_No", txtinput.Text);
                         cmd.Parameters.AddWithValue("@Sales_count",counter);
                         
                           
                             int n1 = cmd.ExecuteNonQuery();

                             if (n1 == 0)
                             {
                                 MessageBox.Show("Invalid Unique No.");

                             }
                             else
                             {
                                 this.DialogResult = DialogResult.OK;
                             }
    
                         
                     }
                 }
             }
              con.Close();

Maciej Los

Это ваш 3. или 4. вопрос примерно о том же! Свой вопрос[^]
Разве вы не понимаете, что ваш вопрос неясен. Пока вы не объясните, что не так с вашим кодом, никто не сможет вам помочь...

Atul Rokade

@Maciej : это мой 2-й вопрос, только первый я удалил из-за того, что не объяснил точно проблему

Maciej Los

Проверить мой ответ.

1 Ответов

Рейтинг:
0

Maciej Los

Прежде всего, проверьте прошлый ответ на ваш вопрос: Как вставить значение инкремента (+1) в таблицу доступа[^]

Во-вторых... Ваш запрос неверен и никогда не будет выполнен:

update Login set Sales_count= IIF(IsNull(Sales_count), 0, Sales_count) + 1, [To_Date]=Date()
where [Unique_No]=@Unique_No


Вы должны использовать МАКСИМУМ[^] функция, возвращающая максимальное значение Sales_count поле.

SELECT Max([Login].Sales_count) AS MaxOfSalesCount
FROM [Login]
WHERE (([Login].Unique_No=@Unique_No) AND [Login].To_Date=Date());


Чтобы вернуть одну ячейку (результат), используйте Объект oledbcommand.Метод Executescalar (Системы.Данных.Для oledb)[^]

Использование:
public int NextSalesNo(string queryString, 
    OleDbConnection connection) 
{
    OleDbCommand command = new OleDbCommand(queryString, connection);
    command.Connection.Open();
    var result = command.ExecuteScalar();
    return  result == null ? 0 : result +1;
    connection.Close();
}


В случае возврата вышеуказанного метода 0 (ноль), вы должны вставить новые данные.
В другом случае вы должны обновить Login таблица, с помощью приведенного ниже запроса:
UPDATE Login SET Sales_count = @NewSales
WHERE (([Login].Unique_No=@Unique_No) AND [Login].To_Date=Date());

где @NewSales это значение, которое вы получаете из приведенного выше метода.

Попробуй!

[РЕДАКТИРОВАТЬ]
Моя вторая мысль: ваш дизайн базы данных неправильный.

Вам не нужно ничего менять / обновлять Sales_count- ты должен уметь их считать. Например: у вас есть таблица Sales В этой таблице вы храните данные о чьих-то продажах:
CREATE TABLE Sales
{
    SaleID INT,  -- PK
    UserID INT,  -- seller
    SaleDate DateTime, -- the date of sale
    ...
};


Чтобы иметь возможность подсчитать его, вы должны сгруппировать данные по UserID. Для общего объема продаж:
SELECT UserID, COUNT(*) As CountOfSales
FROM Sales
GROUP BY UserID;


Для ежедневных продаж:
SELECT UserID, DateOfSale, COUNT(*) As CountOfSales
FROM Sales
GROUP BY UserID, DateOfSale;


Для конкретного пользователя и даты:
SELECT COUNT(*) As CountOfSales
FROM Sales
WHERE ((UserID=@UserID) AND (DateOfSale=@Date));


Поэтому, пожалуйста, переосмыслите свой дизайн базы данных!

[/РЕДАКТИРОВАТЬ]