C# อยากเอาเวลาปัจจุบันมาลบกับเวลารับจากดาต้าเบส
รบกวนผู้รู้ช่วยเขียนโปรแกรมคราวๆก็ได้ครับ
Date :
2014-11-10 16:55:20
By :
ictm49
Code (PHP)
$startdate = mktime($sh,$si,$ss,$sm,$sd,$sy);
$enddate = mktime($eh,$ei,$es,$em,$ed,$ey);
$day = ((($enddate-$startdate)/60)/1440);
น่าจะประมาณนี้คะ ผิดถูกแนะนำได้คะ
Date :
2014-11-10 16:58:31
By :
เด็กใหม่ PHP
Code (C#)
DateTime start = new DateTime(2014, 11, 8);
DateTime end = new DateTime(2014, 11, 18);
// int days = end.Subtract(start).TotalDays เป็นเราจะเขียนแค่นี้ แค่อยากให้เห็น timespan
TimeSpan result = end.Subtract(start);
int days = result.TotalDays;
Date :
2014-11-10 20:09:02
By :
ห้ามตอบเกินวันละ 2 กระทู้
Code (SQL)
OleDbCommand command = new OleDbCommand("select bc.Borrow_id,bl.P_no,bl.Date_begin,bl.Date_receive,bl.Status,Babout_cost,Btotal from Borlist bl,Borcus bc where bc.Borrow_id=bl.Borrow_id and bc.Borrow_id='" + txt_con.Text + "' order by P_no", connection);
command.ExecuteNonQuery();
//command.Parameters.AddWithValue("@End", this.dateTimePicker2.Value.ToShortDateString());
DataTable dt1 = new DataTable();
OleDbDataAdapter da1 = new OleDbDataAdapter(command);
da1.Fill(dt1);
คืออยากเอาวันปัจจุบัน ลบกับ bl.Date_receive แล้วขึ้นตามรูปน่ะครับ
Date :
2014-11-11 09:25:24
By :
ictm49
อาจ error เพราะเขียนสด
Code (C#)
DataTable dt = new DataTable();
string connectionString = ".....your connection string.....";
using (OleDbConnection connection = new OleDbConnection(connectionString))
using (OleDbCommand command = connection.CreateCommand())
{
StringBuilder commandString = new commandString()
commandString.AppendLine("SELECT bc.Borrow_id, bl.P_no, bl.Date_begin, bl.Date_receive, bl.Status, bc.Babout_cost, bc.Btotal,");
commandString.AppendLine("DateDiff('d', bl.Date_begin, bl.Date_receive) AS MyTimespan");
commandString.AppendLine("FROM Borlist AS bl");
commandString.AppendLine("INNER JOIN Borcus AS bc ON bc.Borrow_id = bl.Borrow_id");
commandString.AppendLine("WHERE bc.Borrow_id = @BorrowId");
commandString.AppendLine("ORDER BY bl.P_no ASC");
command.CommandTimeout = 30;
command.CommandType = CommandType.Text;
command.CommandText = commandString.ToString();
command.Parameters.AddWithValue("@BorrowId", txt_con.Text);
using (OleDbDataAdapter adapter = new OleDbDataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(dt);
}
}
ปล. วันหลังหัดตั้งคำถามให้มัน clearๆ น่ะ อย่าขี้เกียจเขียน แค่ถามยังขี้เกียจเลย
Date :
2014-11-11 10:37:34
By :
ห้ามตอบเกินวันละ 2 กระทู้
ขอโทษครับ พอดีไม่รู้จะตั้งคำถามยังไงดีครับ
อ่อ โปรแกรมที่พี่ให้ลองรันแล้วน่ะครับ
ผลออกมา
Error ครับ
No value given for one or more required parameters.
Date :
2014-11-11 11:54:16
By :
ictm49
มี field บางตัวไม่มีใน table น่ะสิ
มันเลยให้ป้อนค่า
Date :
2014-11-11 11:59:52
By :
ห้ามตอบเกินวันละ 2 กระทู้
ในส่วนของ
commandString.AppendLine("DateDiff('d', bl.Date_begin, bl.Date_receive) AS MyTimespan");
ถูกไม่ครับ ผมจะให้นับวันถอยหลังครับ
อย่างเช่น วันนี้เหลืออีก10 วัน พรุ่งนี้ เหลืออีก9วันอ่ะครับ
Date :
2014-11-11 12:06:48
By :
ictm49
ถ้ามันยากขนาดนั้นไม่ลองทำใน datagrid ดูละครับแบบว่าเห็นปวดหัวยุแต่กับ SQL
ก็เลยจะบอกว่ามีทางให้เดินได้หลายแยกครับ
Date :
2014-11-11 13:54:07
By :
lamaka.tor
ถ้าจะใส่ อีก .... วัน ทำไงหรอครับ
ประวัติการแก้ไข 2014-11-11 16:57:51
Date :
2014-11-11 16:57:20
By :
ictm49
ตอบความคิดเห็นที่ : 14 เขียนโดย : lamaka.tor เมื่อวันที่ 2014-11-11 17:08:55
รายละเอียดของการตอบ ::
ขอโทษครับไม่รู้จะใส่ตรงไหนดี
Code (C#)
connection.Open();
DataTable dt = new DataTable();
using (OleDbCommand command = connection.CreateCommand())
{
StringBuilder commandString = new StringBuilder();
commandString.AppendLine("SELECT bc.Borrow_id,bl.P_no,bl.Date_begin,bl.Date_receive,");
commandString.AppendLine("bl.Status,bl.Babout_cost,Btotal,bl.P_user");
commandString.AppendLine("FROM Borlist bl,Borcus bc");
commandString.AppendLine("WHERE bc.Borrow_id = bl.Borrow_id and bc.Borrow_id = @BorrowId");
commandString.AppendLine("ORDER BY bl.P_no ASC");
//command.CommandTimeout = 30;
command.CommandType = CommandType.Text;
command.CommandText = commandString.ToString();
command.Parameters.AddWithValue("@BorrowId", txt_con.Text);
using (OleDbDataAdapter adapter = new OleDbDataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(dt);
}
}
try
{
DataView DV = new DataView(dt);
DV.RowFilter = string.Format("Borrow_id LIKE '%{0}%'", txt_con.Text);
dataGridView1.DataSource = DV;
dataGridView1.Columns["Borrow_id"].Visible=false;
dataGridView1.Columns["Babout_cost"].Visible = false;
dataGridView1.Columns["Btotal"].Visible = false;
dataGridView1.Columns["P_user"].Visible = false;
string[] header = { "","งวดที่", "ตั้งแต่วันที่", "ถึงวันที่","เวลา", "สถานะ"};
for (int i = 0; i < header.Length; i++)
{
dataGridView1.Columns[i].HeaderText = header[i];
}
dataGridView1.Columns["P_no"].Width=80;
connection.Close();
//showdata();
//da1.Update(dt1);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Date :
2014-11-11 17:16:37
By :
ictm49
รบกวนด้วยครับ ไม่รู้จะใส่ตรงไหนของโปรแกรม
Date :
2014-11-11 17:23:40
By :
ictm49
dataGridView1[3, i]
เลข 3 หมายถึงอะไรหรอครับ
Date :
2014-11-11 17:28:54
By :
ictm49
มันเป็น private void ครับไว้ที่ไหนก็ได้ใน class ถ้าผมเข้าใจไม่ผิด
dataGridView1_DataBindingComplete จะทำงานหลัง dataGridView1.DataSource = DV;
พูดง่ายๆคือเมื่อเรา Binding ข้อมูลเรียบร้อยแล้วอ่าครับ
dataGridView1[3, i].Value คือ dataGridView1 columns ที่ 3 rows ที่ i
โทษทีครับถามหน่อยที่ทำอยู่นี่เป็น winApp ใช่ไม๊ครับ
Date :
2014-11-11 17:46:20
By :
lamaka.tor
ลองเอา
dataGridView1.Columns["Borrow_id"].Visible=false;
dataGridView1.Columns["Babout_cost"].Visible = false;
dataGridView1.Columns["Btotal"].Visible = false;
dataGridView1.Columns["P_user"].Visible = false;
ออกดูครับ
ใน code ผมไม่เห็นการเพิ่ม Columns "เวลา" ขึ้นมาใช่ไม๊ครับ
Date :
2014-11-12 11:16:24
By :
lamaka.tor
ตอบความคิดเห็นที่ : 23 เขียนโดย : lamaka.tor เมื่อวันที่ 2014-11-12 11:16:24
รายละเอียดของการตอบ ::
พี่ครับ ลองแก้ไขหน่อยน่ะครับ ว่าต้องเขียนยังไง ที่จะเขียนแบบพี่
Code (C#)
connection.Open();
DataTable dt = new DataTable();
using (OleDbCommand command = connection.CreateCommand())
{
StringBuilder commandString = new StringBuilder();
commandString.AppendLine("SELECT bc.Borrow_id,bl.P_no,bl.Date_begin,bl.Date_receive,");
commandString.AppendLine("bl.Status,bl.Babout_cost,Btotal,bl.P_user");
commandString.AppendLine("FROM Borlist bl,Borcus bc");
commandString.AppendLine("WHERE bc.Borrow_id = bl.Borrow_id and bc.Borrow_id = @BorrowId");
commandString.AppendLine("ORDER BY bl.P_no ASC");
//command.CommandTimeout = 30;
command.CommandType = CommandType.Text;
command.CommandText = commandString.ToString();
command.Parameters.AddWithValue("@BorrowId", txt_con.Text);
using (OleDbDataAdapter adapter = new OleDbDataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(dt);
}
}
try
{
DataView DV = new DataView(dt);
DV.RowFilter = string.Format("Borrow_id LIKE '%{0}%'", txt_con.Text);
dataGridView1.DataSource = DV;
dataGridView1.Columns["Borrow_id"].Visible=false;
dataGridView1.Columns["Babout_cost"].Visible = false;
dataGridView1.Columns["Btotal"].Visible = false;
dataGridView1.Columns["P_user"].Visible = false;
string[] header = { "","งวดที่", "ตั้งแต่วันที่", "ถึงวันที่","เวลา", "สถานะ"};
for (int i = 0; i < header.Length; i++)
{
dataGridView1.Columns[i].HeaderText = header[i];
}
dataGridView1.Columns["P_no"].Width=80;
connection.Close();
//showdata();
//da1.Update(dt1);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
ประวัติการแก้ไข 2014-11-12 12:37:13
Date :
2014-11-12 12:36:06
By :
ictm49
LastPay คือ วันที่จาก DB
NOW() คือ วันปัจจุบัน
Code (SQL)
SELECT tblinvoice.LastPay as วันเริ่ม,NOW() as ถึงวัน,DATEDIFF(NOW(),tblinvoice.LastPay) as วัน FROM tblinvoice
ถ้าได้ค่าติดลบคือเลยมาแล้ว
ปล.สำหรับโปรแกรมของผมจะหาจำนวนวันที่ครบกำหนดชำระว่าเหลือกี่วัน ถ้าเกินมาแล้ว 7 วัน คือถ้าค่าเท่า -7 ระบบก็จะเปลี่ยนเป็นสถานะอื่นและทำการปรับหน่ะครับ
Date :
2014-11-12 13:35:23
By :
zarooman
ตอบความคิดเห็นที่ : 24 เขียนโดย : ictm49 เมื่อวันที่ 2014-11-12 12:36:06
ต้องออกตัวผมไม่ถนัด SQL แบบที่ต้องมานั่งเขียนเองเท่าไหร่
ส่วนใหญผมใช้ query builder เพราะมันใช้ skill น้อยกว่า ความผิดพลาดน้อยกว่าด้วย
เอาละครับ ลองเอา Code บ้านๆ ของผมไปใช้ดูว่า รัน ได้ป่าว
รายละเอียดของการตอบ ::
private void Form2_Load(object sender, EventArgs e)
{
string sql = "SELECT bc.Borrow_id,bl.P_no,bl.Date_begin,bl.Date_receive,DATEDIFF(day,bl.Date_begin,bl.Date_receive) as _days," +
"bl.Status,bl.Babout_cost,Btotal,bl.P_user" +
"FROM Borlist bl,Borcus bc" +
"WHERE bc.Borrow_id = bl.Borrow_id and bc.Borrow_id = " + txt_con.Text +
"ORDER BY bl.P_no ASC";
dataGridView1.DataSource = GetTableForm(sql, strConn).DefaultView;
}
System.Data.DataTable GetTableForm(string _SQL, string strConn)
{
System.Data.DataSet ds = new System.Data.DataSet();
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn);
conn.Open();
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(_SQL, conn);
adapter.Fill(ds);
return ds.Tables[0];
}
ปล. ถ้าไม่อยากมาเสียเวลากะ SQL แบบนี้ผมแนะนำให้ใช้ data source ,query builder แล้วมาจัดการที่ dataGridView เอาจะลดขั้นตอนการทำงานลงได้เยอะครับ(ตอบแบบนักวิทย์ซักหน่อย)
Date :
2014-11-12 14:31:41
By :
lamaka.tor
ครับ ส่วนนั้นได้แล้วครับ
แต่ถ้า จะเขียนในโปรแกรมว่า ในแถวว่า อีก 1 วัน ประมาณนี้น่ะครับ แต่ถ้า เท่ากับ 0 ให้เท่ากับ วันนี้ แล้วถ้า เกิน ก็ให้ขึ้นว่า เกิน 1 วัน อ่ะครับ
ทำไงดี ยากมากลองหลายวิธีแล้ว
Date :
2014-11-12 15:07:40
By :
ictm49
รบกวนผู้รู้ทุกท่านครับ
Date :
2014-11-12 15:10:29
By :
ictm49
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
int intDay;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
intDay = (int)((DateTime)dataGridView1[1, i].Value - (DateTime)dataGridView1[2, i].Value));
dataGridView1[3, i].Value =(intDay >1)?"อีก " + intDay + " วัน":"เกิน " + intDay + " วัน";
}
}
ลองดูครับ
Date :
2014-11-12 15:13:53
By :
lamaka.tor
IIF(DATEDIFF(day,bl.Date_begin,bl.Date_receive)>0,'อีก ' +DATEDIFF(day,bl.Date_begin,bl.Date_receive) + ' วัน','เกิน ' +DATEDIFF(day,bl.Date_begin,bl.Date_receive) + ' วัน') as _Days
อันนี้เดา
Date :
2014-11-12 15:25:25
By :
lamaka.tor
ของคุณ zarooman จะเป็นโปรแกรมคล้ายๆผมอ่ะครับ
Date :
2014-11-12 15:34:18
By :
ictm49
ขอโทดทีครับ ผมโพสต์แล้วหลับไปพึ่งตื่น ถ้าไม่อยากให้มันติดลบ ก็เหมือนกันครับ ใน DATEDIFF ให้ สลับ NOW() กับ LastPay
Code (SQL)
SELECT tblinvoice.LastPay as วันเริ่ม,NOW() as ถึงวัน,DATEDIFF(tblinvoice.LastPay,NOW()) as วัน FROM tblinvoice
คือถ้าเกินมามันก็จะขึ้น จำนวนวันที่เกินครับ
ผมยัง งง ในคำถามนิสๆ บอกได้ไหมครับว่าเป็นโปรแกรมอะไร
ปล. ผมเขียน VB นะครับ C# ไม่เก่ง
ประวัติการแก้ไข 2014-11-12 19:12:42
Date :
2014-11-12 19:10:24
By :
zarooman
Code (SQL)
SELECT
LastPay,
current_timestamp,
DATEDIFF(day, LastPay, current_timestamp ) as d1
FROM tblinvoice
Date :
2014-11-13 11:48:27
By :
Chaidhanan
ตอบความคิดเห็นที่ : 35 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-11-13 11:48:27
รายละเอียดของการตอบ ::
ผมใช้แบบนี้อ่ะครับ รบกวนแก้ด้วยน่ะครับ
Code (C#)
connection.Open();
DataTable dt = new DataTable();
using (OleDbCommand command = connection.CreateCommand())
{
StringBuilder commandString = new StringBuilder();
commandString.AppendLine("SELECT bc.Borrow_id,bl.P_no,bl.Date_begin,bl.Date_receive,");
commandString.AppendLine("DateDiff('d','" + dateTimePicker5.Value.ToShortDateString() + "',bl.Date_receive) AS MyTimespan");
commandString.AppendLine(",bl.Status,bl.Babout_cost,Btotal,bl.P_user");
commandString.AppendLine("FROM Borlist bl,Borcus bc");
commandString.AppendLine("WHERE bc.Borrow_id = bl.Borrow_id and bc.Borrow_id = @BorrowId");
commandString.AppendLine("ORDER BY bl.P_no ASC");
//command.CommandTimeout = 30;
command.CommandType = CommandType.Text;
command.CommandText = commandString.ToString();
command.Parameters.AddWithValue("@BorrowId", txt_con.Text);
using (OleDbDataAdapter adapter = new OleDbDataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(dt);
}
}
try
{
DataView DV = new DataView(dt);
DV.RowFilter = string.Format("Borrow_id LIKE '%{0}%'", txt_con.Text);
dataGridView1.DataSource = DV;
dataGridView1.Columns["Borrow_id"].Visible=false;
dataGridView1.Columns["Babout_cost"].Visible = false;
dataGridView1.Columns["Btotal"].Visible = false;
dataGridView1.Columns["P_user"].Visible = false;
string[] header = { "","งวดที่", "ตั้งแต่วันที่", "ถึงวันที่","เวลา", "สถานะ"};
for (int i = 0; i < header.Length; i++)
{
dataGridView1.Columns[i].HeaderText = header[i];
}
dataGridView1.Columns["P_no"].Width=80;
connection.Close();
//showdata();
//da1.Update(dt1);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
รันออกมาได้
แต่ติดปัญหาที่ ในdatagridview อยากให้ โชว์ในdatagridview ว่า อีกกี่วัน แล้วพอครบกำหนด จะขึ้นในdatagridview ว่า วันนี้ แต่พอพ้นกำหนดจะขึ้นว่า เกินกี่วัน แล้วน่ะครับ ประมาณนี้
Date :
2014-11-13 13:27:02
By :
ictm49
ถ้า แยก คอลัมน์ได้ไหมครับ
เริ่ม เกิน/วัน อีก/วัน
Code (SQL)
SELECT
LastPay,
current_timestamp,
case when current_timestamp>LastPay
then DATEDIFF(day, LastPay, current_timestamp )
else 0
end as d1,
case when current_timestamp>LastPay
then 0
else DATEDIFF(day, current_timestamp, LastPay )
end as d2
FROM tblinvoice
ปล. กำลังอัพเดท vs 2012.4 อยู่อะครับ เลยไม่มี โปรแกรม เทส
ประวัติการแก้ไข 2014-11-13 14:18:45
Date :
2014-11-13 14:17:37
By :
Chaidhanan
ผมอยากให้ลองใช้ data source ,query builder แล้วมาจัดการที่ dataGridView ดูครับผมว่ามันจะง่ายกว่านา
เพราะ query builder มันจะ ex ได้ว่า SQL รึป่าวลองดูครับ
Date :
2014-11-13 14:37:51
By :
lamaka.tor
ตอบความคิดเห็นที่ : 44 เขียนโดย : ictm49 เมื่อวันที่ 2014-11-13 14:48:05
รายละเอียดของการตอบ ::
เอางี้ครับ สละเวลาซัก 10 นาที สร้าง form,add data source ,ลากตารางมาใส่ form แก้ไข้ datagrid ให้ดูดี
จากนั้นเพิ่ม
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
int intDay;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
intDay = (int)((DateTime)dataGridView1[1, i].Value - (DateTime)dataGridView1[2, i].Value));
dataGridView1[3, i].Value =(intDay >1)?"อีก " + intDay + " วัน":"เกิน " + intDay + " วัน";
}
}
ผมว่า 10 นาที ลองดูก็เสียหลายครับ
ผมเห็นว่าหมดหมุ่นอยู่กับมันมานานแระนะก็เลยแนะดู
ประวัติการแก้ไข 2014-11-13 14:58:33
Date :
2014-11-13 14:57:13
By :
lamaka.tor
มัน error ว่าไงครับ
facebook Mongkon Phochaila add มาคุยกันเด๋วดูให้
Date :
2014-11-13 16:18:11
By :
lamaka.tor
DueDate = วันที่ครบกำหนดชำระ
NOW() = คือวันปัจจุบัน
โอเค ได้ฟิลด์ตามนี้แล้วก็ใส่ SQL ตามนี้
Code (SQL)
SELECT DueDate as วันครบกำหนด,NOW() as ถึงวัน,if(DATEDIFF(DueDate,NOW())>0,CONCAT('เหลือ ',DATEDIFF(DueDate,NOW()),' วัน'),if(DATEDIFF(DueDate,NOW())=0,'วันนี้',CONCAT('เกินมา ',MID(DATEDIFF(DueDate,NOW()),2,30),' วัน'))) as วัน FROM Table
IF แรกถ้าค่ามากกว่า 0 แสดงว่าเกินวันครับกำหนดมาแล้ว
IF สองถ้าเท่า 0 แสดงว่าวันครบกำหนดคือวันนี้หรือวันปัจจุบัน
IF สามถ้าค่าที่ได้น้อยกว่า 0 หรือ ติดลบ แสดงว่าวันครบกำหนดนั้นๆยังมาไม่ถึง
ทั้ง สาม IF มี CONCAT คือ ฟังก์ชันเชื่อม ข้อความ
ใน IF สามที่ผมใช้ฟังก์ชัน MID นั้นเพราะต้องการจะตัดค่า ที่มันติดลบ "-" ออก เพื่อให้มันเป็นจำนวนเต็ม
ตามนี้นะครับ
Select ลง Dataset แล้วเอามาใส่ใน Datagrid
ส่วนถ้าจะบันทึกเข้าไปในฐานข้อมูลว่าเลยมาจะนวนกี่วันนั้นไม่จำเป็นต้องบันทึกทุกวัน ให้บันทึกเวลาเราต้องการจะบันทึกหรือลูกค้ามาชำระค่างวดแล้วก็พอ
อันนี้เอามาโชว์ ให้พนักงานดูเฉยๆว่า มันเลยมากี่งวดวันแล้วและ จะต้องปรับ กี่บาท ประมาณนั้น
ปล. ผมทำให้ My sql ไม่รู้เหมือนกันว่า ฟังก์ชันพวกนี้ สามารถทำได้ใน SQL Server รึป่าวนะ
ประวัติการแก้ไข 2014-11-13 17:21:26
Date :
2014-11-13 17:17:38
By :
zarooman
รบกวน จขกท หน่อยครับ ขอ environment ที่ใช้ครับ
database อะไร
C# เวอร์ชั่นไหนครับ
และ อีกอย่าง ถ้า ก๊อปโค๊ด ที่เกี่ยวข้องมาด้วยก็จะดีนะครับ
เช่น connection มันมาลอยๆ เลยไม่รู้ว่า ใช้ component ตัวไหน อะครับ
และ using ถ้าไม่ได้เขียน คนเดียว ใช้ตัวเต็มดีกว่าครับ แบบอ่านโค๊ดแล้ว งง ว่าต้นตอมาจากไหน
กว่าจะเลื่อนขึ้นไปดู ก็ลืมแล้วครับ แบบ ไม่ค่อยชำนาญครับ รู้แต่ หลักการและไวยกรณ์ พวกชุดคำสั่งต้อง doc อยู่ตลอด
Date :
2014-11-13 21:53:09
By :
Chaidhanan
โปรแกรมเขียนขึ้นภายใต้ database : Access C# VS2012
บน Form1
dataGridView1
button1
button2
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.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string connectionString;
OleDbConnection connection;
OleDbDataAdapter oledbAdapter;
OleDbCommandBuilder oledbCmdBuilder;
DataSet ds = new DataSet();
DataSet changes;
string Sql;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\SQLServer\Newdatabese.accdb";
//connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Your mdb filename;";
connection = new OleDbConnection(connectionString);
Sql = "SELECT ID, name1, LastPay, DATE() AS Today, TIME() AS xtime "+
", iif(DateDiff( 'd', LastPay, DATE() )>0, DateDiff( 'd', LastPay, DATE() ) , 0) AS d1 " +
", iif(DateDiff( 'd', LastPay, DATE() )<0, DATEDIFF('d', DATE(), LastPay ), 0 ) AS d2 " +
" FROM tblinvoice";
try
{
connection.Open();
oledbAdapter = new OleDbDataAdapter(Sql, connection);
oledbAdapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
oledbCmdBuilder = new OleDbCommandBuilder(oledbAdapter);
changes = ds.GetChanges();
if (changes != null)
{
oledbAdapter.Update(ds.Tables[0]);
}
ds.AcceptChanges();
MessageBox.Show("Save changes");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
Date :
2014-11-14 12:07:52
By :
Chaidhanan
น่าจะคล้ายๆกันกับของหนูนะ แบบนี้หรือเปล่าค่ะ
Date :
2014-11-14 15:25:49
By :
ปะละลวก
ใช้ CONCAT รันไม่ผ่านครับ
Date :
2014-11-15 15:52:21
By :
ictm49
[name_first] & " " & [name_last]
ประวัติการแก้ไข 2014-11-16 17:24:11
Date :
2014-11-16 17:21:45
By :
Chaidhanan
ได้แล้วครับ งงมาหลายวัน
Code (C#)
connection.Open();
DataTable dt = new DataTable();
using (OleDbCommand command = connection.CreateCommand())
{
StringBuilder commandString = new StringBuilder();
commandString.AppendLine("Select Date_receive as วันครบกำหนด,NOW() as ถึงวัน,");
commandString.AppendLine("IIF(DATEDIFF('d',NOW(),Date_receive)>0,'อีก '&DATEDIFF('d',NOW(),Date_receive)&' วัน',");
commandString.AppendLine("IIf(DateDiff('d',NOW(),Date_receive)<=0,'เกิน '&-DATEDIFF('d',NOW(),Date_receive)&' วัน'))");
commandString.AppendLine("FROM Borlist");
//command.CommandTimeout = 30;
command.CommandType = CommandType.Text;
command.CommandText = commandString.ToString();
using (OleDbDataAdapter adapter = new OleDbDataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(dt);
}
}
dataGridView1.DataSource = dt;
ที่ 'เกิน' ผมใช้ - Datediff จะให้ค่าไม่ติดลบน่ะครับ ถูกไม่ครับ แต่รันผ่านครับ
Date :
2014-11-19 10:57:22
By :
ictm49
ดีแระครับที่ผ่าน
ติดลบใช้ ABS() ได้ครับ จะให้ค่าบวกเสมอ
Date :
2014-11-19 11:13:19
By :
lamaka.tor
ขอถามเรื่องอืนน่ะครับ พอดีผมแก้ไขข้อมูล แต่รันแล้วระบบยังจำของเดิม ทำไงดีครับ
Date :
2014-11-19 11:28:03
By :
ictm49
DataGridView.DataSource = null
DataGridView.DataSource = .....
Date :
2014-11-19 11:37:44
By :
lamaka.tor
Load balance : Server 02