กระทู้เก่าบอร์ด อ.Yeadram
5,748 17
URL.หัวข้อ /
URL
update ข้อมูลทีละหลายๆ บรรทัด
ถ้าจะ update ข้อมูลทีละหลายๆ บรรทัด ใน access โดยการเขียน code sql ครั้งเดียว ทำได้มั๊ยครับ เช่น
id สังกัด
11 aa
22 bb
33 cc
update ให้เป็น
id สังกัด
11 a1
22 b1
33 c1
ขอบคุณมากครับ
id สังกัด
11 aa
22 bb
33 cc
update ให้เป็น
id สังกัด
11 a1
22 b1
33 c1
ขอบคุณมากครับ
17 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R05942
คุณ krathok-man code ที่ให้มามันไม่ได้ครับมันขึ้นว่า Invalid SQL statement
ต้องการแบบใส่เงื่อนไขที่ where ตรง Id ครับ โดยที่มัน run script เพียงครั้งเดียวและสามารถ update ได้เป็นหลาย ๆ บรรทัด ใครที่พอจะรู้ช่วยด้วยครับ
ต้องการแบบใส่เงื่อนไขที่ where ตรง Id ครับ โดยที่มัน run script เพียงครั้งเดียวและสามารถ update ได้เป็นหลาย ๆ บรรทัด ใครที่พอจะรู้ช่วยด้วยครับ
3 @R05945
ตามคำแนะนำของคุณ krathok-man ก็ update ได้นี่ครับ
ผมทดลองดูก็ OK
น่าจะดูที่ sql statement ของคุณ boy อาจเขียนผิดก็ได้ครับ
ผมทดลองดูก็ OK
น่าจะดูที่ sql statement ของคุณ boy อาจเขียนผิดก็ได้ครับ
4 @R05946
อย่าลอกผมหมดนะครับ สิ่งที่คุณต้องทำคือ
เปลี่ยนชื่อ TABEL ของคุณ ของผมเป็น TABLE1 แต่ของคุณต้องไปเปลี่ยนชื่อ
TABLE เป้าหมายเอาเอง หรือ ไม่ก็ เอา Sql statement ของคุณ Boy มาดูก็ได้ครับ
เปลี่ยนชื่อ TABEL ของคุณ ของผมเป็น TABLE1 แต่ของคุณต้องไปเปลี่ยนชื่อ
TABLE เป้าหมายเอาเอง หรือ ไม่ก็ เอา Sql statement ของคุณ Boy มาดูก็ได้ครับ
5 @R05953
ผมสร้าง table ชื่อ table1 และฟิลด์ก็เหมือนตัวอย่าง ผมก็เลย copy code ของคุณ krathok-man ไปใส่ใน queries ที่เป็น sql ผมไม่แ?่ใจว่าจะต้องใส่ code ไปไว้ตรงไหน หรือจะต้องไป set ข้างในอะไรหรือเปล่าครับ ปกติผมจะใช้ sql แบบง่าย ๆ แบบว่ามือใหม่มากครับ
6 @R05954
แป่ว...ที่เขียนให้นั้น สำหรับทำงานบน Form ครับ ยกตัวอย่าง คุณสร้าง
Command Btt สักตัว ผูก Event เมื่อ Clinck เช่น
Private Sub Command1_Click()
Dim sql As String
sql = "UPDATE Table1 SET Table1.สังกัด = Left([สังกัด],1) & 1"
DoCmd.RunSQL (sql)
end sub
ถ้าคุณจะทำใน QUERY ไม่ต้องอ้งตัวแปร อะไรแล้วครับ ใสแค่
UPDATE Table1 SET Table1.สังกัด = Left([สังกัด],1) & 1
ในมุมมอง SQL Desing แล้วสั่ง Run เลยครับ
Command Btt สักตัว ผูก Event เมื่อ Clinck เช่น
Private Sub Command1_Click()
Dim sql As String
sql = "UPDATE Table1 SET Table1.สังกัด = Left([สังกัด],1) & 1"
DoCmd.RunSQL (sql)
end sub
ถ้าคุณจะทำใน QUERY ไม่ต้องอ้งตัวแปร อะไรแล้วครับ ใสแค่
UPDATE Table1 SET Table1.สังกัด = Left([สังกัด],1) & 1
ในมุมมอง SQL Desing แล้วสั่ง Run เลยครับ
7 @R05967
ผมว่าแล้ว จริงๆ ก็อยากทำบน Form เหมือนกันครับแต่มือไม่ถึง พยายามศึกษาก็ทำไม่ได้ซักที ยิ่งอ่านก็ยิ่งงง ก็เลยต้องใช้ querie แบบธรรมดาอ่ะครับ ต้องขอบคุณ krathok-man มากเลยครับ
8 @R05989
แล้วถ้าเปลี่ยน จาก
id สังกัด
11 11
22 21
33 31
ให้เป็น
id สังกัด
11 T11
22 T21
33 T31
ใช้คำสั่งอย่างไร
id สังกัด
11 11
22 21
33 31
ให้เป็น
id สังกัด
11 T11
22 T21
33 T31
ใช้คำสั่งอย่างไร
9 @R05994
ขอแค่ดูเฉยๆ หลังจากเปลี่ยนรูปแบบแล้วจะเป็นอย่างไร..
select id, "T" & [สังกัด] as nT from table1;
อยากให้เอาไปเปลี่ยนรูปแบบในตารางใหม่
select id, "T" & [สังกัด] As nT into NwTable1 From table1;
อยากให้ข้อมูลเปลี่ยนไปอย่างถาวรเลย ในตารางเดิม
Update table1 set [สังกัด] = "T" & [สังกัด];
คุณถามแค่ "ถ้าเปลี่ยนจาก...เป็น...ใช้คำสั่งอย่างไร"
แต่คุณไม่ขยายความต้องการของคำว่า "เปลี่ยน" ให้ เลยไม่รู้ว่า
-เปลี่ยนเฉพาะอยากดูหน้าจอ (select)
-หรือเปลี่ยนถาวร (update)
-หรือจะทำสำเนากัน จะเก็บไว้ทั้งต้นฉบับและตัวที่เปลี่ยนแล้ว (select .. Into) (Insert Into)
select id, "T" & [สังกัด] as nT from table1;
อยากให้เอาไปเปลี่ยนรูปแบบในตารางใหม่
select id, "T" & [สังกัด] As nT into NwTable1 From table1;
อยากให้ข้อมูลเปลี่ยนไปอย่างถาวรเลย ในตารางเดิม
Update table1 set [สังกัด] = "T" & [สังกัด];
คุณถามแค่ "ถ้าเปลี่ยนจาก...เป็น...ใช้คำสั่งอย่างไร"
แต่คุณไม่ขยายความต้องการของคำว่า "เปลี่ยน" ให้ เลยไม่รู้ว่า
-เปลี่ยนเฉพาะอยากดูหน้าจอ (select)
-หรือเปลี่ยนถาวร (update)
-หรือจะทำสำเนากัน จะเก็บไว้ทั้งต้นฉบับและตัวที่เปลี่ยนแล้ว (select .. Into) (Insert Into)
10 @R06010
จะ update เปลี่ยนถาวรน่ะ ขอบคุณมากเลย
คือว่าจะเอาไปใช้กับ MS Access 2007
แล้วนี่เวลานำคำสั่งพวกนี้ไปรันนี่จะต้องเข้าไปรันตรงไหนหรอ
ไงก็ช่วยแนะนำด้วยนะว่าควรไปหาความรู้ที่ไหนเพิ่มเติม ถ้าจะต้องมาเขียนโปรแกรม MS Access 2007
คือว่าจะเอาไปใช้กับ MS Access 2007
แล้วนี่เวลานำคำสั่งพวกนี้ไปรันนี่จะต้องเข้าไปรันตรงไหนหรอ
ไงก็ช่วยแนะนำด้วยนะว่าควรไปหาความรู้ที่ไหนเพิ่มเติม ถ้าจะต้องมาเขียนโปรแกรม MS Access 2007
11 @R06012
- สร้างคิวรี่มาใหม่ 1 อัน
- เปลี่ยนมุมมองไปเป็น มุมมอง sql
- วางนี่ลงไป Update table1 set [สังกัด] = "T" & [สังกัด];
- แก้ไขชื่อให้ถูกต้อง จากคำว่า table1 ให้เป็นชื่อตารางของคุณเอง**
- จากคำว่า สังกัด ให้เป็นชื่อฟิลด์ของคุณเอง**
- สั่งรันคิวรี่
- คุณสามารถลบคิวรี่ตัวนี้ทิ้งได้เลย เพราะมันทำงานครั้งเดียวจบ
** ถ้าคำเหล่านั้นไม่เป็นไปตามหลักการตั้งชื่อ*** ให้ใส่เครื่องหมาย วงเล็บสีเหลี่ยม คร่อมไว้ทุกคำ
*** หลักการตั้งชื่อง่ายๆ
1 ต้องไม่เป็นภาษาอื่นยกเว้น ภาษาอังกฤษ
2 ต้องไม่มีช่องว่างและ/หรือสัญญลักษณ์พิเศษอยู่ในคำ
3 ต้องไม่พ้องกับคำสงวน (ชื่อคำสั่ง, ชื่อเมนู, ชื่อฟังก์ชั่น, ชื่อออบเจค, ชื่อคุณสมบัติ ของระบบ)
- เปลี่ยนมุมมองไปเป็น มุมมอง sql
- วางนี่ลงไป Update table1 set [สังกัด] = "T" & [สังกัด];
- แก้ไขชื่อให้ถูกต้อง จากคำว่า table1 ให้เป็นชื่อตารางของคุณเอง**
- จากคำว่า สังกัด ให้เป็นชื่อฟิลด์ของคุณเอง**
- สั่งรันคิวรี่
- คุณสามารถลบคิวรี่ตัวนี้ทิ้งได้เลย เพราะมันทำงานครั้งเดียวจบ
** ถ้าคำเหล่านั้นไม่เป็นไปตามหลักการตั้งชื่อ*** ให้ใส่เครื่องหมาย วงเล็บสีเหลี่ยม คร่อมไว้ทุกคำ
*** หลักการตั้งชื่อง่ายๆ
1 ต้องไม่เป็นภาษาอื่นยกเว้น ภาษาอังกฤษ
2 ต้องไม่มีช่องว่างและ/หรือสัญญลักษณ์พิเศษอยู่ในคำ
3 ต้องไม่พ้องกับคำสงวน (ชื่อคำสั่ง, ชื่อเมนู, ชื่อฟังก์ชั่น, ชื่อออบเจค, ชื่อคุณสมบัติ ของระบบ)
12 @R06017
ขอบคุณมากเลย แต่ขอถามอีกหน่อย
คือแล้วถ้า Update เฉพาะ ตัว T นำหน้า ฟิลด์ [สังกัด] เฉพาะที่มีข้อมูล เป็นตัวเลขนำหน้าเท่านั้นละ ต้องกำหนดยังไง
เพราะมีบางเรคคอร์ด ที่มันมีตัว T นำหน้าอยู่แล้วน่ะ...
คือแล้วถ้า Update เฉพาะ ตัว T นำหน้า ฟิลด์ [สังกัด] เฉพาะที่มีข้อมูล เป็นตัวเลขนำหน้าเท่านั้นละ ต้องกำหนดยังไง
เพราะมีบางเรคคอร์ด ที่มันมีตัว T นำหน้าอยู่แล้วน่ะ...
13 @R06021
isnumeric() เป็นฟังก์ชั่นตรวจสอบว่าข้อมูลในวงเล็บเป็นตัวเลขหรือไม่
left() เป็นฟังก์ชั่นเพื่อแยกตัวอักษรนับจากด้านซ้าย ระบุได้ว่าต้องการกี่ตัว
Where เป็นคีเวิร์ด ของ SQL ใช้เพื่อระบุเงื่อนไข
ถ้าคุณคิดเงื่อนไขไว้ในใจว่า "จะอัพเดตทุกเรคคอร์ดที่..นำหน้าด้วยตัวเลขเท่านั้น"
คุณก็เขียนได้ว่า
update table1 set [สังกัด] = "T" & [สังกัด] Where isnumeric(left([สังกัด],1));
หรือถ้าคุณตั้งเงื่อนไขไว้ในใจว่า "จะอัพเดตทุกเรคคอร์ดที่ไม่ได้นำหน้าด้วยตัว T"
คุณก็อาจเขียนได้ว่า
Update table1 set [สังกัด] = "T" & [สังกัด] Where Left([สังกัด],1)<>"T";
**ให้สังเกตการค?ด, ให้สังเกตการแปลงความคิดเป็นประโยคคำสั่ง, ให้สังเกตการใช้ Where, ให้สังเกตการใช้ฟังก์ชั่นอื่นๆ เข้ามาร่วมใน SQL
left() เป็นฟังก์ชั่นเพื่อแยกตัวอักษรนับจากด้านซ้าย ระบุได้ว่าต้องการกี่ตัว
Where เป็นคีเวิร์ด ของ SQL ใช้เพื่อระบุเงื่อนไข
ถ้าคุณคิดเงื่อนไขไว้ในใจว่า "จะอัพเดตทุกเรคคอร์ดที่..นำหน้าด้วยตัวเลขเท่านั้น"
คุณก็เขียนได้ว่า
update table1 set [สังกัด] = "T" & [สังกัด] Where isnumeric(left([สังกัด],1));
หรือถ้าคุณตั้งเงื่อนไขไว้ในใจว่า "จะอัพเดตทุกเรคคอร์ดที่ไม่ได้นำหน้าด้วยตัว T"
คุณก็อาจเขียนได้ว่า
Update table1 set [สังกัด] = "T" & [สังกัด] Where Left([สังกัด],1)<>"T";
**ให้สังเกตการค?ด, ให้สังเกตการแปลงความคิดเป็นประโยคคำสั่ง, ให้สังเกตการใช้ Where, ให้สังเกตการใช้ฟังก์ชั่นอื่นๆ เข้ามาร่วมใน SQL
14 @R06027
ขอบคุณมากๆๆ เลย ให้คำแนะนำได้สุดยอดเลยอะ
อืม ขอถามอีกอย่างว่าถ้าจะทำโปรเจคใหม่น่ะ ควรจะทำใน MS Access 2007 แบบ ACCDB หรือ .MDB ดีอ่ะ
เหมือนไปหาข้อมูลมาเค้าบอกว่า ACCDB มันโดนตัดฟังก์ชั่นดีดีบางอย่าง เช่น Users and permissions ออกไป เลยไม่รู้ว่าดีกว่ายังไง
คือจะทำโปรแกรม Purchasing order น่ะ อันไหนน่าจะเหมาะกว่ากัน
อืม ขอถามอีกอย่างว่าถ้าจะทำโปรเจคใหม่น่ะ ควรจะทำใน MS Access 2007 แบบ ACCDB หรือ .MDB ดีอ่ะ
เหมือนไปหาข้อมูลมาเค้าบอกว่า ACCDB มันโดนตัดฟังก์ชั่นดีดีบางอย่าง เช่น Users and permissions ออกไป เลยไม่รู้ว่าดีกว่ายังไง
คือจะทำโปรแกรม Purchasing order น่ะ อันไหนน่าจะเหมาะกว่ากัน
15 @R06055
ขอผ่านนะครับ คำถามนี้
ไม่คุ้นกับ 2007 ครับ แทบไม่เคยได้ใช้เลย
ที่ติดตั้งไปครั้งหนึ่งก็เพื่อช่วยแก้ปัญหาสำหรับตอบคำถามในเว็บบอร์ดนี่แหละครับ
หลังจากนั้นพอดี คอมฯ มีปัญหาล้างเครื่อง ลงใหม่ แล้วก็ไม่ได้ติดตั้ง 2007 อีกเลยครับ ดังนั้นคำถามนี้สำหรับผม "ช่วยไม่ได้" ครับ คงต้องรอท่านอื่นๆ นะครับ
ไม่คุ้นกับ 2007 ครับ แทบไม่เคยได้ใช้เลย
ที่ติดตั้งไปครั้งหนึ่งก็เพื่อช่วยแก้ปัญหาสำหรับตอบคำถามในเว็บบอร์ดนี่แหละครับ
หลังจากนั้นพอดี คอมฯ มีปัญหาล้างเครื่อง ลงใหม่ แล้วก็ไม่ได้ติดตั้ง 2007 อีกเลยครับ ดังนั้นคำถามนี้สำหรับผม "ช่วยไม่ได้" ครับ คงต้องรอท่านอื่นๆ นะครับ
16 @R06056
สำหรับผมนะครับ เวอร์ชันใหม่ยอมดีกว่าเก่า แต่
มันใหม่ครับทำให้เราไม่คุ้นกบเคาองมือว่าอยู่ตรงไหน
ผมว่ามันไม่ตัดหรอกครับ น่าจะเป็นเปลี่ยนเป็นดีกว่า
แต่เราไม่รู้อยู่ตรงไหน ถ้พอมีเวลา ผมเปลี่ยนแน่นอน
เพราะผมเปลี่บนจาก 97 XP 2003 ตอนนี้จะเปลี่ยน
เป็น 2010 แล้ว
มันใหม่ครับทำให้เราไม่คุ้นกบเคาองมือว่าอยู่ตรงไหน
ผมว่ามันไม่ตัดหรอกครับ น่าจะเป็นเปลี่ยนเป็นดีกว่า
แต่เราไม่รู้อยู่ตรงไหน ถ้พอมีเวลา ผมเปลี่ยนแน่นอน
เพราะผมเปลี่บนจาก 97 XP 2003 ตอนนี้จะเปลี่ยน
เป็น 2010 แล้ว
17 @R06060
ขอบคุณมากเลย ขอให้เจริญๆ
Time: 0.2332s
sql = "UPDATE Table1 SET Table1.สังกัด = Left([สังกัด],1) & 1"
DoCmd.RunSQL (sql)