如何在PB5中自动生成行号
delelte数据窗口中若干行,然后update,出现: “rows changed between retrieve and update No changes made to database… Delete from table where ….” 请教是何缘故,该数据窗口是updatable 的,未设置关键字。
如何能够作到,在打印一个DataWindows后不自动换页,而继续打印下一个DataWindows?
我在table中改了一个字段的类型,回来一看,相应的datawindow字段在运行时再
也无法输入东西了?.
我没安装watercom C++,连用模板生成的PBL都不能正确编成EXE运行,生成的EXE在
windows95 中远行时报程序启动错误,怎么办?
我刚安装好nt40中文版 及sybase system 11.0.1无任何错误提示,启动SSM时给提示:无法找到DNETW.DLL于指定路径 C:\SYBASE\BIN C:\WINNT\SYSTEM32…..但还能启动SSM。 打开SERVER时提示:NO LANGUAGE HANDLER INSTALL这与NT有关吗?如何解决?
如何在PB5中自动生成行号
自动生成行号的方法很多,你可以看看PB的例子就知道了。目前我用的方法是,先用SQL语句统计表中最大的行号,把结果保存到一个变量中去,然后再对此变量进行加1不就可以了吗?但这种做法只是从最大的行号开始产生行号,产生最小的行号也是类似的。
delelte数据窗口中若干行,然后update,出现: “rows changed between retrieve and update No changes made to database… Delete from table where ….” 请问为什么?
试试更改数据窗口的Update Properties中的 ‘Where Clause for Update/Delete’中的选项。
如何能够作到在打印一个DataWindows后不自动换页,而继续打印下一个DataWindows?
在PrintPage事件中返回0
在table中改了一个字段的类型,回来一看,相应的datawindow字段在运行时再也无法输入东西了,为什么?
datawindow具有自己的SQL语法,该语法和数据库后台中的变化不能时时响应,因此,当后台的数据库发生修改后,应该手工修改datawindow中的列定义,如:将变化的列删除,再次添加就可以了。
没安装watercom C++,连用模板生成的PBL都不能正确编成EXE运行,生成的EXE在windows95 中远行时报程序启动错误,怎么办?
不用安装Watcom C++,编译器内置于pb6文件中,估计你和我以前的错误一样,在win98中编译后在win95中运行报启动错,解决方法:
1.在本站点下载pb6.5 patch,它可使你的pb6升级到pb6.5,可解决win98下很多问题.
2.在win95下编译.
原因是PB在执行时找不到运行库必须将\powersoft\shared加入路径或将它的内容拷入运行目录
安装好nt40中文版 及sybase system 11.0.1无任何错误提示,启动SSM时给提示,这与NT有关吗?如何解决?
first:you must restart your system
second:perhaps you need running SQLEDIT.
缩小含较少数据的Sybase数据库的规模,如2G的数据库,其中含200M的数据,如何将其转换为500M左右的数据库?
高级方法:不用BCP,使用修改系统表SYSUSAGES的方法。详细方法在SYSBASE NEWSGROUP 有。你可以在www.sybase.com找到administrator 论坛。
请教两个sybase sql server 之间复制数据的方法
SYBASE有一个东东叫Replication Server,专用来复制Sybase SQL Server,不过就是对维护人员要求高(没有sybase帮你,我看你日子不好过)
如何将Excle文件中的数据倒入PB5.0的Database
回答1:将该xls文件建立ODBC数据源,在PB里打开,存成sql文件,在打开sqlanywhere的库,运行此sql文件即可。
回答2:采用DDE或OLE编程。将PB置成DDE server 或ole server.在EXCEL中进行VBA编程,可实现对特定数据的处理和传送。
回答1:检查你的DATAWINDOW是否与TABLE 相符。最好此DATAWINDOW重新生成。
回答2:我同意您的观点。但我的情况是刚刚装完Win95后立即装PB,同样出问题。友人建议我使用PB5.0不要追求高版本。但Sybase中国可能已不出售这个版本的PB了。
回答1:1,在SSM里生成DDL
2,把所有数据BCP出来(提示,可以先生成一个BAT文件,不用我说了吧?)
3,在小型机的SQL Server里运行DDL
4,把所有数据BCP进去(提示,可以先生成一个BAT文件)
回答1:在VC中, int 是32位. 而在PowerBuilder 中int 是16位, long则是32位.
回答1:编译时不要选编为本机代码。
回答2:下载补丁版
回答1:不要使用PB的ODBC驱动,用MS的
回答2:将SQL SERVER的CHAR类型改成VARCHAR类型
回答1:我没有出现这种情况啊?不过在PBCGI60正在运行时,即网页正在刷新时,如果关闭服务器应用会产生这种情况(100%)。我认为这是PB的BUG,可能是PBCGI与应用通迅时是通过共享内存来实现的,而内存是由应用分配而来,当应用关闭时,所分配的内存也就释放了,这时PBCGI60。EXE还是去这块内存取数据的话,操作系统就会认为非法操作(因为这块内存已经归还给操作系统了,PBCGI60。EXE没有操作的权限)
回答1:1,在DW的ItemChanged写Script实现
2,computedField本来就可以由两条以上记录的某字段值计算而得,例如sum,count等。如果你想指定某几条记录来作计算,可以用IF,例如要统计第一个记录和第二个记录的值:sum(if(getrow()=1 or getrow()=2),字段名,0)
3,给ComputedField一个名字,然后用getitemXXX(1,名字)
4,要在ItemChanged里写Script
回答1:BCP is another way.
回答2:不能修改,可以另外建一个表,用PIPELINE将数据倒过去。
回答1:在Infobase里按出错的关键字查一下,应该可以找到原因。
回答2:按PBD编译吧!
回答1:在win95 osr2版里选装附件中的‘映像’,即可得到WANG系列的image控件,非常好用,请试一试。
回答1:没有纪录号的概念啦!
回答1:这要看你是使用同步还是异步调用,同步你可以传递一个REF STRING 参数、然后用 IMPORTSTRING 函数引入数据,如果是异步调用你需要使用 SERVER PUSH 技术返回一个STRING,然后在用IMPORTSTRING。详细处理看 PB ONLINEBOOKS
回答2:用 datastore.object.datawindow.syntax 得到语法,用 datastore.object.datawindow.data 得到数据
回答1:1.具体与你使用的数据库有关,在SQL Server及SQL Anywhere中trigger 语法存放在syscomments表中,直接select出来就可怜看到。
2.调用windows API.具体function我记不清了,查一下visual c++帮助,不难。
回答1:SQL AnyWhere default value=当前用户 的语法用user char ( 10 ) default user,而不是 default current user,再试试!
回答2:在此表上ADD一个TRIGGER。在INSERT 和UPDATE时出发。TRIGGER启动后SELECT USER INTO VAR1 NEW。USER := USER;我也是虾血,你可以试试。
回答1:用 Image 类型 的列试试。
回答1:客户端配置 ODBC 时注意以下几点:
1)Server Name 项写 ASA 的 Server Name
2) Database Starup 项内选中 Network radio button.
回答1:第二个 Transaction 的属性配置和第一个类似,只是在用的时候 SQL 语句后要加 using …; ,并且用完后要用 Destroy 命令删掉。
回答1:听说是用windows\system里的REGSVR32命令
回答1:是否缺少.lic文件?
回答1:打开Database Painter, 在 File 菜单项下有Create Database,如果没有,那么可能你装PB的时候没装 SQL Anywhere.
回答1:移入、移出控件我都是用的 mousemove, 可以在 Script中进行区分。
回答1:sqlca.servername = ‘@’ + ORACLE数据库别名
sqlca.dbms=’o72’
sqlca.login = ‘SYSTEM’
sqlca.loginpass = ‘MANAGER’
回答1:droptable不对, 应该是drop table,PB对sybase自身的数据库产品的支持应该是没有问题的,连接oracle或者db2等一般不能直接修改列名或者列类型,另外, 对于大型数据库而言, 一般不允许将列长度变小, 如:
col1 numeric(8,2) –> col numeric(10, 2) ok,
col1 numeric(8,2) –> col numeric(8, 0) no
R回答1:我的数 据 库 是SYBASE SQL Anywhere,开始在PB5.0下建的表,而且能修改Column Name等属性.后来因其它原因重装后便不可以了.硬盘格式化后重装也不行.便安装了PB6.0,刚用时是正常的.过了几天再用便又不行了.
AR回答1:实在不行的话, 如果你用sql anywhere, 使用Sybase sql Central 也可以修改列名等, 规则和我上次谈的一样
回答1:不妨试试如下命令(在交互式环境下)
online database cinms
go
看看是否可以解决问题!!!
回答2:手工更改master库中的sysdatabases表,它有两个状态栏status,status2,可以去掉SUSPECT位,具体数值意义可以看SYBASE的参考资料.
回答1:你的sybload后没加-D的参数或CAS不对。
回答1: 可考虑自己在程序中计算,最后insertrow(0),并Setiem.
回答1:用 set identity_insert on 改变设定后,insert 语句中 identity 列的值是显式指定 identity 列将从这个值开始递增,或用这个值填充 identity 列值中的空隙。如果不影响逻辑的话,能不能drop再create?
回答1:是这样,当你用到一个对象是动态加入的,如你程序中的类似 dw_userquery.DataObject = “d_pacuser2” 的情况,编译是PB 不会将 数据窗口 d_pacuser2 自动编译到 EXE 文件中去,解决办法有两个:
1)将此数据窗口所在的PBL 文件编译成 DLL 或 PBD,(即 编译时选中此 PBL文件后面的 DLL 多选框)
2)创建资源文件(以PBR结尾)
例如:
创建文件 dw_list.pbr
内容如下:
c:\sample\myapp.pbl(d_pacuser2)
将此文件写在 Resource File 处。
回答1:这是PB的问题,如果要求严格的话,请不要使用转换函数.解决的办法只有用两个整数来代替一个浮点数的整数及小数部份,在有关处理中,只能人工解决
回答1: 这种现象我也遇到过,可以采用设置EDITMASK来解决 将mask设为###.##而不是000.00
回答1: 1>dw_1.setSqlSelect 或
2>dw_1.object.datawindow.table.select=…
回答1:如果多次调用,则最好Prepare一次,再在循环中Open,不要每次都Prepare.
回答1:在COMPOSITE REPORT 设计过程中,双击COMPOSITE 报表的空白处,设置composite report的检索参数(value),然后双击rep,把刚才设置的参数赋于rep,最后用 dw_composite_report.RETRIEVE(VALUE)
回答1:试试这样:dw_1.object.rep1.object.st_1.text=value
回答1:通过判断默认事务对象sqlca的属性sqlcode来决定.
if slqca.sqlcode=** then
messagebox(”,’中文提示’)
end if
当然要了解pb的错误级别.
回答1:完全可用多重循环来实现。插入可用函数insertitemlast()来完成,注意其语法为:
treeviewname.InsertItemLast(handleparent, item )
其中handleparent为要插入Item其父项的句柄(第插入一项都返回一个句柄,long型),item为treeviewitem。
for example:
for i = 1 to row1 step 1
name = dept_datastore.getitemstring(i,”dept_name”)
code = dept_datastore.getitemnumber(i,”dept_code”)
xt_tvitem.label = name
xt_tvitem.data = dept_datastore.getitemnumber(i,”dept_code”)
xt_tvitem.pictureindex = 2
xt_tvitem.selectedpictureindex = 2
ll_newitem = tv_1.insertitemlast(ll_rootitem,xt_tvitem)//返回一个句柄ll_newitem ,作其子项父句柄。ll_rootitem为根句柄
for j = 1 to row2 step 1
xt_tvitem.label = emp_datastore.getitemstring(j,”name”)
xt_tvitem.data = emp_datastore.getitemnumber(j,”em_code”)
xt_tvitem.pictureindex = 3
xt_tvitem.selectedpictureindex = 3
tv_1.insertitemlast(ll_newitem,xt_tvitem)//用到父句柄
next
next
回答2:pb倒是没有提供标准的modify接口,可能要用死办法直接修改syntax的table区,具体格式可以看 SRD
回答1: PFC是一些基本类库,PFC功能强大,使用PFC开发程序,需要写的代码很少,时间可以大大减少,界面也比较好。
回答2: PowerBuilder Fundamental Classes, 是这个意思吧,就是和微软的MFC差不多的东东。
回答1:好像在RUN_SYBASE文件内加一个 -m 然后,重新启动,会自动产生一个新的SA口令。一定要用笔记住。再用sp_password改成自己的口令。的自己加的-m去掉,重启动就可以了。
回答2:为了安全,SYBASE 确认了你的身份后才能帮你解决。有时需要正式介绍信。
回答1:The first function returns the color of a specific pixel(像素;显示器的最小分辨单元). The SetPixel function changes the targeted pixel to the color sent. There is no PowerBuilder equivalent.
Global External Function:
FUNCTION ulong GetPixel(ulong hwnd, long xpos, long ypos) LIBRARY “Gdi32.dll”
FUNCTION ulong SetPixel(ulong hwnd, long xpos, long ypos, ulong pcol) LIBRARY “Gdi32.dll”
Script:
long lx, ly
ulong rtn
ulong l_handle, l_device
lx = 100
ly = 100
l_handle = handle(w_main)
l_device = GetDC(l_handle)
rtn = GetPixel(l_device, 100, 100)
MessageBox(“Position ” + string(lx) + “,” + string(ly),”Color = ” + string(rtn))
SetPixel(l_device, lx, ly, 0) // This call will set the pixel at lx, ly to black.
回答1:There five table is used to loaded “Lable”,”validation”,”head” and “tablename” and others table information whose in PB.We can used to show “table name” in our application and delete “died tabled ” in Database’
回答1:使用VB5.0所带ActiveX control.安装vb后在pb OLE control中即可见.
回答1:使用如下语句显示DW dw1.object.datawindow.print.prview = True
回答1:很简单,你在Sql Enterprise Manager中对你的数据库右击,再点edit,再点Truncate,就可以将数据库中已完成的事务清掉.或者用DUMP TRANSACTION … WITH TRUNCATE就可以了
回答2: 您的DATAWINDOW是不是有很多个TABLE的复杂关连?它将导致临时表空间不够,若是,那你就要改变DATAWINDOW的做法了,例如,你可以在VIEW或者STORE PROCEDURE中将多个TABLE关联起来,然和建立一个用VIEW或者STORE PROCEDURE作为数据源的DATAWINDOW.
方法一
1、声明外部函数
FUNCTION boolean sndPlaySoundA (string SoundName, uint Flags) LIBRARY “WINMM.DLL”
Function Uint LoadLibraryA(String As_Library) Library “kernel32.dll”
Subroutine FreeLibrary (Uint Hinstance) Library “kernel32.dll”
2、程序如下:
Uint Lu_instance
Lu_instance = LoadLibraryA(“winmm.dll”)
if Lu_instance = 0 then
SndPlaySoundA(“c:\windows\media\chimes.wav”,1)
FreeLibrary(Lu_instance)
end if
3、存在问题:
如何播放格式的音乐?
方法二:
1、声明外部函数
Function Uint ShellExecuteA (Uint hwndId,ref string op,ref string file,ref string parms,ref string dir,Uint show) library “shell32.dll”
Function Uint LoadLibraryA (String As_Library) Library “kernel32.dll”
Subroutine FreeLibrary (Uint Hinstance) Library “kernel32.dll”
2、程序如下:
String Ls_path,ls_file,ls_parms,ls_dir,ls_command
Uint lu_return,lu_instance
SetNull(ls_parms)
//check to see if the dll is available.Return number < 32 if not Lu_Instance = LoadLibraryA(“shell32.dll”)
if Lu_Instance <> 0 then
MessageBox(“操作提示”,”SHELL32.DLL动态库不存在!”)
else
//Shell32.dll is here.Get a filename from the user
GetFileOpenName(“打开文件”,ls_path,ls_file,”“,”All Files (.),.*”)
if ls_path <> “” then
SetPointer(HourGlass!)
//Examine the checkbox for open or print configuration
if cbx_print.checked then
ls_command = “print”
else
ls_command = “open”
end if
//call the function.pass the parent as the ower.run normal.
Lu_return = ShellExecuteA(Handle(parent),ls_command,ls_path,ls_parms,ls_path,1)
//check for errors from function
if lu_return < 32 then
MessageBox(“操作提示”,”程序执行非法操作! ~r~n” + ls_path)
end if
end if
//free the resources from the dll since it was loaded with the loadlibrary call
FreeLibrary(lu_instance)
end if
注:本方法可运行任何文件,当然可以播放音乐文件 和动画文件。在sndPlaySoundA() 的函数定义中,把 string SoundName 定义成 ref string SoundName,再试试,反正这个函数的原型就是有 ref 的。
回答1: 加 filter ;根据索引加 where 条件;或者干脆用 rowsmove 把其他记录移到 filter buffer 中。
回答1:请您使用黑体或楷体,否则在无盘工作站和WIN98中都会出现字体显示不出来的情况.
回答1:用grid风格的datawindow想加标题行比较麻烦,因为grid风格中的标题band中也会显示网格线,而且要将text控件的band属性设为Foreground.你可以用Create语句创建一个text控件,然后指定它的位置和band属性.create的语法如下:
dw_1.Modify(‘create text(band=foreground alignment=”2” name=datetext text=”text” border=”0” color=”0” x=”0” y=”0” height=”69” width=”650” font.face=”Arial” font.height=”-9” font.weight=”400” font.family=”2” font.pitch=”2” font.charset=”0” background.mode=”1” background.color=”16777215” )’)
其中text的属性大部分为必需的,如果不完整的话,该text可能不能显示.据我所知,用grid风格的datawindow时要想加上标题,而且要显示得比较好看,只能用text控件将显示出的多余的网格线给盖住,这样做语法上比较麻烦,因为你要得到这个datawindow中最后一个列的y值和width,以控制text的width,特别是你这个datawindow和text是动态创建的.当然这些都是可以实现的,多多钻研吧!
回答1:该错误大多是由于Transaction没有正确的Connect,你Connect后,应检查sqlcode的值Put transaxtion parameters in scripts .or copy pb.ini to the directory of the *.exe file.
回答2:应用在pb开发环境中运行时,系统会自动去找需要的库,但编译成.exe文件后运行就需要手工设置路径或copy这些库到当前目录。一般这些库都能在pb的shared目录下找到。具体可参看“可执行文件调用动态链接库问题”一帖的答复。已有几位高手详细解释。
A3:可能全局变量与局部变量,事例变量冲突
回答1: I had a solution, like follows,
void WINAPI PrintSet(LPCTSTR PrinterName, DWORD PaperSize, DWORD Height, DWORD Width, LPDWORD ret_code, LPTSTR errortext)
{
DEVMODE* lv_devmode;
DEVMODE* lv_devmode_2;
PRINTER_INFO_2* lv_printer_info;
LPTSTR lv_str, pDeviceName;
HANDLE phPrinter;
DWORD pcbNeeded, lv_dword;
lv_printer_info = malloc( 500 );
if (!OpenPrinter(PrinterName, &phPrinter, NULL))
{
free(lv_printer_info);
*ret_code = GetLastError();
lv_str = “打开打印机失败 !”;
strcpy(errortext, lv_str);
return;
}
if (!GetPrinter(phPrinter, 2, lv_printer_info, 500, &pcbNeeded ))
{
free(lv_printer_info);
*ret_code = GetLastError();
ClosePrinter(phPrinter);
lv_str = “无法得到打印机参数 !”;
strcpy(errortext, lv_str);
return;
}
lv_devmode = lv_printer_info->pDevMode;
pDeviceName = lv_devmode->dmDeviceName;
lv_dword = DocumentProperties(0, phPrinter, pDeviceName, lv_devmode, 0, DM_OUT_BUFFER);
if (lv_dword<0)
{
free(lv_printer_info);
*ret_code = GetLastError();
ClosePrinter(phPrinter);
lv_str = “无法取得打印机参数 !”;
strcpy(errortext, lv_str);
return;
}
// 修改DEVMODE结构, 设置纸张大小及其高度和宽度
lv_devmode->dmFields = lv_devmode->dmFields|DM_ORIENTATION|DM_PAPERLENGTH|DM_PAPERWIDTH|DM_PAPERSIZE;
lv_devmode->dmOrientation = DMORIENT_PORTRAIT ;
lv_devmode->dmPaperSize = PaperSize ;
lv_devmode->dmPaperLength = Height;
lv_devmode->dmPaperWidth = Width;
// 通过调用DOCUMENTPROPERTIES函数传会修改的DEVMODE结构,
// 在调用时指定DM_IN_BUFFER|DM_OUT_BUFFER
lv_devmode_2 = malloc(500);
lv_dword = DocumentProperties(0, phPrinter, pDeviceName, lv_devmode_2, lv_devmode, DM_IN_BUFFER|DM_OUT_BUFFER);
if (lv_dword<0)
{
free(lv_devmode_2);
free(lv_printer_info);
*ret_code = GetLastError();
ClosePrinter(phPrinter);
lv_str = “无法设置打印机参数 !”;
strcpy(errortext, lv_str);
return;
}
if (!SetPrinter(phPrinter, 2, lv_printer_info, NULL))
{
free(lv_printer_info);
*ret_code = GetLastError();
ClosePrinter(phPrinter);
lv_str = “无法设置打印机参数 !”;
strcpy(errortext, lv_str);
return;
}
free(lv_devmode_2);
free(lv_printer_info);
ClosePrinter(phPrinter);
lv_str = “设置打印机参数成功 !”;
strcpy(errortext, lv_str);
*ret_code = 1;
return ;
}
回答1:原因是你创建控件的语法不完整,一些必须的属性没有说明,如X,Y,band.你可以先将控件的语法先输出到文本里,再替换为你的控件的属性.以下为一个text控件的最基本的语法.
create text(band=detail alignment=”0” text=”aaaa:” x=”691” y=”52” height=”77” width=”426” name=aaaa font.face=”Arial” font.height=”-12” font.family=”2” font.charset=”0” background.mode=”1” )
回答2: 我又看了看帮助,找到了答案:现在公布:
window.openUserObject ()
参数请查看帮助
回答1:请将竖线画长点!
回答2:在报表的属性中设置Units项为1/1000cm或Pixels,这样报表的上下线就可以连续了。
回答1:string ls_value
ls_value=dw_1.describe(“Evaluate(‘lookupdisplay(column_name)’,1)”)
column_name=列名 ,’1’表示第一行;看看Help中的Describe
回答1:用dec()函数转换
回答1: 把图形 datawin object的 border 设为可调大小,即resize。然后把datawindow控件选上水平,垂直 滚动条属性即可。
回答1: 用close cursor 可以关闭游标,用deallocate cursor 可以释放分配给游标的资源
回答1:看看share memory could not directly allocated在SCO UNIX OPEN SERVER 3.0 下安装SYBASE10.0.2,当运行SYBINIT到最后要:
1, 增加操作系统的Max Shared Memory
2,修改SQL Server的配置
a. Set Total Memeory . ex:32M
b. Create Cache for Database or append the default data cache
c. 其它需要根据你的具体情况配置
3, 增大tempdb的容量
4, 建立合适的index 根据你的应用建立index,避免大的表扫描。
回答
1,Unix 的IDE H.D.一般应该为Normal.
2, SYBASE在UNIX下要配置几个参数。前面有过回答。SYBINIT运行到最后,BUILD THE MASTER 成功,当它试图Boot the sql server 时出错,boot fail.这是安装的最后一步却失败了,配置中止,安装失败,而不是使用过程中的问题。设好环境变量后,试试以下几步:
1, cd /etc/conf/cf.d 用configure 设 16.shared data 为32000000
2, cd /usr/libvi aiomemlock加sybase=32000000
3, cd /etc/conf/sdevice.d 改suds 的第二项’N’为’Y’
4, cd /etc/conf/cf.d link_unix
回答1: 您完全可以不要INI文件,只不过用INI文件方便一些,当与数据库连接的信息或配置信息变化时不用修改程序而已。一般在WIN95中用注册表代替。
回答1:在DW的dberror事件中,用MessageBox写上自己的Error Message,最后,关键的一点, return 1(或>0的数)。
回答1:PowerBuilder does not support Socket programming. You can use VB or Power++ to create an ActiveX which encapsulates all socket methods. Then integrates this ActiveX into PowerBuilder.
Note: If you call the receive method. The method will block until all data are received
回答1:使用ODBC连接当文件名不确定时,可以动态修改注册表中的ODBC信息及OBDC.INI文件中的信息,再用 transaction连接。
回答1:在DataWindow Retrieve之前应该用Settransobject函数,即:
Connect using sqlca;
dw_1.settransobject(sqlca)
dw_1.retrieve()
回答1:PB原本是不支持WINSOCK编程的,但POWERSOFT提供了pslib5.dll和winsock.pbl两个工具.前者是winsock 2.0的DLL,后者是PB的用户对象集,提供了winsock的所有函数.
回答1:(only for win95)
一、shared ALL PBVM60.DLL; Datawindow and report PBDWE60.DLL;Richtext PBRTC60.DLL;OLE win95 PBAEN60.TLB
二、DB interface MS SQL server 6.0 PBMSS60.DLL;PB ODBC PBODB60.DLL;PBODB60.INI;Oracle 7.1 PBO7106.DLL;Oracle 7.2 PBO7206.DLL;Oracle 7.3 PBO7306.DLL;Sybase SQl Server 11.x PBSYC60.DLL
三、数据库驱动DLL这个太多了,查查相应的HLP文档。
shared DLL、DB interface、DB driver 三者缺一不可,把所有的这些文件放入\window目录下是可以的,因为该目录是window的缺省目录,
Q回答1:但是不能把所有的应用程序的DLL都放这里吧?
有两种Solution:
1>>把工作路径加入Windows注册表中应用程序的PATH中,(V_V);
2>>把工作路径加入Autoexec.bat中(^_^)。
这样,这些DLL放在那里都可以了!
回答1: 1》这些库都包括了吗?(PB在windows注册表中包含了DLL的路径,所以他的DLL可以不必放在PB60.EXE下,yours?)
2》SQLCA直接写吧,不要从PB.ini中读。
3》一定要找到SQLANY50和oracle 7.3的DB driver,并放置到合适的路径下。SQLANY50 WOD50T.DLL,WL50ENT.DLL,WTR50T.DLL,WODBC.HLP
4》你的DLL包含了MS的DB driver了吗?DS16GT.DLL,DS32GT.DLL, MSCVRT40.DLL,ODBC32.DLL,ODBC16GT.DLL, ODBC32GT.DLL, ODBCCP32.CPL, ODBCCR32.DLL,ODBCINT.DLL,ODBCINST.CNT,ODBCTRAC.DLL,ODBCAD32.EXE
5》试试控制面板中的ODBC32,是不是有什么问题。
6》如还有问题,请再说详细些。
回答1: 其实,如果编译没有错误,只要在pb目录中shared子目录下,把Pbvm60.dll拷贝到win95的目录下,然后在把pbdwe60.dll、pbodb60.dll、pbrtc60.dll、pbtra60.dll、pbodb050.dll、pbmss60.dll这几个动态连接库,拷贝到你编译后的工作目录下,就可以了。
回答1:先在Local extenal function定义下列API Function
function boolean ImmSimulateHotKey (UnsignedLong hWnd,UnsignedLong dwHotKeyID) library “IMM32.dll”
function unsignedlong GetKeyboardLayout (unsignedlong wLayout)library “user32.dll”
function boolean ImmIsIME(unsignedLong hklKeyboardLayout)library “IMM32.DLL”
如果是使用datawindow, 在itemchangedfocus event中:
ulong hklKeyboardLayout
Choose Case dwo.name
Case “chinese_text”
// 需要中文输入的字段
hklKeyboardLayout=GetKeyboardLayout(0)
if not ImmIsIME(hklKeyboardLayout) then
ImmSimulateHotKey(handle ( parent,112)
end if
Case “Englist_text”
// 英文输入字段
hklKeyboardLayout=GetKeyboardLayout(0)
if ImmIsIME(hklKeyboardLayout) then
ImmSimulateHotKey(handle ( parent ),112)
end if
End Choose
在windows 编辑框中类似。
回答1: 1》可以用方法POS(str1,str2)>0 and …;
2》把like子句()。即:(col1 like ‘%ggg%’) and (col2 like ‘___WW’)。
回答1:首先在PACKAGE声明方法(Function,受JAVA的“METHOD”的影响不习惯叫“函数”, HEHE..)这个声明把该方法声明成公共 (Public)方法。然后在PACKAGE BODY中定义该方法。(如果仅在PACKAGE BODY中定义该方法,则被认为是私有(Private)方法,将不能被包外的应用访问,OOP的典型应用)例如:定义包,并声明一个 procedure pro_1:
Package p_zhhz is procedure pro_1(v1 in number);
end p_zhhz;
定义包体,在包体中定义这个 procedure pro_1:
Package BODY p_zhhz is procedure pro_1(v1 in number) is begin
delete from a_zhhz_test where zhhz_number = v1;
end pro_1;
end p_zhhz;
在PB中调用:
int li_v1
//声明procedure,并且置初值
li_v1=5
DECLARE sel_zp_zhhz_1998_9_2 procedure for p_zhhz.pro_1(:li_v1) ;
EXECUTE sel_zp_zhhz_1998_9_2;
CLOSE sel_zp_zhhz_1998_9_2;
// (zhhz 1998-9-2)
// [email protected]
回答2: 感谢你的帮助.由于我的存储过程是个函数,所以没采用EXECUTE;在TRANSACTION对象中声明时采用”RFCFUNC”定义为一个函数,加上包名.问题已得到解决.
回答1:commit是嵌入SQL语句,update()函数把对数据库的修改写到日志,commit递交到数据库,因此不存在无法commit的问题。可能您没有把TabPage上的update()函数要写成Tab_?.TabPage_?.dw_?.update()
回答2:能够!可能是你的data window的属性(update)没有设置!
回答1:我用PB的EDITMASK 时,可以直接修改无须用DEL先删除。不知你的属性如何设置