VB问题集锦及编程技巧(面向新手,欢迎高手跟帖)

Cooly 2003-04-09 02:53:14
一、sp2、sp3、企业版有何区别

  问 请问vb中的sp2、sp3、企业版这三种,各代表什么含义?

  答 sp是service pack的缩写。微软每推出一个软件后,都会不定期地推出一些补丁程序,依时间先后称为sp1、sp2等等。后一个sp版本包括前一个版本的全部内容,所以如果你安装了sp3就用不着安装sp2了。sp可以从微软的站点免费下载。vb 5.0的sp下载地址:http://msdn.microsoft.com/vstudio/sp/vs97/。vb 6.0的sp下载地址:http://msdn.microsoft.com/vstudio/sp/default.asp。在service pack的readme文件中介绍了该service pack修改了哪些错误。vb有三个主要版本:学习版、专业版、企业版。企业版是功能最全的版本,当然也是最贵的版本。
------------------------------------
二、api的意义是什么

  问 编程中经常碰到api。请问api的意义是什么?如何知道编程中经常用到的窗口句柄、窗口类名等?

  答:api是application programming interface(应用编程接口)的缩写,也就是应用程序调用系统功能的接口。windows api主要包括由windows系统定义的函数、消息及与之相关的数据类型。我们使用各种开发工具归根结底都是和api打交道。但是api本身比较难掌握,所以visual basic提供了可视的面向对象的控件,使初学者即使不太了解api,也可以编写windows程序。但是visual basic提供的控件毕竟是有限的,不可能包括api的所有方面,所以一些复杂的功能仍然需要调用api来实现。
------------------------------------
三、api定义中的&h是什么含义

  问 现在我看到一些用api函数做的例程,其中有一个语句:public const lvm_first = &h1000 ,该语句中&h1000代表的是什么含义?

  答:&h是16进制的表示,比如&h10等于十进制的16。
------------------------------------
四、为何总提示“变量未定义”

  问 下面是一个关闭windows的小程序:

  option explicit

  private declare function exitwindowsex lib “user32” (byval uflags as long, byval dwreserved as long) as long

  private sub form_load()

  exitwindowsex ewx_force or ewx_logoff or ewx_shutdown, 0

  end sub

  但编译的时候,总是提示:ewx_force 变量未定义,但ewx_force 是一个参数。这是为何?


  答:ewx_force和其他几个参数都是windows api中定义的常数。你使用了option explicit(这是个好习惯,便于发现错误),所以vb发现未定义的符号都会进行提示,这有助于发现拼写错误和遗漏参数定义。你应该从vb的win32api.txt中复制这几个参数的定义。
------------------------------------
五、如何保存图片

  问 我在vb的主窗体要装入一幅事先选好的图片,程序运行后我可以在图片上进行修改并保存它,以备以后调用。请问怎样办?

  答 你可以把form或picturebox的autodraw属性设为true,进行修改后使用vb的savepicture语句进行存盘。如:

  savepicture picture1.picture, “c:\test.bmp”

  这种存盘的文件为.bmp文件,颜色数与当前屏幕的色彩数相同。如果你的存盘要求很高,希望控制存盘格式,只能借助于其他控件,比如imageman(http://www.data-tech.com下载)、lead tools(http://www.leadtools.com下载)等等。
------------------------------------
六、“实时错误9下标越界”错误

  问 我在为一数组赋值时出现如下错误:“实时错误9——下标越界”。出错的代码如下:

  dim inputdata() as single

  inputdata(0) = text2(0).text / text2(1).text '入学率

  请问为何会出现这种错误?


  答 vb在使用数组前必须指定数组的大小。一种办法是在定义时确定大小,如:dim inputdata(10) as single,另一种是采用动态数组。对于你的程序,数组声明部分可以不用修改,而在出错语句前加一句:redim inputdata(10) as single。
------------------------------------
七、如何打开光盘上的数据库

  问 我在编一个vb 程序,当程序刻到光盘以后,不能使用,经过检查发现是因为.mdb文件为只读,程序出错:“该数据库文件已经被另外的一个用户以独占的方式打开,您不能访问”。请问各位高手怎么办?可是我用access却可以阅读该数据库(只读)。

  答 如果你用data控件使用该数据库,将data控件的readonly属性设为true,将exclusive属性设为true。如果readonly属性为false,则就出现你所见到错误信息。如果不将exclusive属性设为true,将出现can't lock file的错误信息。如果你是使用openrecordset语句打开数据库,exclusive属性对应着dbdenywrite和dbdenyread参数。
------------------------------------
八、怎样避免当前窗口被关闭

  问 在按下右上角的关闭键后,怎样避免当前窗口被关闭?

  答 在按下关闭键后,会发生form_unload和form_queryunload事件。这两个事件都有个cancel参数,如果在事件处理过程中将其设为true就可以避免窗口被关闭。对于你的问题,form_queryunload事件可能更好些,因为它有一个unloadmode参数可以区分关闭窗口的指令是用户做出的,还是系统做出的,或者是本程序代码产生的。
------------------------------------
九、dll的编程格式问题

  问 我是第一次编写activex dll程序,在dll中,我只在类模块中写了一个函数card,编译成dll后,在另外一个程序中调用,在模块中声明:

  public declare function card_config lib "c:\test\card.dll" (byval address as integer, byval intermit as integer)

  在一个按钮中写如下代码:

  c = card_config(12,12)

  运行后出现错误:编译activex dll后,调用时出现错误:“实时错误453,找不到dll入口点”望指教。如有可能:请详细告之dll的编程格式。


  答 declare语句只能用来调用标准dll,而不能用于调用activex dll,这是你程序出错的原因。vb无法生成标准dll,只能生成activex dll。要调用activex dll,一般通过createobject语句调用,或在集成环境中选择菜单“工程/引用”,在对话框中选择你要调用的activex dll。这样你就可以在程序中使用activex dll中定义的对象或函数。
------------------------------------
十、怎样启动其他应用程序

  问 怎样在vb中启动其他windows应用程序,例如记事本?

  答 你可以使用vb的shell函数调用其他应用程序。如:

  shell“notepad.exe c:\autoexec.bat”
------------------------------------
十一、如何打印 mschart

  问 如何打印 mschart 控件中的内容?

  答 mschart本身没有打印功能,所以必须先用editcopy将图像放在剪贴板中,然后再打印,如:

   mschart1.editcopy

   printer.print ″ ″

   printer.paintpicture clipboard.getdata(), 0, 0

   printer.enddoc
------------------------------------
十二、“can′t find dll entry point”是指什么

  问 出现以下错误信息是什么意思?“run-time error '453' can't find dll entry point openprocess in kernel 32 ”,(我有一个定义private declare function openprocess lib “kernel32" (byval dwdesireaccess as long, byval binherithandle as long, byval dwprocessid as long) as long)

  答 把openprocess改为openprocess。因为在win 32下,dll中的函数名是区分大小写的。在kernel32中只有openprocess函数,没有openprocess函数。
...全文
2017 176 打赏 收藏 转发到动态 举报
写回复
用AI写文章
176 条回复
切换为时间正序
请发表友善的回复…
发表回复
射天狼 2003-08-06
  • 打赏
  • 举报
回复
liujianghong 2003-06-25
  • 打赏
  • 举报
回复
谢谢!! 正在学习中.
Surpass 2003-06-25
  • 打赏
  • 举报
回复
五、调用Windows的文件拷贝对话框

Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String '只有在 FOF_SIMPLEPROGRESS 时用
End Type

Private Declare Function SHFileOperation Lib _
"shell32.dll" Alias "SHFileOperationA" (lpFileOp _
As SHFILEOPSTRUCT) As Long

'wFunc 常数
'FO_COPY 把 pFrom 文件拷贝到 pTo。
Const FO_COPY = &H2
'FO_DELETE 删除 pFrom 中的文件(pTo 忽略)。
Const FO_DELETE = &H3
'FO_MOVE 把 pFrom 文件移动到 pTo。
Const FO_MOVE = &H1

'fFlag 常数
'FOF_ALLOWUNDO 允许 Undo 。
Const FOF_ALLOWUNDO = &H40
'FOF_NOCONFIRMATION 不显示系统确认对话框。
Const FOF_NOCONFIRMATION = &H10
'FOF_NOCONFIRMMKDIR 不提示是否新建目录。
Const FOF_NOCONFIRMMKDIR = &H200
'FOF_SILENT 不显示进度对话框
Const FOF_SILENT = &H4

例子:
Dim SHFileOp As SHFILEOPSTRUCT
' 删除
SHFileOp.wFunc = FO_DELETE
SHFileOp.pFrom = "c:\config.old" + Chr(0)
SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION
Call SHFileOperation(SHFileOp)
' 删除多个文件
SHFileOp.wFunc = FO_DELETE
SHFileOp.pFrom = "c:\config.old" +Chr(0) + "c:\autoexec.old"+Chr(0)
SHFileOp.fFlags = FOF_ALLOWUNDO
Call SHFileOperation(SHFileOp)
' 拷贝
SHFileOp.wFunc = FO_COPY
SHFileOp.pFrom = "c:\t\*.*"
SHFileOp.pTo = "d:\t\*.*"
SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMMKDIR
Call SHFileOperation(SHFileOp)
' 移动
SHFileOp.wFunc = FO_MOVE
SHFileOp.pFrom = "c:\config.old" + Chr(0)
SHFileOp.pTo = "d:\t"
SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION
Call SHFileOperation(SHFileOp)

六、给combo的下拉框加宽和打开
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const CB_SHOWDROPDOWN = &H14F
Const CB_GETDROPPEDWIDTH = &H15F
Const CB_SETDROPPEDWIDTH = &H160

'改变下拉框的宽度,NewWidth为新宽度,可用strtmp取得最长的下拉框中的字符串,NewWidth=TextWidth(strTmp) * cbo1.FontSize / 9
SendMessage cbo1.hwnd, CB_SETDROPPEDWIDTH, NewWidth, 0

'弹出下拉框
SendMessage cbo1.hwnd, CB_SHOWDROPDOWN, True, 0

六、使关闭、最大、最小化不可用

声明:
Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

Public Const MF_BYPOSITION = &H400&
Public Const MF_REMOVE = &H1000&
使用:
Private Sub Form_Load()
Dim hSysMenu As Long
Dim nCnt As Long
Me.Show
hSysMenu = GetSystemMenu(Me.hwnd, False)
If hSysMenu Then
' 取得系统菜单中的数量
nCnt = GetMenuItemCount(hSysMenu)

If nCnt Then
' 编号 (0, 1, 2, 3...)
RemoveMenu hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE
'去掉 关闭 按钮
RemoveMenu hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE
' 去掉一个下划线
'注意下面的语句, 请根据不同 Form 类别具体情况进行调试,
' 没个语句将关闭不同的功能!!
'RemoveMenu hSysMenu, nCnt - 3, MF_BYPOSITION Or MF_REMOVE
'RemoveMenu hSysMenu, nCnt - 4, MF_BYPOSITION Or MF_REMOVE
'RemoveMenu hSysMenu, nCnt - 5, MF_BYPOSITION Or MF_REMOVE
DrawMenuBar Me.hwnd
' 重画
End If
End If
End Sub
98-9-09 更新: 感谢 提供的方法二:
Const MF_REMOVE = &H1000&
Const SC_CLOSE = &HF060
Const SC_MAXIMIZE = &HF030
并在 Sub Form_Load()中加入:
RemoveMenu GetSystemMenu(hwnd, 0), SC_CLOSE, MF_REMOVE
这样就可以使关闭按钮无效。同样加入
RemoveMenu GetSystemMenu(hwnd, 0), SC_MAXIMIZE, MF_REMOVE

 

Surpass 2003-06-25
  • 打赏
  • 举报
回复
二、此函数用于判断文件是否存在
Function FileExists%(filename$)
Dim F%

On Error Resume Next

F% = FreeFile
Open filename$ For Input As #F%
Close #F%

FileExists% = Not (Err <> 0)
End Function

三、播放AVI文件

声明:
Declare Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" (ByVal lpstrCommand As String, ByVal _
lpstrReturnString As String, ByVal uReturnLength _
As Long, ByVal hwndCallback As Long) As Long
代码:
Dim returnstring As String
FileName As String
returnstring = Space(127)
FileName = "C:\A1.avi"
erg = mciSendString("open " & Chr$(34) & FileName & _
Chr$(34) & " type avivideo alias video", returnstring, _
127, 0)
erg = mciSendString("set video time format ms", _
returnstring, 127, 0)
erg = mciSendString("play video from 0", returnstring, _
127, 0)
'记着关闭!
erg = mciSendString("close video", returnstring, 127, 0)

四、采用递归算法删除带有多级子目录的目录

Option Explicit

Private Sub Command1_Click()
Dim strPathName As String
strPathName = ""
strPathName = InputBox("请输入需要删除的文件夹名称∶", "删除文件夹")
If strPathName = "" Then Exit Sub

On Error GoTo ErrorHandle
SetAttr strPathName, vbNormal '此行主要是为了检查文件夹名称的有效性
RecurseTree strPathName
Label1.Caption = "文件夹" & strPathName & "已经删除!"
Exit Sub
ErrorHandle:
MsgBox "无效的文件夹名称:" & strPathName
End Sub

Sub RecurseTree(CurrPath As String)
Dim sFileName As String
Dim newPath As String
Dim sPath As String
Static oldPath As String

sPath = CurrPath & "\"

sFileName = Dir(sPath, 31) '31的含义∶31=vbNormal+vbReadOnly+vbHidden+vbSystem+vbVolume+vbDirectory
Do While sFileName <> ""
If sFileName <> "." And sFileName <> ".." Then
If GetAttr(sPath & sFileName) And vbDirectory Then '如果是目录和文件夹
newPath = sPath & sFileName
RecurseTree newPath
sFileName = Dir(sPath, 31)
Else
SetAttr sPath & sFileName, vbNormal
Kill (sPath & sFileName)
Label1.Caption = sPath & sFileName '显示删除过程
sFileName = Dir
End If
Else
sFileName = Dir
End If
DoEvents
Loop
SetAttr CurrPath, vbNormal
RmDir CurrPath
Label1.Caption = CurrPath
End Sub

Surpass 2003-06-25
  • 打赏
  • 举报
回复
一、VB的农历算法

'日期数据定义方法如下
'前12个字节代表1-12月为大月或是小月,1为大月30天,0为小月29天,
'第13位为闰月的情况,1为大月30天,0为小月29天,第14位为闰月的月
'份,如果不是闰月为0,否则给出月份,10、11、12分别用A、B、C来表
'示,即使用16进制。最后4位为当年家农历新年-即农历1月1日所在公历
'的日期,如0131代表1月31日。
'GetYLDate函数使用方式如下tYear为要输入的年,tMonth为月,tDay为
'日期,YLyear是返回值,返加农历的年份,如甲子年,YLShuXing返回
'的是属象,如鼠。IsGetGl是设置是不是通过农历取公历值,如果是,
'前三个返回相应的公历日期,而且返回值是一个公历日期。

Function GetYLDate(tYear As Integer, tMonth As Integer, tDay As Integer, _
YLyear As String, YLShuXing As String, _
Optional IsGetGl As Boolean) As String

On Error Resume Next
Dim daList(1900 To 2011) As String * 18
Dim conDate As Date, setDate As Date
Dim AddMonth As Integer, AddDay As Integer, AddYear As Integer, getDay As Integer
Dim RunYue As Boolean
If tYear > 2010 Or tYear < 1901 Then Exit Function '如果不是有效有日期,退出
'1900 to 1909
daList(1900) = "010010110110180131"
daList(1901) = "010010101110000219"
daList(1902) = "101001010111000208"
daList(1903) = "010100100110150129"
daList(1904) = "110100100110000216"
daList(1905) = "110110010101000204"
daList(1906) = "011010101010140125"
daList(1907) = "010101101010000213"
daList(1908) = "100110101101000202"
daList(1909) = "010010101110120122"
daList(1910) = "010010101110000210"
daList(1911) = "101001001101160130"
daList(1912) = "101001001101000218"
daList(1913) = "110100100101000206"
daList(1914) = "110101010100150126"
daList(1915) = "101101010101000214"
daList(1916) = "010101101010000204"
daList(1917) = "100101101101020123"
daList(1918) = "100101011011000211"
daList(1919) = "010010011011170201"
daList(1920) = "010010011011000220"
daList(1921) = "101001001011000208"
daList(1922) = "101100100101150128"
daList(1923) = "011010100101000216"
daList(1924) = "011011010100000205"
daList(1925) = "101011011010140124"
daList(1926) = "001010110110000213"
daList(1927) = "100101010111000202"
daList(1928) = "010010010111120123"
daList(1929) = "010010010111000210"
daList(1930) = "011001001011060130"
daList(1931) = "110101001010000217"
daList(1932) = "111010100101000206"
daList(1933) = "011011010100150126"
daList(1934) = "010110101101000214"
daList(1935) = "001010110110000204"
daList(1936) = "100100110111030124"
daList(1937) = "100100101110000211"
daList(1938) = "110010010110170131"
daList(1939) = "110010010101000219"
daList(1940) = "110101001010000208"
daList(1941) = "110110100101060127"
daList(1942) = "101101010101000215"
daList(1943) = "010101101010000205"
daList(1944) = "101010101101140125"
daList(1945) = "001001011101000213"
daList(1946) = "100100101101000202"
daList(1947) = "110010010101120122"
daList(1948) = "101010010101000210"
daList(1949) = "101101001010170129"
daList(1950) = "011011001010000217"
daList(1951) = "101101010101000206"
daList(1952) = "010101011010150127"
daList(1953) = "010011011010000214"
daList(1954) = "101001011011000203"
daList(1955) = "010100101011130124"
daList(1956) = "010100101011000212"
daList(1957) = "101010010101080131"
daList(1958) = "111010010101000218"
daList(1959) = "011010101010000208"
daList(1960) = "101011010101060128"
daList(1961) = "101010110101000215"
daList(1962) = "010010110110000205"
daList(1963) = "101001010111040125"
daList(1964) = "101001010111000213"
daList(1965) = "010100100110000202"
daList(1966) = "111010010011030121"
daList(1967) = "110110010101000209"
daList(1968) = "010110101010170130"
daList(1969) = "010101101010000217"
daList(1970) = "100101101101000206"
daList(1971) = "010010101110150127"
daList(1972) = "010010101101000215"
daList(1973) = "101001001101000203"
daList(1974) = "110100100110140123"
daList(1975) = "110100100101000211"
daList(1976) = "110101010010180131"
daList(1977) = "101101010100000218"
daList(1978) = "101101101010000207"
daList(1979) = "100101101101060128"
daList(1980) = "100101011011000216"
daList(1981) = "010010011011000205"
daList(1982) = "101001001011140125"
daList(1983) = "101001001011000213"
daList(1984) = "1011001001011A0202"
daList(1985) = "011010100101000220"
daList(1986) = "011011010100000209"
daList(1987) = "101011011010060129"
daList(1988) = "101010110110000217"
daList(1989) = "100100110111000206"
daList(1990) = "010010010111150127"
daList(1991) = "010010010111000215"
daList(1992) = "011001001011000204"
daList(1993) = "011010100101030123"
daList(1994) = "111010100101000210"
daList(1995) = "011010110010180131"
daList(1996) = "010110101100000219"
daList(1997) = "101010110110000207"
daList(1998) = "100100110110150128"
daList(1999) = "100100101110000216"
daList(2000) = "110010010110000205"
daList(2001) = "110101001010140124"
daList(2002) = "110101001010000212"
daList(2003) = "110110100101000201"
daList(2004) = "010110101010120122"
daList(2005) = "010101101010000209"
daList(2006) = "101010101101170129"
daList(2007) = "001001011101000218"
daList(2008) = "100100101101000207"
daList(2009) = "110010010101150126"
daList(2010) = "101010010101000214"
daList(2011) = "101101001010000214"
AddYear = tYear
RunYue = False

If IsGetGl Then
AddMonth = Val(Mid(daList(AddYear), 15, 2))
AddDay = Val(Mid(daList(AddYear), 17, 2))
conDate = DateSerial(AddYear, AddMonth, AddDay)
AddDay = tDay
For i = 1 To tMonth - 1
AddDay = AddDay + 29 + Val(Mid(daList(tYear), i, 1))
Next i
'MsgBox DateDiff("d", conDate, Date)
setDate = DateAdd("d", AddDay - 1, conDate)
GetYLDate = setDate
tYear = Year(setDate)
tMonth = Month(setDate)
tDay = Day(setDate)
Exit Function
End If
CHUSHIHUA:
AddMonth = Val(Mid(daList(AddYear), 15, 2))
AddDay = Val(Mid(daList(AddYear), 17, 2))
conDate = DateSerial(AddYear, AddMonth, AddDay)
setDate = DateSerial(tYear, tMonth, tDay)
getDay = DateDiff("d", conDate, setDate)
If getDay < 0 Then AddYear = AddYear - 1: GoTo CHUSHIHUA
' addday = NearDay
AddDay = 1: AddMonth = 1
For i = 1 To getDay
AddDay = AddDay + 1
If AddDay = 30 + Mid(daList(AddYear), AddMonth, 1) Or (RunYue And AddDay = 30 + Mid(daList(AddYear), 13, 1)) Then
If RunYue = False And AddMonth = Val("&H" & Mid(daList(AddYear), 14, 1)) Then
RunYue = True
Else
RunYue = False
AddMonth = AddMonth + 1
End If
AddDay = 1
End If

Next

md$ = "初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十"
dd$ = Mid(md$, (AddDay - 1) * 2 + 1, 2)
mm$ = Mid("正二三四五六七八九十寒腊", AddMonth, 1) + "月"
YouGetDate = DateSerial(AddYear, AddMonth, AddDay)
tiangan$ = "甲乙丙丁戊已庚辛壬癸"
dizhi$ = "子丑寅卯辰巳午未申酉戌亥"
Dim ganzhi(0 To 59) As String * 2
For i = 0 To 59
ganzhi(i) = Mid(tiangan$, (i Mod 10) + 1, 1) + Mid(dizhi$, (i Mod 12) + 1, 1)
'ff$ = ff$ + ganzhi(i)
Next i
'MsgBox ff$, , Len(ff$)
YLyear = ganzhi((AddYear - 4) Mod 60)
shu$ = "鼠牛虎兔龙蛇马羊猴鸡狗猪"
YLShuXing = Mid(shu$, ((AddYear - 4) Mod 12) + 1, 1)
If RunYue Then mm$ = "闰" + mm$

GetYLDate = mm$ + dd$

End Function


mysterious 2003-06-25
  • 打赏
  • 举报
回复
下了认真研究~~
JohnsonHome 2003-06-10
  • 打赏
  • 举报
回复
do while instr(position+lenth+1, richtextbox1.text, text) 〈〉 0

   position=instr(position+lenth+1, richtextbox1.text, text)-1

   richtextbox1.selstart=position

   richtextbox1.sellength=lenth

   richtextbox1.selcolor=rgb(255,0,0)

   loop
我试过了,这段代码不用也行啊
yamengyang 2003-06-10
  • 打赏
  • 举报
回复
同意 wtty9822(空气的呼吸) 的意见,还是前面的几篇文章不错,强烈支持!!
好久没上 2003-06-10
  • 打赏
  • 举报
回复
good
lwzlemon 2003-06-09
  • 打赏
  • 举报
回复
Mark
JohnsonHome 2003-06-09
  • 打赏
  • 举报
回复
能解释一下
position=instr(richtextbox1.text, text)-1
为什么要减去1?能说明一下吗?
wtty9822 2003-06-08
  • 打赏
  • 举报
回复
兄弟们,希望大家都能写一点像前面那样的基础性的东西

后面的嘛 ......呵呵
caucc 2003-06-08
  • 打赏
  • 举报
回复
up
online 2003-06-08
  • 打赏
  • 举报
回复
建立三层结构的ASP应用程序
本文介绍了三层结构应用程序的概念和优点,并结合一个实例介绍了如何建立三层结构的ASP应用程序。
http://www.ourfly.com/forum/View.aspx?fbId=8&Id=787

这篇文章比较容易的从c/s转为b/s,转载于网上

online 2003-06-08
  • 打赏
  • 举报
回复
我也贴
三层体系结构与数据库编程
接要 本文主要介绍了基于三层体系结构的网络数据库设计,并结合面向对象,分布式数据库开发等理论。全文围绕一个典型而简单的例子,通过VB编程语言,从分析、建模、设计、编码等各个角度对三层体系与数据库进行了全面而详细的阐述,文中提供了全部源代码。
http://www.ourfly.com/forum/View.aspx?fbId=9&Id=307
也是网上的
Creep1980 2003-06-08
  • 打赏
  • 举报
回复
up,up
thinkpad99 2003-06-08
  • 打赏
  • 举报
回复
so far so good
bydisplay 2003-06-04
  • 打赏
  • 举报
回复
一般
mouseanAnya 2003-06-04
  • 打赏
  • 举报
回复
收藏! :D
jordi2014 2003-06-04
  • 打赏
  • 举报
回复
谢谢,好贴。
加载更多回复(156)
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.3版分为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件。除此之外,增强版中还额外包含了c++ Redistributable Package,因此增强版不但能解决DirectX组件的问题,而且还能解决c++组件异常产生的问题。增强版适合无法自行解决c++相关问题的用户使用。在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了4项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“DirectX版本”选项卡可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。 同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388 所有的更新以及技术支持都可以到该博客上找到。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧