ซึ่งโปรแกรม นี้ ต้องลง .NET 2.0 Runtime ก่อน
โปรแกรม Iron Python โหลด ได้จาก http://www.codeplex.com/IronPython ขนาดไม่ใหญ่นัก ไม่เกิน 5 MB
แต่ อาจต้อง ติดตั้ง .NET 2.0 Redistribut ที่อาจตัวใหญ่หน่อย
หรือ ถ้า ได้ติดตั้ง VS.NET 2005 Express แล้วก็ไม่ต้อง ติดตั้ง Redistribut อีก
ตัว Ironpython สามารถ integrate เข้ากับ VS.NET ได้ ตามคู่มือ แต่ยังไม่ได้ทดลองทำ
ในตัวอย่าง นี้ลองเขียนด้วย notepad
และ run โดย ใช้
c:\>ipy db.py
โดย db.py จะเป็นไฟล์ที่เก็บ โปรแกรมนี้
ใน package ของ iron python อาจจะไม่มีข้อมูล วิธีการเขียน python นัก
แต่อาจหาได้ โดย อ่าน Help ของ Python 2.5 ที่โหลดและ ติดตั้งจาก http://www.python.org/
ตัวโปรแกรม จะทำหน้าที่ สร้าง Form และ สร้าง Control ตาม Table ตาม
Odbc DataSoure , Database ที่ใช้ เป็น MSAccess และดึงข้อมูล Table เข้า
สร้างเป้น Field Label , TextBox, ComboBox สำหรับ LookupTable ที่หน้าจอ
และ มีการ ผูก Event Click เข้ากับ Function
โค้ด มีดังนี้
import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") clr.AddReference("System.Data") import System.Windows.Forms as WForm import System.Drawing as Draw import System.Data as Data import System.Data.Odbc as Odbc import System.Console as Con class Form1(WForm.Form): def __init__(self): Con.WriteLine("OK") self.Text= "OK" self._mLeft = 175 self._mTop = 10 #self.BackColor= Draw.Color.White #self.addControls() self.addCtrlDb() @property def mLeft(self): return self._mLeft @property def mTop(self): return self._mTop # not use now def addControls(self): t = WForm.TextBox() t.Text= "dbApp" self.Controls.Add( t ) self.Size= Draw.Size(300 ,200) def getCon(self): str1 = "DSN=spt_import_cd"; self.dbg(str1) cn = Odbc.OdbcConnection(str1) cn.Open() self.dbg(" ConnectOK") return cn def getDt(self,sql): cn = self.getCon() da = Odbc.OdbcDataAdapter(sql , cn) dt = Data.DataTable() da.Fill(dt ) return dt def readToCombo(self ,combo ,sql , fldvalue , flddisplay): dt = self.getDt(sql) for r in dt.Rows : disp = r[flddisplay] + '' combo.Items.Add ( disp ) def addCtrlDb(self): cn = self.getCon() sql = "select * from cd WHERE idcd = 0 " da = Odbc.OdbcDataAdapter(sql ,cn ) dt = Data.DataTable() row =da.Fill(dt ) cn.Close() #self.AddLabel( "TableCD") #self.NewLine() lookupwi = 300 maxwi = 0 for col in dt.Columns: self.dbg(col.ColumnName ) colname = col.ColumnName self.AddLabel( colname) if colname=="ProvID" : sql2= "Select * , ProvID & ':' & ProvName as ProvName2 from Province" wi =self.AddLookupCombo(colname,sql2,"ProvID","ProvName2",lookupwi) else: if colname=="WhEnvID" : sql2= "Select * , WhEnvID & ':' & Title as Title2 from WhEnvelope" wi =self.AddLookupCombo(colname,sql2,"WhEnvID","Title2" ,lookupwi) else: wi = self.AddTextBox(colname ) if wi > maxwi : maxwi = wi self.NewLine() self.dbg("ListColAndCloseOK") self.Height = self.mTop + 50 self.Width = self.mLeft + maxwi + 40 self.Text = "Table CD" bt = WForm.Button() bt.Text = "Close" bt.Left = self.mLeft bt.Top = self.mTop bt.Click += self.OnButtonClose self.Controls.Add( bt ) self.Height += bt.Height def AddLabel(self,name): lb = WForm.Label() lb.Name = "lb" + name lb.Left = 20 lb.Top = self.mTop lb.Text = name lb.AutoSize = True self.Controls.Add(lb) def AddTextBox(self,name): t = WForm.TextBox() t.Name = "tx" + name t.Left = self.mLeft t.Top = self.mTop self.Controls.Add(t) return t.Width def AddLookupCombo(self,name,sqlsel,fldValue ,fldDisp,wi): t = WForm.ComboBox() t.Name = "cblookup" + name t.Left = self.mLeft t.Top = self.mTop self.Controls.Add(t) t.Width = wi self.readToCombo(t ,sqlsel, fldValue ,fldDisp) t.DropDownStyle = WForm.ComboBoxStyle.DropDownList return t.Width def NewLine (self ): self._mTop += 23 def ListData(self,dsn): str1 = "DSN=" + dsn; self.dbg(str1) cn = Odbc.OdbcConnection(str1) cn.Open() self.dbg(" ConnectOK") cmd = cn.CreateCommand( ) cmd.CommandText = "SELECt * from cd " rd = cmd.ExecuteReader() while (rd.Read()): self.dbg(str(rd["idcd"]) + ' ' + rd["Title"]) pass cn.Close() self.dbg(" CloseOK") def dbg(self ,str1 ): #WForm.MessageBox.Show(str1) Con.WriteLine(str1) #def OnButtonClose(*arg ): def OnButtonClose(self ,ctrl, a ): self.Close() f = Form1() WForm.Application.Run( f) |
ปัญหา เท่าที่พบ คือ ไม่มี intellisense แต่ถ้าหากใช้กับ VS.NET และ มี Intellisense ได้
ก็น่าจะช่วยแก้ปัญหาได้
และ ปัญหาอีกอย่างที่พบ คือ Python หรือภาษาตระกูล นี้จะให้ความสำคัญกับ ย่อหน้ามากๆ
หาก มีการเปลี่ยนย่อหน้าหลายๆบรรทัดติดกัน การใช้ Editor notepad อาจไม่สะดวก
อาจใช้ editor ตัวอื่นๆ เช่น editplus แทน
และ พบว่า เราสามารถ compile code ของ iron python ให้เป็น .exe ได้
( แต่อาจต้อง ลง iron python ในเครื่อง ที่มี .exe นั้น ) โดย ทำตามขั้นตอนของ
การถามตอบ ดังนี้
http://lists.ironpython.com/pipermail/users-ironpython.com/2006-February/001825.html
|
หวังว่า สำหรับใครที่ลองดู จะทำให้ งานง่ายขึ้น
รูปโปรแกรม หลังรันกับ database ตัวอย่าง ( ไม่ได้ให้มา ในนี้ )
1 comment:
This phrase is simply matchless :), it is pleasant to me))) acheter levitra The excellent and duly message.
Post a Comment