PB开发笔记(6)

//如何用代码配置ODBC数据源
自动创建ODBC是基于对Windows注册表的直接写操作来实现的
步骤:
一、创建函数:
gf_create_odbc(string as_odbc_name,string as_odbc_type,string as_path)
string ls_key,ls_key1
ls_key    = 'HKEY_CURRENT_USER/Software/ODBC/ODBC.INI/'+as_odbc_name
ls_key1 = 'HKEY_CURRENT_USER/Software/ODBC/ODBC.INI/ODBC Data Sources'
if as_odbc_type = 'DBF' then
Registryset(ls_key,'Driver',"C:/WINDOWS/SYSTEM/PBDBF12.DLL")
Registryset(ls_key,'Description',"自动生成ODBC'")
Registryset(ls_key,'Database',as_path)
Registryset(ls_key,'CreateType',"FoxPro25")
Registryset(ls_key,'Locking',"RECORD")
Registryset(ls_key,'LockCompatibility',"Fox")
Registryset(ls_key,'FileOpenCache',"1")
Registryset(ls_key,'CacheSize',"4")
Registryset(ls_key,'DataFileExtension',"DBF")
Registryset(ls_key,'IntlSort',"C:0")
Registryset(ls_key,'UseLongNames',"1")
Registryset(ls_key,'UseLongQualifiers',"1")
Registryset(ls_key,'ApplicationUsingThreads',"1")
Registryset(ls_key1,as_odbc_name,"PB INTERSOLV OEM 3.01 32-BIT dBASEFile (*.dbf)")
end if
if as_odbc_type = 'SQLANY' then
Registryset(ls_key,'Driver',as_path+"WOD50T.DLL")
Registryset(ls_key,'Description',"自动生成ODBC'")
Registryset(ls_key,'UID',"DBA")
Registryset(ls_key,'PWD',"SQL")
Registryset(ls_key,'Start',as_path+'dbeng50')
Registryset(ls_key,'DatabaseFile',as_path+as_odbc_name+'.DB')
Registryset(ls_key,'DatabaseName',as_odbc_name)
Registryset(ls_key,'AutoStop',"Yes")
Registryset(ls_key1,as_odbc_name,"Sybase SQL Anywhere 5.0")
end if
if as_odbc_type = 'FOXPRO' then
Registryset(ls_key,'DefaultDir',as_path)
Registryset(ls_key,'Description',as_odbc_name+"的自动ODBC'")
Registryset(ls_key,'Driver','C:/WINDOWS/SYSTEM/odbcjt32.dll')
Registryset(ls_key,'DriverId',ReguLong!,280)
Registryset(ls_key,'FIL',"FoxPro 2.0")
Registryset(ls_key,'SafeTransactions',ReguLong!,0)
Registryset(ls_key,'UID',"")
Registryset(ls_key+'/Engines/Xbase','CollatingSequence','ASCII')
Registryset(ls_key+'/Engines/Xbase','Deleted',Regulong!,1)
Registryset(ls_key+'/Engines/Xbase','ImplicitCommitSync','Yes')
Registryset(ls_key+'/Engines/Xbase','PageTimeout',ReguLong!,600)
Registryset(ls_key+'/Engines/Xbase','Statistics',Regulong!,0)
Registryset(ls_key+'/Engines/Xbase','Threads',Regulong!,3)
Registryset(ls_key+'/Engines/Xbase','UserCommitSync','Yes')
Registryset(ls_key1,s_dbfname,"Microsoft FoxPro Driver (*.dbf)")
end if
...
二、在建立联接前先创建该ODBC的相关信息,如
...
string ls_dbfname="c:/Foxprow/Database"
gf_create_odbc('TestDBF','FOXPRO',ls_dbfname)
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.Database = 'TestDBF'
SQLCA.dbparm = "ConnectString='DSN=TestDBF'"
connect using sqlca;
if sqlca.sqlcode <> 1 then
messagebox('错误','无法连接到制定的数据库文件!('+ls_dbfname+')',stopsign!)
halt close;
end if
...
三、删除该ODBC设置;
创建公用函数 gf_erase_odbc(string as_odbc_name)
...
通过以上步骤,就不需要通过控制面板中的 ODBC工具来设置了。
您可以考虑以下改进:
1、增加ODBC创建函数的参数设置;
2、自己做一个ODBC的设置工具,可以在系统内运行;
3、ODBC驱动程序可以指定到特定的目录或文件。


//这样一个功能怎么建呢?
首先优两个dropdownlistbox,当选择其中一个中的item后,另外一个dropdownlistbox显示相应与第一个
选择项的内容。例如,一个显示各个中心的名称,当选择其中一个中心名称时,另一个则显示相应中心
的所有部门的名称。
(1)用代参数的dropdownDW更好
(2)我刚实现的。表可以这样建:
手机品牌表:MOBILE 手机型号表:MOBILEMODEL
在dw的itemfocuschanged写如下代码:
Long ll_model
ll_model=dw_edit.getitemnumber(dw_edit.getrow(),'mob_id')
if dwo.name='model_id' and not isnull(ll_model) then
    datawindowchild idwc_model
    dw_edit.GetChild ( "model_id", idwc_model )
    idwc_model.SetTransObject ( SQLCA )
    idwc_model.Retrieve()
//     idwc_model.Setfilter("model_id="+string(ll_model))
idwc_model.Setfilter("mob_id="+string(ll_model))
idwc_model.filter()
end if


//在grid的窗口当中,某列不允许编辑,某列允许编辑
有了以下的方法,不就可以很方便了,各取所需吧
//方法一:
在DataWindow中,列与列之间用Tab键进行移动时,是依据DataWindow为每一列设置的Tb 值来进行移动的。
当某列的Tab值为0时,此列不可编辑,使用户无法对其进行增、删、改等操作。故可将某列的Tab值置为0,
即可让此列设为不可编辑。
方法如下(设columnname为DataWindow中要置成的不可编辑的列名):
dw_1.setorder("columnname",0)
或者在数据窗口的script中用以下语句进行修改:

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值