เพิ่มฟิลด์ในฐานข้อมูลของเครื่องเซิฟเวอร์
กระทู้เก่าบอร์ด อ.Yeadram

 1,736   5
URL.หัวข้อ / URL
เพิ่มฟิลด์ในฐานข้อมูลของเครื่องเซิฟเวอร์

หากเราต้องการเพิ่มฟิลด์อีก2ฟิลด์
ในฐานข้อมูลของเครื่องเซิฟเวอร์
เช่น ข้อมูล Custom มีชื่อ ที่อยู่
หากเราต้องการเพิ่มอีก 2 ฟิลด์
ยอดซื้อ กับ ยอดจ่ายเงิน
เป็น number แบบมีทศนิยม

เพิ่ม ฟิลด์ buy เป็น number แบบ มีทศนิยม
เพิ่ม ฟิล์ด pay เป็น number แบบ มีทศนิยม

เราต้องเขียนคำสั่่งบนฟอร์มอย่างไร
เพื่อให้ผู้ใช้ ไปดำเนินการเองที่เครื่องลูก
ไม่ต้องไปแก้ที่เครื่อง เซิฟเวอร์

5 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R15183
ประกาศตัวแปร คอนเน็คชั่น
ตั้งค่าให้ตัวแปรคอนเน็คชั้น
สั่งให้ตัวแปรคอนเน็คชั่น รัน SQL Statement

การจะปรับเปลี่ยนโครงสร้างของตาราง เราจะใช้ Statement ที่ขึ้นต้นด้วย Alter Table ครับ (ค้นเพิ่มเติมด้วยนะครับ)
จะเพิ่มตาราง เราจะขึ้นต้นด้วย Create Table....
จะลบตาราง เราขึ้นต้นด้วย Drop Table

ในงานนี้เราจะปรับเปลี่ยนโครงสร้างนะครับ ซึ่งการปรับเปลี่ยนโครงสร้างในความหมายของผม ก็หมายรวมถึง ทั้ง
เพิ่มฟิลด์, ลดฟิลด์, แก้ไขชนิดข้อมูลของแต่ละฟิลด์, ปรับเปลี่ยนขนาดความกว้างของฟิลด์ เช่นเคยตั้งเป็น Text 100 ก็ปรับเป็น Text 50เป็นต้น, การแก้ไขฟิลด์ index, การแก้ไขฟิลด์เชื่อมโยง เป็นต้น....


ตัวอย่างคร่าวๆ ครับ

Sub....
Dim pth as string
Dim Conn as New adodb.connecttion
dim sql as string

pth = "\\server\work\job\bckEnd.mdb"
Conn.open   "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & pth

sql = "ALTER TABLE tbCustom Add Column buy dbDouble;"
Conn.execute(sql)
Conn.close
set Conn = nothing
End sub

2 @R15185
ขอบคุณมากเลยครับ
พยามยามหาควาุ้มรู้อยู่
่ไม่เคยเรียนมาก่อน
ใช้ตัดแปะเอาครับ
3 @R15190
ทดลองแล้วไม่ได้ครับ
มันขึ้นข้อความว่า
compileerror:
use r-defined type not defined

คืออย่างนี้ครับ ผมอาจเล่าไม่เคลีย
เอาใหม่
เครื่องที่่ใช้อยู่ต่างจังหวัดมีการแก้ไขฐานข้อมูล
เลยคิดว่า ไม่ต้องให้ส่งฐานข้อมูลกลับมา

อยากเขียนฟอร์มขึ้นมาฟอร์มหนึ่ง
เพื่อเข้าไปเพิ่มฟิลด์เข้าไปเองโดยไม่มีการเชื่อมต่อฐานข้อมูลกับโปรแกรมเดิม

ตัวฐานข้อมูลอยู่ที่ \\sv\office\data.mdb

แล้วเราก็จะเขียนฟอร์มขึ้นมาฟอร์มเดียว
ให้เค้าไปเปิดในตัวลูกข่าย
มีปุ่มกดให้กดปุ่มแล้ว ไปเพิ่มฟิลด์ตามข้างบน

ต้องเขียนโค๊ตอย่างไรในปุ่มกด

รบกวนอีกครั้งครับ
4 @R15191
เท่าที่ดู คำสั่งของ อ.yeadram ก็ใช้ได้นะครับ เพียงพิมพ์ผิดไปหน่อยครับ

* Dim Conn as New adodb.connecttion
- Dim Conn as New adodb.connection

* sql = "ALTER TABLE tbCustom Add Column buy dbDouble;"
- sql = "ALTER TABLE tbCustom Add Column buy Double;"

และหากไฟล์คุณเป็นรูปแบบ accdb ไม่ใช่ mdb ก็ต้องเปลี่ยนเป็น (บอกเผื่อไว้)
* Provider=Microsoft.Jet.OLEDB.4.0
- Provider=Microsoft.ACE.OLEDB.12.0

ประมาณนี้ครับ

จริงๆแล้วนอกจากการใช้ SQL statement สร้างฟิลด์แล้ว เราก็ยังสามารถใช้ VBA จัดการได้เลยเช่นกัน เพียงแต่รูปแบบมันดูอยากกว่า SQL แต่ผมลองเขียนให้เป็นการแลกเปลี่ยนความรู้ดูนะครับ

ตัวอย่างจากโจทย์คุณต้องการสร้างฟิลด์ใหม่ชื่อ buy และ pay สมมุติตารางชื่อ tb_Custom ผมเซ็ทให้ Data type เป็น Double และ Format เป็น Standard เพื่อแสดงทศนิยม 2 ตำแหน่งตามที่คุณต้องการ
(การที่ผู้ถามให้ข้อมูลไม่ละเอียด ทั้งข้อมูลที่มีและความต้องการ ทำให้ผู้ตอบต้องสมมุติ และเดาข้อมูลเอาเองนะครับ)

    Dim db As DAO.Database
    Dim tdfLog As TableDef
    Dim strPathName As String
    Dim strTableName As String

    strPathName = "\\sv\office\data.mdb"
    Set db = OpenDatabase(strPathName)
    'หากไฟล์ตั้งรหัสผ่านให้ใช้ด้านล่างแทน
    'Set db = OpenDatabase(strPathName, False, False, ";pwd=1234")
   
    strTableName = "tb_Custom" 'ชื่อตารางเป้าหมาย
    Set tdfLog = db.TableDefs(strTableName)
   
    With tdfLog
        .Fields.Append .CreateField("buy", dbDouble)
        .Fields.Append .CreateField("pay", dbDouble)
    End With
    db.TableDefs.Refresh
    
    tdfLog.Fields("buy").Properties.Append tdfLog.Fields("buy").CreateProperty("Format", dbText, "Standard")
    tdfLog.Fields("pay").Properties.Append tdfLog.Fields("pay").CreateProperty("Format", dbText, "Standard")
    
    Set obj = Nothing: Set tdfLog = Nothing
    db.Close: Set db = Nothing

ลองดูครับ
5 @R15225
ใช้ได้แล้วครั
ต้องหาความรู้มากกว่านี้แล้วครับ
ขอบคุณทั้ง2ท่านครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3670s