 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
zfgg
註冊時間: 2004-05-31 文章: 179 來自: 中国
第 1 樓
|
發表於: 星期三 八月 11, 2004 4:27 pm 文章主題: 如何将grid中的数据(本地表.dbf)写到SQL数据库的表中 |
|
|
我正在研究grid。
我的想法是:在grid的某一个单元格中,加一个comboBox控件,ComboBox与数据表某字段捆定,当在comboBox控件中选中一个数据时,其它表格的单元格自动加入相应的值。其中有一个column6列。还有另外二个字段是空的,分别是column7列,column8列。我要在column7中填入数据后,自动与column6的值相乘,将积的结果自动显示在column8列中。然后再重复以上的方法。如果有多行,还要统计column8的和,并在表单的一个editbox控件中显示出来。
最后将grid的数据及其它的相关信息写到表中。
我现在研究的进展是:
不能在grid单元格的comboBox控件中选择数据,而是在表单中,单独放一个comboBox控件。在comboBox控件的keypress事件中,输入一个数据,从表中找出一个或第N个数据,将这个数据值增加(additem)到comboBox的列表中。在comboBox控件click事件中,选中某一个值时,将各个数据值存放到本地的一个临时表中。grid中即显示所选的数据。在“数量” 单元格(column7)中,填入数量后,回车,用数量乘以单价(column6),在另一单元格(column8)中显示结果(积),达到计算目的。同时,将各个的column8的和,累计放在一个editbox中。这些能运行通过。
删除grid中的某一条记录,用的deleted方法,进行标记。在删除按钮中的事件中,用
sele dluser
set delete on
sum ypjer to nTotal
thisform.text10.value=nTotal
thisform.grid1.recordsource="dluser"
thisform.refresh来实现。这种方法,只是不显示有删除标记的,实际上数据还在里面,用pack后,grid1呈现一空白。
附:
1,grid1的 init 事件:
thisform.command5.enabled=.f.
#INCLUDE sumahead.H
set exclusive on
use _path_loc+"dluser"
delete all
pack
set delete on
thisform.grid1.recordsource='dluser'
2, grid1的 deleted 事件:
LPARAMETERS nRecNo
publi _xmdm
if nRecNo => 1
if deleted()=.t.
thisform.command5.enabled=.f.
else
go nRecNo
_xmdm=xmdm
thisform.command5.enabled=.t.
endif
endif
3,combo1的krypress 事件:
LPARAMETERS nKeyCode, nShiftAltCtrl
if nKeyCode=13
#INCLUDE sumahead.H
handle=sqlconnect(SQLDSN_LOC,SQLUSER_LOC,SQLPWD_LOC)
_ypdm=alltrim(this.text)
cx="select xmdm,xmmc,pym,xmxgg,xmxdw,ykdj from wjbmms where pym=?_ypdm"
tf=sqlexec(handle,cx,'temp')
if tf>-1
select temp
if recc()>0
this.clear
for i =1 to recc()
go i
this.additem(xmdm+xmmc+pym+xmxgg+xmxdw+str(ykdj,10,2) )
endfor
this.displayvalue=this.list(1)
endif
endif
sqldisconnect(handle)
endif
4,combo1的click 事件:
#INCLUDE sumahead.H
public _xmdm,_xmmc,_pym,_xmxgg,_xmxdw,_ykdj
for icount =1 to thisform.combo1.listcount
if thisform.combo1.selected(icount)
select temp
go icount
_xmdm=xmdm
_xmmc=xmmc
_pym=pym
_xmxgg=xmxgg
_xmxdw=xmxdw
_ykdj=ykdj
*wait window str(_ykdj,10,2)
if !used('dluser')
use _path_loc+"dluser"
endif
select dluser
append blank
replace xmdm with _xmdm
replace xmmc with _xmmc
replace pym with _pym
replace xmxgg with _xmxgg
replace xmxdw with _xmxdw
replace ykdj with _ykdj
exit
endif
endfor
this.displayvalue=''
thisform.refresh
5,自定议的表单autocount事件:
LOCAL nAcCol,nReCol,nReRow,nCol6val,nCol7val
nAcCol=This.Grid1.ActiveColumn &&获得当前列
nReRow=This.Grid1.RelativeRow &&获得当前相对行
nReCol=This.Grid1.RelativeColumn &&获得当前相对列
IF nAcCol< This.Grid1.ColumnCount &&不到表格的列尾
This.Grid1.ActivateCell(nReRow,nReCol-1) &&-1=column6.text1.value.如果不-1, 都用第一个値的数相乘
nCol6val=thisform.grid1.column6.text1.value
nCol7val=thisform.grid1.column7.text1.value
thisform.grid1.column8.text1.value=nCol6val*nCol7val
thisform.text10.value=thisform.text10.value+(nCol6val*nCol7val)
nCol6val=0
nCol7val=0
Thisform.combo1.Setfocus
ELSE &&到达列尾,自动移动到第一列
Thisform.Grid1.Column1.Setfocus
This.Grid1.ActivateCell(nReRow,1)
ENDIF
Thisform.Refresh
6,在grid1.column7.text1 keypress事件中调用autocount事件:
IF nKeyCode=13
NODEFAULT
Thisform.Autocount
ENDIF
7, 删除grid1有标记的按钮事件:
if messagebox("现在要删除"+ _xmdm+",真的要删除吗?",36,"删除")=6
select dluser
set delete on
sum ypjer to _jiner
thisform.text10.value=_jiner
this.enabled=.f.
endif
thisform.refresh
ComboBox控件的additem的方法好象对字段的.null.值产生错误。下列语名运行时程序出错。
this.additem(xmdm+xmmc+pym+xmxgg+xmxdw+str(ykdj,10,2) )
其中的xmxgg与xmxdw是字符型。分别代表规格与单位。我试图重新赋值或用空字符串,都失败。
以上问题归纳起来有以下几个:
1、 在grid某一个单元格中加一个comboBox控件,要显示某一个字段的内容。若有N个,列表显示。其它的单元格显示相应的内容。
2、 如何将grid中的数据(本地表.dbf)写到SQL数据库的表中。
3、 如何删除grid中的某一条记录。使thisform.text10.value的值也相应减少。
4、 解决ComboBox控件的additem的方法中的.null.值错误。
5、 我目前用的上述方法,是否欠妥,还有没有更好的方法? |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|