PB中客户机从服务器获取系统时间
- 格式:doc
- 大小:20.50 KB
- 文档页数:1
获得系统基本信息当一个应用program在工作时,会不可避免地和操作系统发生数据交换,虽然在PB中提供了Environment对象来获得系统的一些信息,然而这些信息往往是不够的,例如CPU、本机IP地址等,这些内容只有用Windows API来获得了.1、建立一个工作空间(workspace),取名为:systeminfo.2、建立一个应用(application),取名为:systeminfo.3、创建用户对象u_sysinfo,并添加Microsoft Winsock OCX Control .4、定义u_sysinfo的实例变量.public:string cpuid,cpuproviderstring filesystem,volumenameulong VolumeSerialNumber,MaxComponentLength,FileSystemFlagslong dlength,dmemoryload,dtotalphys,davailphys,dtotalpagefilelong davailpagefile,dtotalvirtual,davailvirtualulongdwoemid,dwpagesize,lpminappaddress,lpmaxappaddress,dwactiveprocessorm askulongdwnumberofprocessors,dwprocessortype,dwallocationgranularity,dwreserv edulongsectorspercluster,bytespersector,numberoffreeclusters,totalnumberofcl ustersulong mbtotal,mbfree5、定义u_sysinfo的局部外部函数PUBLIC FUNCTION ulong GetComputerName(ref string lpBuffer,ref ulong nSize) LIBRARY "kernel32.dll"ALIAS FOR "GetComputerNameA"PUBLIC FUNCTION ulong GetDriveType(string nDrive) LIBRARY "kernel32.dll" ALIAS FOR "GetDriveTypeA"FUNCTION ulong GetDiskFreeSpace(ref string lpRootPathName,refulong lpSectorsPerCluster,ref ulonglpBytesPerSector,ref ulong lpNumberOfFreeClusters,ref ulong lpTtoalNumberOfClusters)LIBRARY "kernel32.dll" ALIAS FOR "GetDiskFreeSpaceA"PUBLIC FUNCTION ulong GetTickCount() LIBRARY "kernel32.dll"PUBLIC Subroutine GetSystemInfo(ref ws_info lpSystemInfo) LIBRARY "kernel32.dll"PUBLIC FUNCTION ulong waveOutGetNumDevs() LIBRARY "winmm.dll" PUBLIC FUNCTION ulong WNetGetUser(ref string lpName,ref string lpUserName,ref ulong lpnLength)LIBRARY "mpr" ALIAS FOR "WNetGetUserA"PUBLIC FUNCTION ulong GetSystemMetrics(ulong nIndex) LIBRARY"user32.dll"PUBLIC FUNCTION ulong GetWindowsDirectory(ref string lpBuffer,ulong nSize) LIBRARY "kernel32.dll"ALIAS FOR "GetWindowsDirectoryA"PUBLIC FUNCTION ulong GetSystemDirectory(ref string lpBuffer,ulong nSize) LIBRARY "kernel32.dll"ALIAS FOR "GetSystemDirectoryA"PUBLIC FUNCTION ulong GetTempPath(ulong nBufferLength,ref string lpBuffer) LIBRARY "kernel32.dll"ALIAS FOR "GetTempPathA"PUBLIC FUNCTION ulong GetKeyboardType(ulong nTypeFlag) LIBRARY"user32.dll"PUBLIC FUNCTION ulong QueryPerformanceFrequency(ref double lpFrequency) LIBRARY "kernel32.dll"PUBLIC FUNCTION ulong QueryPerformanceCounter(ref ulong lpPerformanceCount) LIBRARY "kernel32.dll"//PUBLIC FUNCTION ulong EnumPrinterDrivers(ref string pName,ref string pEnvironment,ulong Level,refByte pDriverInfo,ulong cdBuf,ref ulong pcbNeeded,ref ulong pcRetruned) LIBRARY"winspool.drv" ALIAS FOR "EnumPrinterDriversA"PUBLIC Subroutine GlobalMemoryStatus(ref ws_memory lpBuffer) LIBRARY "kernel32.dll"//FUNCTIONon ulong GlobalReAlloc(ulong hMem,ulong dwBytes,ulong wFlags) LIBRARY "kernel32.dll"PUBLIC FUNCTION ulong RegOpenKey(ulong hKey,ref string lpSubKey,ref ulong phkResult) LIBRARY"advapi32.dll" ALIAS FOR "RegOpenKeyA"PUBLIC FUNCTION ulong RegCloseKey(ulong hKey) LIBRARY "advapi32.dll" PUBLIC FUNCTION ulong RegQueryValueEx(ulong hKey,ref string lpValueName,ulong lpReserved,ref ulonglpType,ref long lpData,ref ulong lpcbData) LIBRARY "advapi32.dll" ALIAS FOR"RegQueryValueExA"//Function ulong EnumDisplaySettingsA(ulong xx,ulong modenum,ref DEVMODElpdevmode)Library"kernel32.dll"//PUBLIC FUNCTION ulong DeviceCapabilities(ref string lpDeviceName,ref string lpPort,ulongiIndex,ref string lpOutput,ref DEVMODE lpDevMode) LIBRARY "winspool.drv" ALIAS FOR"DeviceCapabilitiesA"PUBLIC FUNCTION ulong GetVolumeInformation(string lpRootPathName,ref string lpVolumeNameBuffer,ulong nVolumeNameSize,ref ulong lpVolumeSerialNumber,ref ulong lpMaximumComponentLength,ref ulong lpFileSystemFlags,ref string lpFileSystemNameBuffer,ulong nFileSystemNameSize)LIBRARY "kernel32.dll" ALIAS FOR "GetVolumeInformationA"FUNCTION long GetMACAddress(long lana,ref long addr[6]) Library "utils.dll"FUNCTION long GetLanaID(ref long lana[254]) LIBRARY "utils.dll" Function ulong GetMHZ()Library"mydll.dll"6、用户对象级函数1)、of_GetComputerName(),获得计算机的标识(即计算机名).ulong ll_comsizeulong ll_flagll_comsize = 256string ls_computerName//获得计算机的名称ll_flag = GetComputerName(ls_computerName,ll_comsize)If ll_flag <> 1 thenreturn "Get Computer Failure"elsereturn ls_computerNameEnd if2)、of_GetCpuInfo(),获得CPU一些基本信息.ws_cpuinfo lstr_cpustring ls_tempRegistryGet("HKEY_LOCAL_MACHINE\Hardware\Description\System\CentralPr ocessor\0","Identifier",RegString!,ls_temp)lstr_cpu.cpuid = ls_tempcpuid = ls_tempRegistryGet("HKEY_LOCAL_MACHINE\Hardware\Description\System\CentralPr ocessor\0","VendorIdentifier",RegString!,ls_temp)lstr_cpu.cpuprovider = ls_tempcpuprovider = ls_temp3)、of_GetCpuStatus(),获得CPU当前的使用频率,是从0%到100%之间的一个常数.ulong ls_username,lpcbData,lpTypelpcbData = 4lpType = 4ulong phkResultls_username = 0string lbSubkeylong lpDatalbSubkey = "PerfStats\StatData"ls_username= RegOpenKey(16*16*16*16*16*16*16*8+6,lbSubKey,phkResult)//The first parameters is HKEY_DYN_DATA = &80000006(HANDLE)string lpValueNamelpValueName = "KERNEL\CPUUsage"ls_username =RegQueryValueEx(phkResult,lpValueName,0,lpType,lpData,lpcbData)ls_username = RegCloseKey(phkResult)return lpdata4)、of_GetDiskVolume(),获得磁盘空间大小.ulong ll_MBFreeulong ll_MBTotalulong ll_sectorspercluster // Sectors/Clusterulong ll_bytespersector // Bytes/Sectorulong ll_numberoffreeclusters // Number of Free Clustersulong ll_toalnumberofclusters // Total Number of Clusters GetDiskFreeSpace(as_driver, ll_sectorspercluster,ll_bytespersector,ll_numberoffreeclusters,ll_toalnumberofclusters)sectorspercluster=ll_sectorsperclusterbytespersector=ll_bytespersectornumberoffreeclusters=ll_numberoffreeclusterstotalnumberofclusters=ll_toalnumberofclustersmbfree = (ll_sectorspercluster * ll_bytespersector *(ll_numberoffreeclusters / 1024)) / 1024mbtotal = (ll_sectorspercluster * ll_bytespersector *(ll_toalnumberofclusters / 1024)) / 10245)、of_GetDriverType(),获得各个磁盘的种类.ulong ul_drivetypestring ls_driveul_drivetype = GetDriveType(a_drivename)choose case ul_drivetypecase 0ls_Drive = "Unknown Driver"Case 1ls_Drive = "Drive Does Not exist"Case 2ls_Drive = "Floppy driver"Case 3ls_Drive = "HardDisk driver"Case 4ls_Drive = "Network driver"Case 5ls_Drive = "CD-ROM driver"Case 6ls_Drive = "RAM driver"End chooseReturn ls_drive8)、GetMhz:sle_mhz.text = String(uo_1.of_GetMhz())9)、GetOSVersion:sle_osversion.text = uo_1.of_getosversion()10)、GetServicePack:sle_servicePack.text = uo_1.of_GetServicePack()11)、GetSystemDir:sle_systemdir.text = uo_1.of_getSystemDir()12)、GetTempDir:sle_tempdir.text = uo_1.of_gettemppath()13)、GetSystemInfo:uo_1.of_GetsystemInfo()ddlb_systeminfo.additem("OemID = "+string(uo_1.dwoemid))ddlb_systeminfo.additem("PageSize = "+string(uo_1.dwPagesize)) ddlb_systeminfo.additem("MinAppAddress ="+string(uo_1.lpminappaddress))ddlb_systeminfo.additem("MaxAppAddress ="+string(uo_1.lpmaxappaddress))ddlb_systeminfo.additem("ActiveProcessorMask ="+string(uo_1.dwactiveprocessormask))ddlb_systeminfo.additem("NumberofProcessors ="+string(uo_1.dwnumberofprocessors))ddlb_systeminfo.additem("ProcessorType ="+string(uo_1.dwprocessortype))ddlb_systeminfo.additem("AllocationGranularity ="+string(uo_1.dwallocationgranularity))ddlb_systeminfo.additem("Reserved = "+string(uo_1.dwreserved)) ddlb_systeminfo.selectitem(5)14)、GetTickCount:sle_tickcount.text = uo_1.of_GetTickCount()15)、GetKeyBoardType:choose case uo_1.of_GetKeyboardType()case 1sle_keyboard.text = "IBM PC/XT( ) or compatible (83-key) keyboard" case 2sle_keyboard.text = "Olivetti 'ICO' (102-key) keyboard"case 3sle_keyboard.text = "IBM PC/AT (84-key) or similar keyboard"case 4sle_keyboard.text = "IBM enhanced (101- or 102-key) keyboard"case 5sle_keyboard.text = "N搞定ia 1050 and similar keyboards"case 6sle_keyboard.text = "N搞定ia 9140 and similar keyboards"case 7sle_keyboard.text = "Japanese keyboard"case elsesle_keyboard.text = "Hardware dependent and specified by the OEM" End choose16)、GetWindowMode:sle_windowmode.text = uo_1.of_getwindowmode()17)、GetWindowDir:sle_windowdir.text = uo_1.of_getwindowdir()18)、GetWaveDevice:sle_wavedevice.text = string(uo_1.of_getwavedevice())19)、GetIPAddress:sle_ipaddress.text = uo_1.of_getipaddress()20)、GetNetCard:sle_netcard.text = uo_1.of_getnetcard()21)、GetDiskInfo:lv_1.deletecolumns()lv_1.deleteitems()lv_1.addcolumn("Driver",Left!,250)lv_1.addcolumn("FileSystem",Left!,350)lv_1.addcolumn("VolumeName",Left!,400)lv_1.addcolumn("VolumeSerialNumber",Left!,650)lv_1.addcolumn("MaxComponentLength",Left!,650)lv_1.addcolumn("FileSystemFlags",Left!,500)lv_1.addcolumn("SectorsPerCluster",Left!,600)lv_1.addcolumn("BytesPerSector",Left!,500)lv_1.addcolumn("NumberofFreeClusters",Left!,700)lv_1.addcolumn("TotalNumberofClusters",Left!,750)lv_1.addcolumn("FreeDiskVolume",Left!,600)lv_1.addcolumn("TotalDiskVolume",Left!,650)lv_1.addcolumn("Used Ratio",Left!,350)String ls_drive,ls_statusls_drive = "abcdefghijklmnopqrstuvwxyz"Integer li_iFor li_i = 1 to 26ls_status = uo_1.of_getdrivetype(mid(ls_drive,li_i,1)+":\")if ls_status <>"Drive Does Not exist" Thenuo_1.of_getvolumeInfo(mid(ls_drive,li_i,1)+":\")uo_1.of_getdiskvolume(mid(ls_drive,li_i,1)+":\")Choose case lower(ls_status)case "floppy driver"if uo_1.mbtotal = 0 Thenlv_1.Additem(mid(ls_drive,li_i,1)+":\"+"~t"+trim(string(uo_1.FileSyst em))+"~t"+trim(string(uo_1.VolumeName))+"~t"+string(uo_1.VolumeSerial Number)+"~t"+string(uo_1.MaxComponentLength)+"~t"+string(uo_1.FileSys temFlags)+"~t"+string(uo_1.SectorsPerCluster)+"~t"+string(uo_1.BytesP erSector)+"~t"+string(uo_1.NumberofFreeClusters)+"~t"+string(uo_1.Tot alNumberofClusters)+"~t"+string(uo_1.mbfree)+"MB"+"~t"+string(uo_1.mb total)+"MB"+"~t"+"0%",1)elselv_1.Additem(mid(ls_drive,li_i,1)+":\"+"~t"+trim(string(uo_1.FileSyst em))+"~t"+trim(string(uo_1.VolumeName))+"~t"+string(uo_1.VolumeSerial Number)+"~t"+string(uo_1.MaxComponentLength)+"~t"+string(uo_1.FileSys temFlags)+"~t"+string(uo_1.SectorsPerCluster)+"~t"+string(uo_1.BytesPerSector)+"~t"+string(uo_1.NumberofFreeClusters)+"~t"+string(uo_1.Tot alNumberofClusters)+"~t"+string(uo_1.mbfree)+"MB"+"~t"+string(uo_1.mb total)+"MB"+"~t"+String(Long(((uo_1.mbtotal -uo_1.mbfree)/uo_1.mbtotal)*100))+"%",1)End ifCase "harddisk driver"if uo_1.mbtotal = 0 Thenlv_1.Additem(mid(ls_drive,li_i,1)+":\"+"~t"+trim(string(uo_1.FileSyst em))+"~t"+trim(string(uo_1.VolumeName))+"~t"+string(uo_1.VolumeSerial Number)+"~t"+string(uo_1.MaxComponentLength)+"~t"+string(uo_1.FileSys temFlags)+"~t"+string(uo_1.SectorsPerCluster)+"~t"+string(uo_1.BytesP erSector)+"~t"+string(uo_1.NumberofFreeClusters)+"~t"+string(uo_1.Tot alNumberofClusters)+"~t"+string(uo_1.mbfree)+"MB"+"~t"+string(uo_1.mb total)+"MB"+"~t"+"0%",2)elselv_1.Additem(mid(ls_drive,li_i,1)+":\"+"~t"+trim(string(uo_1.FileSyst em))+"~t"+trim(string(uo_1.VolumeName))+"~t"+string(uo_1.VolumeSerial Number)+"~t"+string(uo_1.MaxComponentLength)+"~t"+string(uo_1.FileSys temFlags)+"~t"+string(uo_1.SectorsPerCluster)+"~t"+string(uo_1.BytesP erSector)+"~t"+string(uo_1.NumberofFreeClusters)+"~t"+string(uo_1.Tot alNumberofClusters)+"~t"+string(uo_1.mbfree)+"MB"+"~t"+string(uo_1.mb total)+"MB"+"~t"+String(Long(((uo_1.mbtotal -uo_1.mbfree)/uo_1.mbtotal)*100))+"%",2)End ifcase "cd-rom driver"if uo_1.mbtotal = 0 Thenlv_1.Additem(mid(ls_drive,li_i,1)+":\"+"~t"+trim(string(uo_1.FileSyst em))+"~t"+trim(string(uo_1.VolumeName))+"~t"+string(uo_1.VolumeSerial Number)+"~t"+string(uo_1.MaxComponentLength)+"~t"+string(uo_1.FileSys temFlags)+"~t"+string(uo_1.SectorsPerCluster)+"~t"+string(uo_1.BytesP erSector)+"~t"+string(uo_1.NumberofFreeClusters)+"~t"+string(uo_1.Tot alNumberofClusters)+"~t"+string(uo_1.mbfree)+"MB"+"~t"+string(uo_1.mb total)+"MB"+"~t"+"0%",3)elselv_1.Additem(mid(ls_drive,li_i,1)+":\"+"~t"+trim(string(uo_1.FileSyst em))+"~t"+trim(string(uo_1.VolumeName))+"~t"+string(uo_1.VolumeSerial Number)+"~t"+string(uo_1.MaxComponentLength)+"~t"+string(uo_1.FileSys temFlags)+"~t"+string(uo_1.SectorsPerCluster)+"~t"+string(uo_1.BytesP erSector)+"~t"+string(uo_1.NumberofFreeClusters)+"~t"+string(uo_1.Tot alNumberofClusters)+"~t"+string(uo_1.mbfree)+"MB"+"~t"+string(uo_1.mb total)+"MB"+"~t"+String(Long(((uo_1.mbtotal -uo_1.mbfree)/uo_1.mbtotal)*100))+"%",3)End ifEnd ChooseEnd IfEnd For//FileSystem= lpFileSystemNameBuffer//VolumeName = lpVolumeNameBuffer//VolumeSerialNumber=lpVolumeSerialNumber//MaxComponentLength = lpMaximumComponentLength //FileSystemFlags=lpFileSystemFlags。
pb时间函数介绍在编程中,时间函数是非常重要的一部分。
时间函数可以帮助我们获取、操作和格式化时间,以满足不同的需求。
在Python编程语言中,有一个非常常用的时间函数库,就是pb时间函数。
什么是pb时间函数pb时间函数是Python编程语言中的一个模块,提供了一系列的函数来处理时间。
它可以帮助我们获取当前的时间、计算时间间隔、格式化时间等操作。
通过使用pb时间函数,我们可以更加方便地处理时间相关的任务。
pb时间函数的常用功能pb时间函数提供了多个常用的功能,下面将逐个介绍。
1. 获取当前时间使用pb时间函数,我们可以轻松地获取当前的时间。
下面是一个示例代码:import pbcurrent_time = pb.get_current_time()print(current_time)上述代码中,我们使用了get_current_time函数来获取当前的时间,并将结果打印出来。
2. 计算时间间隔pb时间函数还可以帮助我们计算时间间隔。
下面是一个示例代码:import pbstart_time = pb.get_current_time()# 执行一些操作end_time = pb.get_current_time()time_interval = pb.calculate_time_interval(start_time, end_time)print(time_interval)上述代码中,我们使用了calculate_time_interval函数来计算开始时间和结束时间之间的时间间隔,并将结果打印出来。
3. 格式化时间pb时间函数还可以将时间格式化为指定的格式。
下面是一个示例代码:import pbcurrent_time = pb.get_current_time()formatted_time = pb.format_time(current_time, "YYYY-MM-DD HH:mm:ss")print(formatted_time)上述代码中,我们使用了format_time函数将当前时间格式化为”YYYY-MM-DD HH:mm:ss”的格式,并将结果打印出来。
PowerB uilde r常用日期时间函数PowerBuilde r常用日期时间函数2011-01-12 21:57Toda y():功能得到当前系统日期,在某些情况下,同时得到当前系统时间。
返回值:Date。
该函数返回当前系统日期。
用法:单独调用Today()函数时,该函数总是返回当前系统日期,但是,虽然Toda y()函数的返回值类型为Da te,在该函数用做某些函数的参数、而该参数要求DateT ime类型的值时,Today()函数也能够在返回当前系统日期的同时返回当前系统时间。
再如,Today()函数作为数据窗口控件S etIte m()函数的参数,该函数参数中指定的数据窗口列的数据类型为D a teTime,那么当前系统日期和时间将同时设置到数据窗口指定项中。
-------------------------------------------------------Now():功能得到客户机的当前系统时间,返回值为Time类型。
-------------------------------------------------------Year(date):功能得到日期值中的年度(有效取值1000到3000)。
参数date:date类型的值,返回值:Intege r。
函数执行成功时得到da te参数中的年份(采用四位数字),发生错误时返回1900。
用法:当应用程序把有两位数字表示年份的字符串转换成日期时,P owerBuilde r根据下述规则选择世纪:如果年份值在00到49之间,PowerBuild e r将年份中的世纪(前两位数字)当作20;如果年份值在50到99之间,PowerBuilde r将年份中的世纪(前两位数字)当作19。
计算机系统时间提取的正确方法
正确提取计算机系统时间的方法取决于应用场景和需求。
以下是几种常见的方法:
1. 使用系统调用函数:在 C 语言中,可以使用系统调用函数gettimeofday() 来获取当前系统时间。
该函数会返回两个值,分别是秒和毫秒,它们可以用于计算时间差。
2. 使用计时器:可以使用计时器来定期获取当前时间,并将其记录下来。
这种方法适用于需要频繁获取时间的场景,例如实时监控和统计。
3. 使用日志文件:操作系统通常会生成日志文件,记录各种事件和时间戳。
可以使用日志分析工具来提取时间信息,以帮助确定时间差和时间戳。
4. 使用第三方时间库:对于一些需要高精度和时间稳定性的应用,可以使用第三方时间库,例如 time.h 库或 libtime 库。
这些库提供了各种时间测量和计算函数,可以方便地获取当前时间。
需要根据具体应用场景选择正确的方法来提取计算机系统时间。
在实际应用中,还需要注意时间的准确性和稳定性,以确保计算结果
的正确性和可靠性。
计算机系统时间提取的正确方法在计算机系统中,时间戳是一项非常重要的功能。
它可以用于记录事件的发生时间、文件的创建时间以及系统的运行时间等等。
正确的提取计算机系统时间可以帮助我们更好地进行时间管理、数据分析,以及问题的排查与解决。
下面是一些常见的计算机系统时间提取方法:1. 系统时间戳在很多编程语言中,都有与系统时间相关的函数或类库,可以方便地获取当前系统时间或时间戳。
比如在Python中,可以使用time模块来获取当前时间:```import timetimestamp = time.time()print(timestamp)```这个时间戳是一个自1970年1月1日以来的秒数,可以用于记录时间间隔或进行计算。
2. 文件时间属性在Windows系统中,每个文件都有一个创建、修改和访问时间的属性,可以通过文件属性对话框或命令行工具来查看。
在命令行中,可以使用dir命令来列出文件属性:```dir myfile.txt```其中包括了文件的创建时间、修改时间和访问时间。
在Linux系统中,也有类似的命令ls来列出文件的时间属性。
3. 日志文件时间戳很多应用程序都会将事件记录到日志文件中,用于排查问题和分析数据。
在日志文件中,通常都会包含事件的时间戳,可以帮助我们更好地了解事件的发生时间和持续时间。
比如在Apache Web服务器中,可以通过查看访问日志文件来了解每个请求的时间戳和响应时间。
4. 网络时间同步为了保证计算机系统的时间精确度,很多操作系统都支持与网络时间协议(NTP)服务器进行时间同步。
通过配置操作系统的时间同步设置,可以确保系统时间的准确性和一致性。
在Windows系统中,可以通过控制面板中的“日期和时间”设置来进行时间同步。
在Linux系统中,可以通过配置/etc/ntp.conf文件来指定NTP服务器。
总的来说,正确的计算机系统时间提取方法可以帮助我们更好地进行时间管理、数据分析和问题排查。
PowerBuilder提供了对目前流行的大多数关系数据库管理系统的支持,由于在PowerBuilder的应用程序中对数据库访问的部分一般采用国际化标准数据库查询语言SQL,使得用PowerBuilder开发的应用程序可以不做修改或者只做少量的修改就可以在不同的后台数据库管理系统上使用。
也就是说用PowerBuilder开发的应用程序是独立于服务器上的数据库。
主要特点PowerBuilder提供了对目前流行的大多数关系数据库管理系统PowerBuilder的支持,由于在PowerBuilder的应用程序中对数据库访问的部分一般采用国际化标准数据库查询语言SQL,使得用PowerBuilder开发的应用程序可以不做修改或者只做少量的修改就可以在不同的后台数据库管理系统上使用。
也就是说用PowerBuilder开发的应用程序是独立于服务器上的数据库管理系统的。
和大多数的WINDOWS应用程序一样,PowerBuilder也是事件驱动工作方式。
在这种工作方式中,程序的运行没有固定的流程,程序中的代码也是为各种可能发生的事件编写的,当程序开始运行之后,它就可以接受来自系统,用户或者其它应用程序触发的事件,然后执行相应的事件代码。
事件驱动的工作方式与面向对象技术是紧密相关的,在PowerBuilder应用程序中,接受发生的事件的往往就是程序界面中的各种可视化对象。
PowerBuilder是一种面向对象的开发工具,各种WINDOWS应用程序中常见的窗口、菜单、控件等在PowerBuilder中都是一个个的对象。
在PowerBuilder中我们还可以创建自己的用户对象。
特别要指出的是PowerBuilder提供了对面向对象方法中的各种技术的全面支持,我们可以利用面向对象方法中的对象的封装性、继承性、多态性等特点使得我们开发的应用程序具有极大的可重用性和可扩展性,而这一点正是软件工程中对应用程序所提出的重要目标。
PowerBuilder常用日期时间函数PowerBuilder常用日期时间函数2011-01-12 21:57Today():功能得到当前系统日期,在某些情况下,同时得到当前系统时间。
返回值:Date。
该函数返回当前系统日期。
用法:单独调用Today()函数时,该函数总是返回当前系统日期,但是,虽然Today()函数的返回值类型为Date,在该函数用做某些函数的参数、而该参数要求DateTime类型的值时,Today()函数也能够在返回当前系统日期的同时返回当前系统时间。
再如,Today()函数作为数据窗口控件SetItem()函数的参数,该函数参数中指定的数据窗口列的数据类型为DateTime,那么当前系统日期和时间将同时设置到数据窗口指定项中。
-------------------------------------------------------Now():功能得到客户机的当前系统时间,返回值为Time类型。
-------------------------------------------------------Year(date):功能得到日期值中的年度(有效取值1000到3000)。
参数date:date类型的值,返回值:Integer。
函数执行成功时得到date参数中的年份(采用四位数字),发生错误时返回1900。
用法:当应用程序把有两位数字表示年份的字符串转换成日期时,PowerBuilder根据下述规则选择世纪:如果年份值在00到49之间,PowerBuilder 将年份中的世纪(前两位数字)当作20;如果年份值在50到99之间,PowerBuilder将年份中的世纪(前两位数字)当作19。
比如,字符串"20-10-25"被PowerBuilder转换为2020-10-25;字符串"98-10-25"被PowerBuilder转换为1998-10-25。
PowerBuilder内置ORACLE数据库接口的使用方法PowerBuilder(PB)和Oracle分别是前端开发工具和RDBMS的主流产品。
PB提供了两种与Oracle连接的接口:PowerSoft内置的数据库接口(Native Database Interface)和ODBC接口。
本文介绍使用PB6.0内置Oracle接口的方法,包括数据描述文件的设置、存储过程的调用和存储过程作为数据窗口数据源的操作方法等内容,使用的RDBMS的Oracle 7.3。
PowerBuilder与Oracle的连接假定已安装Oracle客户端应用程序。
可用Sqlplus或Tnsping等是否能连接到Oracle数据库,确定在配置文件中使用的数据库别名(Database Alias,又称服务器名,Server Name)。
如有疑问,可在Oracle客户端程序目录下tnsname.or a文件中找到。
另外保证搜索路径已包括应用程序的安装目录(如C:\ORAWIN95\BIN)。
进入PB的Database Profiles画笔,可看到所有已安装的数据库接口(PB6.0缺省安装的是Oracle 7. 3版的接口,如使用低版本的Oracle,需在安装时指定),选择“Oracle 7.3”,点击“New”按钮,进入Database Profile Setup对话框。
在“C onnection”页输入下列信息:Profile Name:为该Database Profile起一个有意义的名称;Server:@TNS:ServerName,其中ServerName为上述数据库别名(服务器名),如@TNS:ORA73;Login ID:Oracle数据库中实际的用户名,由于PB初次连接到数据库时要自动建立五个系统表(Powe rBuilder CatalogTable:PBCATTBL,PBCATCOL,PBCATEDT,PBCATFMT, PBCATVLD,存储表的扩展属性),因此第一个连接到Oracl e的用户必须具有建表、给PUBLIC角色授权等权限。
PB中客户机从服务器获取系统时间
(深圳:独孤求败2003-05-16)
PowerBuilder开发常采用Client/Server模式,而此种模式下对于系统时间的读取操作要注意前台与后台的分别。
PowerBuilder中有函数today()和time()可以分别返回当前机器的日期和时间,虽然用户在自己的PC机上可以任意地修改系统的日期和时间,而在应用系统中就得不到正确的当前日期和时间了。
在Client/Server结构中,有一台机器是用作数据库服务器的,一般用户没有权限修改时间,但我们可以读取时间作为系统时间。
以Oracle数据库为例,定义函数f_get_current_time() 返回datetime变量。
函数脚本如下:datetime ldt_cur_time
select sysdate
into :ldt_cur_time
from sys.dual;
if sqlca.sqlcode 〈〉0 then
messagebox(″出错信息″,″读系时间出错!″,Exclamation!)
end if
return ldt_cur_time
以Sybase(或MS SQL Server)数据库为例,定义函数uf_getdate()返回datetime变量。
datetime d_today
select getdate() into :d_today from tablename;
return d_today
就可以得到服务器的系统时间了,其中getdate()是Sybase(或MS SQL Server)的系统函数,得到当前时间,返回datetime变量。