|
|
|
รบกวนช่วยดูทีนะคะ ไม่สามารถโชว์ข้อมูลผ่านทาง DataGridVIew ได้ค่ะ (MS Access+VB C# ) |
|
|
|
|
|
|
|
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace OneTime
{
public partial class FormSaleOrder : Form
{
public FormSaleOrder()
{
InitializeComponent();
}
private DataSet _dataset;
private OleDbConnection _conn;
private OleDbCommand _cmd;
private OleDbDataAdapter _adapter;
private void FormSaleOrder_Load(object sender, EventArgs e)
{
string conStr = "Provider=Microsoft.Ace.OleDb.12.0;"
+ @"Data Source=C:\Onetime Database\Database.accdb";
_conn = new OleDbConnection(conStr);
_conn.Open();
string sql = "SELECT * FROM Customer";
_cmd = new OleDbCommand(sql, _conn);
OleDbDataReader reader = _cmd.ExecuteReader();
while(reader.Read())
cbxCust.Items.Add(reader["CustomerName"]);
sql = "SELECT * FROM Product";
_cmd = new OleDbCommand(sql, _conn);
reader = _cmd.ExecuteReader();
while (reader.Read())
cbxProduct.Items.Add(reader["ProductName"]);
dateTimePicker1.Value = DateTime.Today;
cbxCust.SelectedIndex = 0;
cbxProduct.SelectedIndex = 0;
btnDelete.Enabled = false;
}
private void FormSaleOrder_FormClosing(object sender, FormClosingEventArgs e)
{
_conn.Close();
}
private void showOrder()
{
string sql = "SELECT * FROM SaleOrder WHERE CustomerName = @cust";
_cmd = new OleDbCommand(sql, _conn);
_cmd.Parameters.AddWithValue("cust", cbxCust.SelectedItem);
_adapter = new OleDbDataAdapter(_cmd);
_dataset = new DataSet();
_adapter.Fill(_dataset, "order");
dataGridView1.DataSource = _dataset.Tables["order"];
}
private void cbxCust_SelectedIndexChanged(object sender, EventArgs e)
{
showOrder();
}
private void btnAdd_Click(object sender, EventArgs e)
{
double quan;
if (!double.TryParse(txbTotal.Text, out quan))
{
MessageBox.Show("จำนวนไม่ถูกต้อง");
return;
}
string sql = "INSERT INTO SaleOrder(CustomerName, ProductName, Quantity, OrderDate) VALUE (@cust, @product, @quan, @orderdate)";
_cmd = new OleDbCommand(sql, _conn);
_cmd.Parameters.AddWithValue("cust", cbxCust.SelectedItem);
_cmd.Parameters.AddWithValue("product", cbxProduct.SelectedItem);
_cmd.Parameters.AddWithValue("quan", quan);
_cmd.Parameters.AddWithValue("orderdate", dateTimePicker1.Value);
int affectedRow = _cmd.ExecuteNonQuery();
if (affectedRow < 1)
MessageBox.Show("Error!");
else
showOrder();
}
private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
if (dataGridView1.SelectedRows.Count > 0)
btnDelete.Enabled = true;
else
btnDelete.Enabled = false;
}
}
}
คือต้องการรับข้อมูลจาก user แล้วแสดงข้อมูลที่ DataGridView แต่พอรันแล้วเด้ง error ทันที อยากทราบว่ามีวิธีแก้ไขอย่างไรหรือคะ และสาเหตุเกิดจาก Code ผิด หรือไม่สามารถอัพเดตที่ Access ได้กันแน่คะ มือใหม่เพิ่งหัดเขียนตามหนังสือค่ะ รบกวนช่วยทีนะคะ
>>>>>>>>>> int affectedRow = _cmd.ExecuteNonQuery(); บรรทัดที่ error
ข้อความ error คือ System.Data.OleDb.OleDbException {"Syntax error in INSERT INTO statement."}
Tag : .NET, Ms Access, Win (Windows App), VB.NET, C#, VS 2010 (.NET 4.x)
|
|
|
|
|
|
Date :
2012-03-12 02:49:59 |
By :
HappySnow |
View :
1118 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณค่ะ
|
|
|
|
|
Date :
2012-03-13 18:52:28 |
By :
HappySnow |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
private void showOrder()
{
string sql = @"SELECT SaleOrder.OrderID, SaleOrder.ProductName, SaleOrder.Quantity, Product.Price, (SaleOrder.Quantity * Product.Price) AS OrderTotal
FROM SaleOrder
LEFT JOIN Product
ON SaleOrder.ProductName = Product.ProductName
WHERE CustomerName = @cust";
_cmd = new OleDbCommand(sql, _conn);
_cmd.Parameters.AddWithValue("cust", cbxCust.SelectedItem);
_adapter = new OleDbDataAdapter(_cmd);
_dataset.Clear();
_adapter.Fill(_dataset, "order");
dataGridView1.DataSource = _dataset.Tables["order"];
Double sum = 0;
int num = _dataset.Tables["order"].Rows.Count;
for (int i = 0; i < num; i++)
sum += Convert.ToDouble(_dataset.Tables["order"].Rows[i]["OrderTotal"]);
lblTotal.Text = sum.ToString("#,0.##");
}
private void showOrder001()
{
string sql = @"SELECT SaleOrder.OrderID, SaleOrder.ProductName, SaleOrder.Quantity, Product.Price,
((SaleOrder.Quantity * Product.Price)*0.07) AS OrderVat
FROM SaleOrder
LEFT JOIN Product
ON SaleOrder.ProductName = Product.ProductName
WHERE CustomerName = @cust";
_cmd = new OleDbCommand(sql, _conn);
_cmd.Parameters.AddWithValue("cust", cbxCust.SelectedItem);
_adapter = new OleDbDataAdapter(_cmd);
_dataset.Clear();
_adapter.Fill(_dataset, "order");
dataGridView1.DataSource = _dataset.Tables["order"];
Double sum3 = 0;
int num = _dataset.Tables["order"].Rows.Count;
for (int i = 0; i < num; i++)
sum3 += Convert.ToDouble(_dataset.Tables["order"].Rows[i]["OrderVat"]);
lblVat.Text = sum3.ToString("#,0.##");
}
private void showOrder003()
{
string sql = @"SELECT SaleOrder.OrderID, SaleOrder.ProductName, SaleOrder.Quantity, Product.Price,
((SaleOrder.Quantity * Product.Price)-(SaleOrder.Quantity * Product.Price)*0.07) AS OrderOld
FROM SaleOrder
LEFT JOIN Product
ON SaleOrder.ProductName = Product.ProductName
WHERE CustomerName = @cust";
_cmd = new OleDbCommand(sql, _conn);
_cmd.Parameters.AddWithValue("cust", cbxCust.SelectedItem);
_adapter = new OleDbDataAdapter(_cmd);
_dataset.Clear();
_adapter.Fill(_dataset, "order");
dataGridView1.DataSource = _dataset.Tables["order"];
Double sum2 = 0;
int num = _dataset.Tables["order"].Rows.Count;
for (int i = 0; i < num; i++)
sum2 += Convert.ToDouble(_dataset.Tables["order"].Rows[i]["OrderOld"]);
label3 .Text = sum2.ToString("#,0.##");
}
รบกวนถามอีกนิดนะคะ คือต้องการหาค่า VAT , Discount , ราคาเดิม จากการนำค่า Quantity และ Price จากตาราง SaleOrder และ Product มาคำนวณให้กลายเป็น ShowOrder() อันเดียวนี่ทำยังไงคะ
คือไม่เข้าใจการนำค่ามาหักลบอ่ะค่ะ เลยแยกเป็น 3 อัน ShowOrder(),ShowOrder001(),ShowOrder002() (และคิดว่าไม่น่าจะใช่แบบนี้)
แล้วเกิดปัญหาคือเวลาเรียกโชว์ DataGridView ข้อมูลทับกันหมดเลยค่ะ บางค่าไม่แสดง ช่วยแนะนำทีนะคะ สับสนมาก ว่าต้องเขียนในรูปแบบไหน ค่าถึงไม่ทับกัน
|
|
|
|
|
Date :
2012-03-13 19:00:40 |
By :
HappySnow |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|