Sufficiency Economy
Group Blog
 
All blogs
 

Python อ่านโครงสร้างของ Table ของ MS Access




วันนี้เรามาดูวิธ๊หาชื่อตาราง และชื่อField ของฐานข้อมูล MS Access กันดีกว่า (ใครเดาได้หรือไม่ ว่าจะเอาไปทำอะไรต่อ?)
วิธ๊การก็ง่ายๆ โดยเรียกข้อมูล ผ่าน object "cursor"

1) strConn = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=' + E1.get()+'.mdb'
2) db = pyodbc.connect(strConn,autocommit=True)
3) cursor = db.cursor()


ต่อไปก็วนลูป ดึงชื่อตารางจากฐานข้อมูลที่เลือก แล้วเอาไป
เก็บในตัวแปรแบบ List ที่ชื่อว่า ListTable
for row in cursor.tables(tableType='TABLE'):
ListTable.append(row.table_name)

ต่อไปก็เลือกที่ละ Table มาหาชื่อ Field แล้วเก็บในตัวแปรแบบString ชื่อ L
for x in ListTable:
L = L + x + "n"
L = L + "Fields Detail" + "n"
for row in cursor.columns(table=x):
L = L + "t" +row.column_name + "n"

สุดท้ายก็จะได้ข้อมูลชื่อตาราง และชื่อField ในตัวแปร L

แล้วนำมาแสดง ใน Text widgets โดยนำ scrollbar widgets มาติดไว้ลองดูใน sourcecode ล่ะกัน ที่นี้เลย




 

Create Date : 01 มิถุนายน 2554    
Last Update : 1 มิถุนายน 2554 20:06:06 น.
Counter : 1613 Pageviews.  

Python ทำโปรแกรมจัดการฐานข้อมูล MS Access อย่างง่าย




จากครั้งก่อนโน้น ได้ทดลองติดต่อกับฐานข้อมูล Access กันแล้ว และครั้งที่แล้วได้ทำหน้าจอให้ดูสวยงาม โดยใช้ grid method ซึ่งถ้าเราความรู้ทั้งสองอย่างมารวมกันก็จะได้โปรแกรม จัดการฐานข้อมูล MS Access อย่างง่ายๆ กัน
โดยโปรแกรมจะมีคุณสมบัติ
1. สร้างฐานข้อมูล
2. สร้างตาราง
3. สร้างField ประเภทต่างๆ แต่เอาง่ายๆ ก็พวก Text Integer และ Decimal

แล้วทำอย่างไร กัน
เริ่ม สร้างฐานข้อมูล ก็เอาง่าย ก็ทำการ copy ไฟล์ BankDatabase แล้วเปลี่ยนชื่อตามที่ตั้งไว้
การ Copy File
import shutil
shutil.copy2('ชื่อไฟล์ต้นทาง', 'ชื่อไฟล์ปลายทาง')
เช่น ต้องการ copy file TmpDB.mdb ไปเป็นไฟล์ test.mdb ก็เขียนตามนี้
shutil.copy2('TmpDB.mdb', 'test.mdb')
ง่ายมากๆ

ต่อไปก็การสร้างตาราง และ Fields ก็เรียกใช้คำสั่ง SQL
CREATE TABLE ชื่อTable (ชื่อField datatype)

ถ้าต้องการเพิ่ม Field ก็เรียกใช้คำสั่ง SQL
ALTER TABLE ชื่อTable ADD COLUMN ชื่อField datatype
ประมาณนี้ แล้วสั่ง execute ส่ะ

แต่มีต้องเพิ่มเติมตอน connect กับ Database ต้องเพิ่ม autocommit=True ด้วยไม่งั้น มันไม่ error แต่ไม่สร้างTable ให้ งงเหมือนกัน
db = pyodbc.connect(strConn,autocommit=True)

เพิ่มเติมเรื่อง Widget
ค่าให้ม้น DISABLED หรือ ENABLE โดยการกำหนดค่า state ให้เป็น DISABLED และ NORMAL ตามลำดับ

การแสดง messagebox ก็ทำโดย
import tkMessageBox
tkMessageBox.showinfo("ข้อความที่ Title Bar", "ข้อความที่ต้องการแสดง" )

ที่เหลือก็ลองแกะๆ code เอาละก้น
source code อยู่นี้ครับ




 

Create Date : 06 พฤษภาคม 2554    
Last Update : 6 พฤษภาคม 2554 19:56:06 น.
Counter : 2453 Pageviews.  

Python การจัดการ widgets ด้วย grid method

จากที่ผ่านมา การจัดการวาง widgets บน form เราใช้ pack method ซึ่งค่อนข้างยุ่งยาก แต่มีอีกวิธีคือใช้ grid method
จากคำแนะนำที่ //effbot.org/tkinterbook/grid.htm ทำให้จัดการได้ง่ายขึ้น
หลักการของ grid คือ การวาง widgets ที่ต้องการบนตาราง โดยการระบุ row และ column (น่าแปลกที่ column ต้องเขียนเต็มๆ ไม่ได้ย่อว่า col)
และถ้าต้องการขยาย column หรือ row ก็กำหนดค่า columnspan หรือ rowspan เข้าไป สุดท้ายถ้าต้องการให้ชิดซ้าย ขวา บน ล่าง ก็ใช้ sticky กับค่าทิศทางแทน W E N S

เช่น
L1 = Label(root, text="กรอกชื่อฐานข้อมูล" )
L1.grid(row=0, column=0, sticky = W)
หมายถึง วาง Label ไว้ที่ แถวที่0 สดมภ์ที่ 0 และชิดทางซ้ายมือ

วาง Widgets ตามตำแหน่งที่ต้องการ ด้วยการระบุ row และ column





เพิ่ม sticky




เพิ่มการ columnspan



ตัวอย่าง source code งับ




 

Create Date : 02 พฤษภาคม 2554    
Last Update : 2 พฤษภาคม 2554 17:31:21 น.
Counter : 2486 Pageviews.  

Python ติดต่อฐานข้อมูล Access

ตอนนี้มาเรื่องฐานข้อมูลกันบ้าง ฐานข้อมูลที่ชอบใช่กันก็พวก ms access
mysql sqlite แต่วันนี้เอา ms access ก่อนดีกว่า
source code คลิ๊กเลย




มาเริ่มกันเลย อย่างแรกต้อง download module "pyodbc" มาติดตั้งก่อน
จากที่นี้เลย ไซด์นี้เลย //code.google.com/p/pyodbc/ หรือ d/l ตรงก็ที่นี้pyodbc

เมื่อติดตั้งเสร็จ ทดสอบ ลองพิมพ์คำสั่ง import pyodbc ถ้าไม่ error ก็แปลว่าติดตั้งใช้งานได้แล้ววว

ผมได้สร้างฐานข้อมูล MS Access ชื่อ school และมี table ชื่อ student
มีสาม Fields คือ ID FName LName : เลขประจำตัว ชื่อ นามสกุล ตามลำดับ

ต่อไปมาสู่การเขียน code
import pyodbc
เรียกใช้ module pyodbc

db = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=school.mdb')
ทำการเชื่อมต่อฐานข้อมูลโดยระบุ driver
DRIVER={Microsoft Access Driver (*.mdb)};

และบอกที่อยู่ของฐานข้อมูล access เช่น ฐานข้อมูลอยู่ที่
d:homepythondbschool.mdb ก็เขียนแบบนี้
DBQ=d:homepythondbschool.mdb
แต่ในที่นี้เพื่อง่ายเลยให้โปรแกรมกับฐานข้อมูลอยู่ที่เดียวกันเลยกำหนดเป็น
DBQ=school.mdb

ถ้าฐานข้อมูลมี password ก็กำหนด
UID=admin;PWD=xxx
เราจะคั่นข้อมูลด้วยเครื่องหมาย ; นะครับ
แต่ในที่นี้ไม่มีpass เลยไม่ใส่

เมื่อติดต่อได้แล้ว ก็เรียก method cursor เพื่อสร้าง object cursor ทำให้เราสามารถใช้คำสั่ง sql ได้ ผ่าน method execute และอ่านข้อมูลที่ query ผ่าน method fetchall อีกทั้งอ่านข้อมูล schema ของ table ได้ด้วย เป็นต้น

cursor = db.cursor()
cursor.execute("select * from student")
rs = cursor.fetchall()

มาถึงคำสั่งนี้ เราก็ได้ข้อมูล student มาเก็บที่ตัวแปร rs แล้ว (ตั้งชื่ออื่นก็ได้น่า แต่ติดมาจาก vb ที่ย่อมาจาก recordset)
การเรียกข้อมูล ก็ทำตามนี้
for row in rs:
disp.insert(INSERT,row[0]+ "t" + row[1] + "t" +row.LName+"n")

โดยเรียกข้อมูลที่ละ แถว(row) มาแสดง โดยระบุ index เช่น
row[0] หมายถึง ID
แต่ถ้าเราจำ index ไม่ได้ ก็ให้ระบุเป็นชื่อ Field ได้เหมือนกัน เช่น
row.LName

เมื่อแสดงเสร็จ ก็ปิด ฐานข้อมูลด้วยคำสั่ง
db.close

ในตัวอย่างนี้เราใช้ GUI Text เพื่อแสดงข้อมูล
root = Tk()
disp = Text(root)
disp.pack()

และแสดงข้อมูลด้วยคำสั่ง
disp.insert(INSERT,row[0]+ "t" + row[1] + "t" +row.LName+"n")
จากที่อธิบายข้างต้น ตรง row.LName จะเปลี่ยนเป็น row[2] ก็ได้นะครับ

สุดท้าย web python ดีๆ ที่ใช้ศึกษา ก็ที่นี้เลย //www.tutorialspoint.com/python/




 

Create Date : 16 เมษายน 2554    
Last Update : 16 เมษายน 2554 20:46:56 น.
Counter : 4205 Pageviews.  

Python ทดลองเขียนโปรแกรมเครื่องคิดเลข บวก ลบ ตอนที่2

ครั้งที่แล้วเป็นการเขียนโปรแกรมให้แสดงตัวเลขที่กด
ต่อไปเรามาเขียนโปรแกรมในส่วน การกดเครื่องหมาย บวก ลบ และ เท่ากับ
เพื่อง่ายต่อการเขียนโปรแกรม เราจะบวก ลบเลข เพียง สองจำนวนเท่านั้นนะครับ
ดังนั้นจะม่ีข้อมูลตัวเลข ชุดที่1 แล้ว เครื่องหมายบวก หรือลบ และตามด้วยตัวเลขชุดที่2 เช่น
50+60 ข้อมูลจะถูกเก็บใน list1 = ['50', '+', '60']

การอ้างข้อมูลใน list ก็ใส่ index ให้มัน เช่น
list1[0] = '50'
list1[1] = '+'
list1[2] = '60'

การเพิ่มข้อมูลเข้าไปใน list จะใช้ method append เช่น
list1.append('7') จะใส่ข้อมูล '7' เข้าไปต่อท้าย list1 ผลลัพธ์ ก็จะเป็น
['50', '+', '60', '7']

การกำหนดการเริ่มต้นของ list ก็ใช้ list1 = []

อีกสิ่งที่ต้องควรรู้คือ ตัวแปรแบบ global เพราะมีการใช้ตัวแปร tmpStr และ list1 ภายใน function (def) จึงต้องประกาศตัวแปรแบบ global ดังนี้
global list1
global tmpStr

ต่อไปเรามาดูรายละเอียดของ ฟังก์ชั่นกัน
def callbackPM(str): เมื่อกดเครื่องหมาย บวก หรือลบ จะเรียกฟังก์ชั่นนี้
global list1 ประกาศตัวแปรแบบ global
global tmpStr

disp['text'] = disp['text']+str
print tmpStr
print str
list1.append(tmpStr) เก็บตัวเลขชุดที่ 1ใส่ใน list1
list1.append(str) เก็บเครื่องหมาย บวก หรือ ลบ ในlist1
print list1
tmpStr ="" clear tmpStr เพื่อเก็บค่าตัวเลข ชุดใหม่


def cal(): เมื่อกดเครื่องหมายเท่ากับ จะเรียกฟังก์ชั่นนี้
global list1 ประกาศตัวแปรแบบ global
global tmpStr
list1.append(tmpStr) เก็บตัวเลขชุดที่ 2ใส่ใน list1
result = 0
if list1[1] == '+': ตรวจสอบถ้าเป็นเครื่องหมายบวก ก็บวกกัน
result = int(list1[0])+int(list1[2])
elif list1[1] == '-': ตรวจสอบถ้าเป็นเครื่องหมายลบ ก็ลบกัน
result = int(list1[0])-int(list1[2])

disp['text'] = str(result) แสดงผลลัพธ์
list1 = []
tmpStr = str(result)

print list1
print tmpStr

code เต็มๆ download ตรงนี้ครับ




 

Create Date : 15 เมษายน 2554    
Last Update : 15 เมษายน 2554 22:03:36 น.
Counter : 3682 Pageviews.  

1  2  3  4  5  6  7  

wink99_th
Location :
พิษณุโลก Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]




New Comments
Friends' blogs
[Add wink99_th's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.