VFP¸ê®Æ®w¤Jªù¤Î«áºÝ¸ê®Æ®w(postgresql,mysql)

¥»¤H¬O¥Ñfoxpro(dosª©)Âରwindows(vfp),ÁÙ¦n¨S¦³³Q²^¨O,¥Ñ©ó°Ñ¦Ò¤å¥ó¸ê®Æ¦³­­(®ÑÄy«Ü¤Ö),ÁöµMµ{¦¡ÁÙ¬O·|¼g,¦ý¬O¦³¨Ç¥\¯à³£ ¨S¦³¥Î¨ì,¦Ó¹ê¨Ò¤]¤£¦h,«á¨Ó¸I¨ìvfp·í«eºÝ¿é¤J¤¶­±,¦Ósql¬°«áºÝ,ª½±µ¨Ï¥Î³s½u«ü¥O,«h·|³Qsql«ü¥O·Ð¦º,³o¼Ëªº±¡ªp¤w¸g3,4¦~,¤]´N¬O»¡§Ú ¸I¨ì¤F²~ÀV,¦ý¦b¤@¦¸ªº´ú¸Õ,Åý§Úı±o¤§«eªº¤u§@³£¬O¥Õ¶O¤F,«D±`²³æ¤u§@³Q§Ú½ÆÂø¤Æ,¦]¦¹±N¨ä¼g¤U,ÁöµM¹ï§O¤H¥i¯à¬O«Ü²³æ,¦ý¹ï§Ú¨ÓÁ¿¥i¬Oªýê¦n´X¦~ ªºÃö¥d
¥»¤å°Ñ¦Òvfp8.0ªºhelpÀÉ

¦bvfpªºdbc¬Ovfp³Ì­«­nªº ¥\¯à¤§¤@(³o¬O¥²½mªº¥\,·|¦¹¤~¯à¦Û¥Ñªº¹B¥Î¸ê®Æ®w)
­º¥ý¦bvfpªº¸ê®Æ®w¦³¤@ºØdbc ªºª«¥ó¥D­n¥]§t¤F
¸ê®Æ®wªí®æ-¤@­Ó¥»¦adbfªºÀÉ®×,³o¬O¤º©w¤ä´©ªº¸ê®Æªí®æ
¥»¦a¸ê®Æ¶°-local view(¥Ñ¥»¦aªº¸ê®Æ®wÀɮשάO»·ºÝ¸ê®Æ¶°©Ò²£¥Íªº°²ªº¸ê®Æ®w)
»·ºÝ¸ê®Æ¶°-remote  view (¥Ñ»·ºÝ¸ê®Æ®w©Ò²£¥Í°²ªº¸ê®Æ®w)

­ì¥»¬Ý¨ì¤W­z¨S¦³Ä±±o©M¨ä¥¦ªºsqlªº»¡©ú¤å¥ó¦³©Ò¤£¦P,¦ý¤£¦P´N¦b³oùØ
»·ºÝ¸ê®Æ¶°-¬O¥i¥H³z¹Lodbc¨Ó¦s¨ú»·ºÝªº¸ê®Æ®w,¦X¨Ö¤£¦Pªºªí®æ¦¨¬°³æ¤@ªí®æ,¦ý­«ÂI¬O³o­Óview¸ê®Æ®w¬O¥i¥H¨Ï¥Îsql«ü¥O¾Þ§@,·s¼W¡B­×§ï¡B§R °£,¤]´N¬O¥¦¹ï§A¨Ó»¡¬O¤@­Ó¥»¦aªºªí®æ,§A¥i¥Hª½±µ¨Ï¥Î¥»¦aªº©R¥O¨Ó­×§ï¥¦,¦Ü©ó¦^¼g¨ì»·ºÝªº¸ê®Æ®wªº°Ê§@°£¤F¥D­n³]©w¸ê®Æ®w½w½Ä¼Ò¦¡3,5¤Î¨â­Ó¥D­n©R ¥Otableupdate(),tablerevert(),§A¥i¥H±Mª`¦b¥»¦aªí®æªº¾Þ§@,¦Ó§Ñ°O»·ºÝªí®æªº¦s¦b,¤£¥Î¶O¤ß³B²z»·ºÝªí®æªº«ü¥O

¦Ólocal view¦³¤°»ò¤£¦P©O?¨ä¥D­nªº¤£¦P¬O¸ê®Æ®wªº¨Ó·½¬O¥»¦aªºdbfÀÉ

#¦bsql¦øªA¾¹¤Wcreate view·N¨ýµÛ§A¥u¯à¬d¸ß(¨ú¦^ªº¸ê®Æ¬O°ßŪªº),¦ý¦bVFPªºview¬O¥i¥H³]¬°¥i¼gªº,¦Ó¦b§ó·s§¹²¦«á,¥¦·|¦Û°Ê¼g¦^sql¦øªA¾¹

view³]©w¥i¼g¤J¤Î¤£¥i¼g¤J
¦b§ó·s±ø¥ó¤º¡A±Nµo°esql§ó·s¥´¤Ä¡A¥t¥~§A¥i¥H¬Ý¨ì¦³¤@­Ó¹]µ§ªº¹Ï¥Ü¥Nªí¸ÓÄæ¦ì¬O§_¥i¼g¤J¡A¤£¥´¤Ä¥Nªí°ßŪ.
¦A¨Ó¬O¦Ò¼{sql where¤l¥y,§Ú­Ì¥H¹ê¨Ò¨ÓÁ¿
¤@¯ëªí®æ¥i¥H¦¨¤GºØ
1.¦X¨Ö¤£¦PªºÄæ¦ìÅܦ¨¤@key,¥i¥H¦¨¬°¤£¥i­«½Æ©Êªº°O¿ý
2.¥i­«½Æ©Êªº°O¿ý,¨Ò¦p¤@­Ó«È¤á¥i¥H¶R«D±`¦h¤£¦Pªº³f«~,¦Ó¦PºØ°Ó«~¥i¥H¦p¤U
   ­ì¤lµ§-10¤ä
   ­ì¤lµ§-10¤ä
   ¾ó¥ÖÀ¿-2­Ó
¦Ò¼{2.·í«È¤á­×§ï¦p¤U
   ­ì¤lµ§-12¤ä
   ­ì¤lµ§-10¤ä
   ¾ó¥ÖÀ¿-2­Ó
·Ó¶¶§Ç,§A§P§O¬O­×§ï²Ä¤@µ§ªº­ì¤lµ§,¦ý¬O¦b¸ê®Æ®w¨ÃµLªk±oª¾¬O¨º¤@­Ó,¦ý¬O¬JµM¦p¦¹©w¸qªí®æ¨º´N¬Oªí¥Ü­×§ï¥ô¦ó¤@­Ó³£¥i¥H,¥u­n¤º®e¬Û¦P´N¦n¤F,¦¹®É¦b sql where¤l¥y¤Îkey³¡¤À­n³]¦n§_«h¸ê®Æªº§ó·s,·s¼W,§R°£µ¥·|¥X¿ù,¥¦¤£¦P©ó¥»¦a¸ê®Æ®w¥i¥Hª½±µ«ü©w­×§ï©Î§R°£ªº°O¿ý©Ò¦bµ§¼Æ,¥Ñ©ó¥»±ø¥óµLªk¦X¥G©Ò ¦³ªº­n¨D,¦³®É­n°t¦X"§ó·s¨Ï¥Î",(¥ýdelete¦Ainsert),¹ï¦hµ§®É³Ì¦n¨Ï¥Î³o­Ó¥\¯à
update «ü¥O¦b«È¤á¬Û¦P,³fª«¬Û¦P,¼Æ¶q¤£¦P
SQL WHERE ¤l¥y
®Ú¾Úsqlªº»yªk,sql where ¬O«ü¥OÅܧ󪺱ø¥ó(­ì¤åªºhelp»¡©ú¸Ñͤ¤»¡°»´ú¦³¨S¦³¤HÅܧó¹L,¤£À´¥¦¦b»¡¤°»ò)
1.¶ÈÁä­È
2.Áä­È¤Î¥i§ó·sªº
3.Áä­È¤Î¤wÅܧóªº(¹w³])
4.Áä­È¤Î®É¶¡stamp
§Úªº»¡©ú¬O:
UPDATE ªí®æ¦WºÙ  ³]©wÅܧóªºÄæ¦ì  where±ø¥ó
·í±ø¥ó³]¿ù¤F«h§ó·sªº°Ê§@¤]´N¿ù¤F


¨ä¥¦¨Æ¶µ
1.­n«Ø¥ßremote view ­n¥ý¶}±Ò¤@­Ó¸ê®Æ®w
  open database .....
2.¦A¶}±Ò©Î«Ø¥ß¤@­Óconnection
  create connections
2.³Ì«á«Ø¥ßview
  create sql view

¦b¸ê®Æ®w¤¤¬Y¤@¨ÇÄæ¦ì·|°Ñ¦Ò§Oªºªí ®æ
³æ¯Âªº°µªk
¦b¸ê®ÆÀô¹Ò¤¤¥[¤J¦h­Óªí®æ,¤£¥²Ãö³s,
¨Ï¥ÎLOCATE ªº©R¥O
1.¦bÄæ¦ì¿é¤J«áÅçÃÒ(VALID)
2.¦b¦³ÅܰʮÉÅçÃÒ(INTERACTIVE CHANGE EVENT)
­ì©lªí®æªº¯Á¤Þ¥h¨ºùØ?
¨Ï¥Îcreate sql view ©Î¬Osqlexec()ªº©R¥O,¬d¸ß¦^¨Óªº¸ê®Æ®w¨Ã¤£¥]§t¯Á¤Þ,¤]´N¬O»¡¦pªG§A¦³¤Þ¥Î¨ì¯Á¤Þ­n¦Û¤v«Ø¥ß,¤]´N¬O»¡¨ä¹ê¬O¨â­Ó¤£¦P¸ê®Æ®w(»·ºÝ¤Î¥»¦a),¦] ¦¹¯Á¤Þ¤£¥i¯à¬Û¦Pªº,§ì¦^¨Ó¤]¨S¦³°Ý

¦b»·ºÝ¸ê®Æ®w¦³¤@­Óªí®æ¥]§t¤F¤T­Ó Äæ¦ì
create table blentry (bl_no char(12) primary key,port char(3),port_name char(30))
§Ú¨Ï¥Îcreate view wizard ,«Ø¥ßkey bl_no,¨C¤@­ÓÄæ¦ì³£¥i¥H³Q§ó·s,¬d¬Ý¥¦ªºsql«ü¥O¦p¤U
SELECT *;
 FROM ;
     public.blentry Blentry

DBSetProp(ThisView,"View","SendUpdates",.T.)
DBSetProp(ThisView,"View","BatchUpdateCount",1)
DBSetProp(ThisView,"View","CompareMemo",.T.)
DBSetProp(ThisView,"View","FetchAsNeeded",.F.)
DBSetProp(ThisView,"View","FetchMemo",.T.)
DBSetProp(ThisView,"View","FetchSize",100)
DBSetProp(ThisView,"View","MaxRecords",-1)
DBSetProp(ThisView,"View","Prepared",.F.)
DBSetProp(ThisView,"View","ShareConnection",.F.)
DBSetProp(ThisView,"View","AllowSimultaneousFetch",.F.)
DBSetProp(ThisView,"View","UpdateType",1)
DBSetProp(ThisView,"View","UseMemoSize",255)
DBSetProp(ThisView,"View","Tables","public.blentry")
DBSetProp(ThisView,"View","WhereType",3)

DBSetProp(ThisView+".bl_no","Field","DataType","C(12)")
DBSetProp(ThisView+".bl_no","Field","UpdateName","public.blentry.bl_no")
DBSetProp(ThisView+".bl_no","Field","KeyField",.T.)
DBSetProp(ThisView+".bl_no","Field","Updatable",.T.)

DBSetProp(ThisView+".port","Field","DataType","C(3)")
DBSetProp(ThisView+".port","Field","UpdateName","public.blentry.port")
DBSetProp(ThisView+".port","Field","KeyField",.F.)
DBSetProp(ThisView+".port","Field","Updatable",.T.)

DBSetProp(ThisView+".port_name","Field","DataType","C(30)")
DBSetProp(ThisView+".port_name","Field","UpdateName","public.blentry.port_name")
DBSetProp(ThisView+".port_name","Field","KeyField",.F.)
DBSetProp(ThisView+".port_name","Field","Updatable",.T.)

¦h­Óªí®æªºremote view
§Ú·Q¨Ï¥Î¦h­Óview
blentry (bl_no c(12),port c(3),port_name c(5))
port    (port c(3),port_name c(5))
¨ä¤¤blentry.port ¬O¤Þ¥Î¦Ûport.port(¤]´N¬Oport.port¥²¶·¦s¦b,blentry.port¤~¥i¥H¨Ï¥Î)
¦P²zblentry.port_name¤Þ¥Îport.port_name
¦p¦ó³]©w¸ê®Æ®w©O?
½Ð¤£­n¦b«Ø¥ßremote view¥[¤J³o¨â­Óªí®æ¨Ã¥[¤JÃö³s,·|²£¥Í¤U­±°ÝÃD:
¦pªG¬O·s¼W,¥¦·|¦P®É·s¼W¨â­Óªí®æ,©M§Aªº»Ý¨D¤£¤@¼Ë,§A½Ð·|§ó·s¤@­Óªí®æ
¨º­n¦p¦ó°µ¤F
¦bformªº¸ê®ÆÀô¤¤¥[¤Jview(blentry,port),¦p¦¹§A¥i¥H¦P®É¨Ï¥Î,¨äÃö³s´N¤£¥Î³]©w¤F,¦Û¤v¤U«ü¥O´N¥i¥H¤F

combo(¤U©Ô¥Ü¿ï³æ)
§A±`·|¸I¨ì¦p¤W­zªºª¬ªp,¦ý¤Þ¥ÎªºÄæ¦ì·Q­nª½±µÅã¥Ü¥X¨Ó

¦b¤W¹Ïport´N¬Ocombo,§Ú·Q­n¥¦Åã¥Üblentry.port
¦ý¥i¥H¿ï¾Ü¬O¥Ñport.portªº¶µ¥Ø
³]©w¤T­Ó°Ñ¼Æ
ControlSource =blentry.port
RowSource     =port.port
RowSourceType =6-fields
                   
ControlSource=¸ê®Æ¨Ó·½

RowSource=¥»¿ï¶µªº¨Ó·½
RowSourcetype=¦p¤Uªí,¤@¯ëªº®Ñ³£¦³
RowSourceType Source of the List Items
0 None. Programmatically add items to the list.
1 Value
2 Alias
3 SQL Statement
4 Query (.qpr)
5 Array
6 Fields
7 Files
8 Structure
9 Popup. Included for backward compatibility.

¥»¨­¦³¨â­Ó¨ç¦¡Additem(),removeitem()
¨ç¦¡ADDITEM("¶µ¥Ø¦WºÙ")
¨ç¦¡REMOVEITEM(¶µ¥Øªº¦¸¼Æ)
®Ú¾Ú¤W­zcomboªº³]©w
¨Ã¦bcombo.interactiveChange,¤¤¥[¤J¤U­zµ{¦¡½X,«h¥t¤@­ÓÄæ¦ì´N·|®Ú¾Ú§Aªº¿ï¾Ü¦ÓÅܧó¤F
Select port
Locate For  port.port==this.value
If Found()
    thisform.blentry.port_name1=port.port_name
    Thisform.refresh
    WAIT WINDOW "§A¦³§ïÅÜ"
Endif

¦A¨Ó´N¬O¦h¹ï¦hªºªí®æ
¤@­Óform¦³¦h­Ó¸ê®Æ®w¤Î¤@­Óªí®æ
®Ú¾ÚformºëÆF,²£¥Í¤@¹ï¦hªí³æ,À˵ø¨ä¸ê®ÆÀô¹Ò,¤]¬O¨S¦³ª½±µ³]©wÃö³s,¦]¦¹¨ä¥i¯à¬O¨Ï¥Îset filterµ¥«ü¥O
¥Ñ©ó¤@¹ï¦hªí³æ,¦³®Éfrom wizard ¦b·s¼W¸ê®Æ°O¿ý®É·|¤£ª¾·s¼W¨º¤@­Ó,¦]¦¹¤j³¡¥÷¬O¤£¯à¨Ï¥Î,­n¦Û­q
°Ñ¦Òwinziard
grid
RowSource     =blfreight
RowSourceType =1-Alias
column1
controlsource = blfreight.bl_no
column2
controlsource= blfreight.total
¤W­z¬O§Ú­Ì¦bgridªº³]©w­ì«h
¦A¨Ó´N¬O¦Û©w·s¼W§R°£§ó·sÀx¦sµ¥«ö¶s

¸ê®Æªí®æ½w½Ä³B²z¼Ò¦¡
0-¤£³]©w½w½Ä³B²z
1-¨Ï¥Î¹w³]
2-«O¦u¼Ò¦¡(°O¿ý),½s¿è®ÉÂê¦í,¦pªG°O¿ý«ü¼Ð¨S¦³²¾°Ê,¥i¥H¨Ï¥ÎTABLEREVERT()´_­ì,TABLEUPDATE()§ó·s
3-¶}©ñ¼Ò¦¡(°O¿ý),½s¿è®É¤£Âê¦í,¦pªG°O¿ý«ü¼Ð¨S¦³²¾°Ê,¨ä¥¦¦P¤W
4-«O¦u¼Ò¦¡(ªí®æ),½s¿è®É©Ò¦³ªº°O¿ý§¡·|Âê¥ô,¨Ï¥ÎTABLEUPDATE()¨Ó§ó·s,TABLEREVERT()´_­ì
5-¶}©ñ¼Ò¦¡(ªí®æ),½s¿è®É©Ò¦³ªº°O¿ý§¡¤£·|³QÂê¦í,¨ä¥¦¦P¤W

¤]´N¬O2,3¦b°O¿ý«ü¼Ð²¾°Ê®É·|¼g¦^¸ê®Æªí®æ,¤@¯ë§Ú¬O¨Ï¥Î5

¦b¨Ï¥ÎFORM WIZARD®É,°O±o¦³¨Ï¥ÎSELECT,¤§«á¥²¶·¤Á¦^­ì¨Ï¥Îªí®æ,§_«h,¨ä²£¥Íªº«ö¶s,·|·s¼W¨ì¿ù»~ªºªí®æ

¹ê§@¤@­Ó¤p«¬¸ê®Æ®w
(server:postgresql for linux) ¤½¥q(ªí®æªº·s¼W¾Þ§@µ¥..¨Ï¥Îpsql,phppgadmin,webmin,pgadmin3)
(server:mysql for windows )   ®aùØ(ªí®æªº·s¼W¾Þ§@µ¥..¨Ï¥Îmysqlcc)

¥|­Ó¥D­nªí®æ,¤T­Ó¤p«¬ªí®æ(¥N½Xªí)
§Ú¥H²î°È¤è­±ªº¸ê®Æ®w¨Ó¹ê§@(§Ú²¤Æ³o¨Çªí®æ,¥H«K¯à²M·¡ªº»¡©ú)
v_schedule
vvd      c(12) ²î¦W¯è¦¸
port     c(3) ´ä¤f½X
on_board date ¸Ë²î¤é
blentry
vvd       c(12) ²î¦W¯è¦¸
bl_no     c(12) ´£³æ¸¹½X
port      c(3) ´ä¤f½X
port_name c(30) ´ä¦W
mark  text   ³ÁÀY
desp  text   «~¦W
freight
vvd   c(12) ²î¦W¯è¦¸
bl_no c(12) ´£³æ¸¹½X
p     float   ¥ý¥I
c     flaot   ¹w¦¬

container
vvd    c(12)   ²î¦W¯è¦¸
bl_no  c(12)   ´£³æ¸¹½X
type   c(4)    Âd«¬
qty    integer Âd¼Æ


v_code
code   c(3)  ²î²í¥N½X
name   c(30) ²î¦W
p_code
code   c(3)  ´ä¤f½X
name   c(30) ´ä¦W
c_code
code  c(4)  ³fÂd½X
name  c(30) »¡©ú
«Ø¥ßªí®æ
create table v_code (code char(3) primary key,name char(30))
create table p_code (code char(3) primary key,name char(30))
create table c_code (code char(4) primary key,name char(30))
create table v_schedule (vvd char(12) primary key,port char(3),on_board date)
create table blentry (vvd char(12),bl_no char(12),port char(3),port_name char(30),mark text,
                      desp text)
create table freight (vvd char(12),bl_no char(12),p float,c float)
create table container (vvd char(12),bl_no char(12),type char(4),qty integer )
ª`·N:¦bsever«Ø¯Á¤ÞÁä¬O¥Î¨Ó¥[§ÖserverºÝªº´M§ä³t«×,¤£¬O¥Î¦b clientºÝ,¦pªGclient­n¥Î«h­n¦Û¤v¥Î


v_schedule(²î´Á)
blentry(´£³æ¤º®e)
freight(´£³æ¶O¥Î)
conainer(´£³æÂd¤l)


blentry->v_schedule¬O¤@¹ï¦h
freight->blentry¬O¤@¹ï¦h
conainer->blentry¤]¬O¤@¹ï¦h
¥N½XÀɪº³]©w«D±`²³æ
¦A¨Ó´N¬Ov_schedule

§Ú­Ì­n²£¥Í¦p¤W¹Ï
·í¿é¤Jvvd1«h¥kÃälabelª«¥óv_name·|±a¥Xv_code.name
·í¿é¤Jport«h¥kÃälabelª«¥óport_name·|±a¥Xp_code.name
1.refresh:°w¹ï¤@¶i¤J³o­Óµe­±©Ò®ÉlabelªºÅã¥Ü
2.valid:°w¹ï¦b¤¬°Ê®ÉlabelªºÅã¥Ü
¦Ü©ócombo(port)½Ð°Ñ¦Ò¤W­±

¦Û©wªí®æ,§Ú­Ì¨Ï¥Îwizard·| ²£¥Í¤W­zªº«ö¶s

¦h­Ó³æ¤@ªí®æªºfrom°ÝÃDÃD
³oùØ­nÁ¿¤@­Ó§Þ¥©,¦]¬°§Ú­Ì±`·|¥u¦³¨Ï¥Î¤@­Ófrom¨Ó½s¿è¤@­Óªí®æ,¦p¤@¯ë¥N½Xªí®æ,¸g´ú¸Õªºµ²ªG,§Ú½T«H¤U­±¬O³Ì¦nªº³B²z¤èªk
 
¦@¦³¥|­Ó¥D­n¤¸¥ó
1­Ópageframe(³oùئ@¦³9­¶,·íµM­n®Ú¾Ú§Aªº°ò¥»¥N½XÀɦ³´X­Ó¨Ó§ïÅÜ)
1­Ógrid     (¤£«ü©w¥ô¦órecordsource,¥Î³~Åã¥Ü¦hµ§¸ê®Æ,°ßŪ)
2­Óbutton group (­«ÂI¦b½s¿èbutton,«e¤T­Ó·|«ö¤U¥h·|±a¥h¯u¥¿ªº½s¿èµøµ¡,Ãþ¦ü¤U­±
 

§Ú¤w¸g±Nµ{¦¡Â²¤Æ,¦]¦¹©Ò¥Î¨ìªº¨Æ¥ó«Ü¤Ö
­«­nªº¨Æ¥ó
form1.show()  -³]©wgrid1ªºªì©lªºÅã¥Ü
form1.pageframe1.click()  -¤Á´«¤£¦Pªº¸ê®Æ®w,¨ÃÅܧógrid1¤ºªº¸ê®Æ¨Ó·½¤ÎÄæ¦ìªº¦WºÙ
form1.buttongroup1.click() -½s¿è,±a¥X½s¿èµøµ¡
form1.buttongroup2.click() -¤Á´«°O¿ý

form1.show()¤º®e(¤£¤@©w­n¨Ï¥Î,·í²Ä¤@­Óªí®æªºÄæ¦ì¼Æ¤j¹L¨ä¥¦ªí®æ¥i ¥H¦bgrid1ªº°Ñ¼Æ³]©w)
select ªí®æ¦WºÙ
#¦Û°Ê³]©wÄæ¼e,ªÅªºªí®æ½Ð¤£­n³]
#thisform.grid1.autofit()
#¦]¬°Äæ¦ì¼Æ¦b¤Á´«®É¦pªG¦³¤j¦³¤p,¥i¯à·|µLªkÅã¥ÜÄæ¦ì¤º®e,¦]¦¹§Ú¥²¶·¨Ï¥Î¦Uªí®æ¤ºªº³Ì¤jÄæ¦ì¼Æ,¨Ò¦p:11
thisform.grid1.columncount=11
#²MªÅÄæ¦ì©ïÀY
for i=1 to 11
    with thisform.grid1
         .columns(i).header1.caption=""
    endwith
endfor

with thisform.grid1
     #³]©w
     #³]©wÄæ¦ìªº©ïÀY
     .column1.header1.caption="©ïÀY"
     .......

endwith
thisform.grid1.refresh

Thisform.pageframe1.click()
#³oùØ©M¤W­z«Ü¹³,¥u¬O¦h¤F9­Ócase,·íµM¥i¥H®Ú¾Ú§Aªºªí®æ¨Ó©w
do case
case this.activepage=1
     select ªí®æ1
     thisform.grid1.recordsource=ªí®æ1
     for i=1 to 11
         with thisform.grid1
              .columns(i).header1.caption=""
         endwith
     endfor
      *³]©wÄæ¦ì©ïÀY
      with thisform.grid1
           .column1.header1.caption="©ïÀY"
           ......
      endwith
case this.activepage=2
     select ªí®æ2
.....
endcase
thisform.grid1.refresh

form1.buttongroup1.click()
*¶i¤J½s¿è¼Ò¦¡
*·|±N§A«ö·s¼W(1),­×§ï(2),§R°£(3)¶Çµ¹¸Óªí®æ
ACTIVEPAGE=THISFORM.pageframe1.ACTIVEPAGE
*·s¼Wor­×§ïor§R°£or¬d¸ß
IF THIS.VALUE==4
   THISFORM.RELEASE
ELSE
    DO CASE
    CASE ACTIVEPAGE=1
        DO FORM "¥»ªí®æªºform" WITH THIS.VALUE
    CASE ACTIVEPAGE=2
    ........
    CASE ACTIVEPAGE=9
        DO FORM "¥»ªí®æªºform" WITH THIS.VALUE
    ENDCASE
ENDIF
GO TOP
THISFORM.grid1.REFRESH
²{¦b§Ú­Ì¬d¬Ý¤lfromªº¨Æ¥ó,°²³]¤lfrom¦WºÙsubform
¥Ñ©ó³q±`²Ä¤@­ÓÄæ¦ì¬O¥DÁä¦]¦¹¦Ò¼{¦p¤U
1.·s¼W:¥þ³¡³£¥i½s¿è
2.­×§ï:²Ä¤@­ÓÄæ¦ì¤£¥i½s¿è,¨ä¥¦§¡¥i½s¿è
3.§R°£:¥þ³¡¤£¥i½s¿è
form1.init()
PARAMETER STATUS
public t_status
t_status=status
if status=1
   append blank
endif


form1.activate()
*³]©w¬O§_¥i¥HÄæ¦ì¬O§_¥i¥H­×§ï
do case
   case t_status=1
   *·s¼W
   with this
   .¦WºÙ.ENABLED=.F.      
   .¦WºÙ.ENABLED=.T.
   ...
   endwith
   case t_status=2
   *­×§ï
   .....
   case t_status=3
   *§R°£
endcase
form1.buttongroup1.click()
do case
   case this.value=1
   *½T©w
    if t_status=3
       *§R°£
       delete
    endif
     =tableupdate()
   case this.value=2
   *Â÷¶}
     =tablerevert()
endcase
thisform.release
*¥H¤W§A¥i¥H®M¥Î¦b¤£¦Pªº¥N½X©w¸qªí®æ,«D±`¹ê¥Î

¸I¨ìªº°ÝÃD
1.°O¿ý²¾°Ê«ö¶s,µLªk¦bgridÅã¥Ü©Ò¦bªº°O¿ý
  ¦bªì©lgrid®É­n¨Ï¥Îselct ªí®æ
2.°O¿ý²¾°Ê«ö¶s,¦pªG°õ¦æ¹Ldeleteªº°Ê§@,µLªk¥¿±`°Ê§@,
  °õ¦æ­«·s¬d¸ß=requery()
3.­×§ïªí®æ«á°õ¦ætableupdate()«árequery(),·|¦³¿ù»~°T®§,§i¶D§A¸ê®Æ¤w¸gÅܧó,¦ý¥¼commit
  =tableupdte(),¥u§ó·s¥Ø«e©Ò¦bªº³æµ§°O¿ý,=tableupdate(.t.)¤~·|§ó·s¥þ³¡Åܧ󪺰O¿ý
4.¦h­Óform¤§¶¡ªº¤Á´«(form1->form2)­ì¨Ó°O¿ý©Ò¦b¤£¨£¤F....
  ±Nform2ªº¸ê®ÆÀô¹Òªº°Ñ¼Æ,auto close table ,auto open table³]¬°.F.