Office中国论坛/Access中国论坛

标题: 關于getopenfilename的用法. [打印本页]

作者: ADAM    时间: 2003-11-1 01:31
标题: 關于getopenfilename的用法.
花了一天時間調試一段語句...
結果居然是引用apd函數的getopenfilename的問題
(返回值多了一個空格,而錯誤提示又不是說文件名錯...,真是苦啊,,,)
真是....
一知半解真的要不得..
所以...
那位大俠把這個函數的詳細用法貼出來,參考一下啊,
我不勝感激...
(請不要只貼範例代碼...)
先謝了
作者: 竹笛    时间: 2003-11-1 17:42
想实现什么功能?是API函数吧?你写的是apd函數。
作者: ADAM    时间: 2003-11-1 17:54
是api,打錯了..呵呵
想實現的功能,只能簡單的打開"開啟檔案"對話框,選擇一個檔案名,
然后按這個檔案名交回給程序處理...
原來一直不想用這個,后來不用還不行...
據我所知:有三種辦法可以讀取路徑名+文件名
1.用api函數
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As openfilename) As Long

2.用excel的getopenfilename
自創的,但調用簡單,但較慢...

3.用那個dia...的什么控件..
這個不知引用那一個,且用法也不清楚..

對比這三種方法...
不知那一種較好...
原來用第二種,但較慢,放棄了,現用第一種,但也不是很清楚

所以...

誰來做個這題目....

作者: 大頭    时间: 2003-11-1 18:41
http://www.erpbus.net/access/topic.asp?topic_id=9648&forum_id=84&CurPage=2
這個是
ACCESS交流中心
沉入海底的東西

去打撈吧



[此贴子已经被作者于2003-11-1 10:41:49编辑过]


作者: ADAM    时间: 2003-11-1 19:31
好像是關于鏈接表的例子啊...
作者: 大頭    时间: 2003-11-1 20:07

Dim strSearchPath As String
Dim strFileName As String
strSearchPath = "c:\"
   strFileName = FindNorthwind(strSearchPath)   '
MsgBox strFileName    路徑名+文件名  



[此贴子已经被作者于2003-11-1 13:14:55编辑过]


作者: ADAM    时间: 2003-11-2 00:55
FindNorthwind
这个是什么函数,自制的还是ACCESS有的。。。没见过啊 。。。

作者: 大頭    时间: 2003-11-2 07:42
Private Sub Command0_Click()

Dim strSearchPath As String
Dim strFileName As String
strSearchPath = "c:\"
   strFileName = FindNorthwind(strSearchPath)   '
MsgBox strFileName    路徑名+文件名

End Sub
我的意思是
作個按鍵button
執行上述指令
FindNorthwind 是公用模組(自製)



作者: ADAM    时间: 2003-11-3 16:12
呵呵....
我就是問FindNorthwind怎么寫的...
還要麻煩你的....

作者: 没牙兔兔    时间: 2003-11-3 18:26
嘻嘻,前天也看了这个帖子,不知道自己理解的对不对,不敢回答
这里把我关于文件存取的实现写下来,不知道是不是你需求的功能!
首先引用  Microsoft Windows Common Controls 6.0  即(Mscomctl.ocx)
然后就可以在窗体中加入ActiveX控件  CommonDialog ,命名为 【dlgCommon】
VBA实现:

Dim tmpFileName As String, DBfile As String, Xpath As String
    Dim Response
   ‘使用iif,主要是如果选定的文件在"d:\"的话,会多了一个“\“,所以要去掉,否则会出错
    Xpath = IIf(Len(Application.CurrentProject.Path) = 3, Left(Application.CurrentProject.Path, 2), Application.CurrentProject.Path)
     
    DBfile = Xpath & "\dbsourcedb.mdb"
    Me.dlgCommon.CancelError = False
    Me.dlgCommon.ShowOpen
   ’这个就是取到文件名,不知道是不是ADAM想要得
    tmpFileName = Me.dlgCommon.FileName
    If Len(tmpFileName) > 0 Then
        Response = MsgBox("还原指定的备份文件将不可逆操作!!" & vbCrLf & "确认选定的备份文件正确么?", vbYesNo, "数据库还原")
        If Response = vbYes Then
            Kill DBfile
            FileCopy tmpFileName, DBfile
            MsgBox "数据库已还原为指定的备份文件!"
        Else
            MsgBox "还原操作已撤销!"
         End If
    'tmpFileName = IIf(InStrRev(Me.dlgCommon.FileName, "\") > 0, Right(Me.dlgCommon.FileName, Len(Me.dlgCommon.FileName) - k), Me.dlgCommon.FileName)
    Else
        MsgBox "未选定备份文件,还原操作已撤销!"
    End If
作者: 没牙兔兔    时间: 2003-11-3 18:46
呵呵,写错了一点
上面取的是整个的路径
如果要取文件名的话,兔兔不知道可不可以直接用属性取,不过也可以用下面的方法实现
mefile= Right(Me.dlgCommon.FileName, Len(Me.dlgCommon.FileName) - InStrRev(Me.dlgCommon.FileName, "\"))

InStrRev返回一个字符串在另一个字符串中出现的位置,从字符串的末尾算起
right 就是从尾巴开始取符合要求的文件名
作者: ADAM    时间: 2003-11-3 19:22
多謝你費心了..
你這是應用控件實現的...
但是這樣移植性不好,萬一別人機子上沒這個控件,
豈不出錯了.如果自帶這個來引用..就比較好..

作者: 没牙兔兔    时间: 2003-11-3 20:05
呵呵,方法三是有这个问题
正头疼也是这个问题
所以现在编写的数据库都只能打包发布啦
对着 引用 把一个一个的控件都加上,Access自己扫描的控件还经常会漏掉几个
而且 好像就是这个dlgCommon控件,安装的时候,如果机器已经有了,就会提示覆盖出错
只能选择 忽略

关注你的方法一ing....
作者: ADAM    时间: 2003-11-3 22:53
對了,打包時候發布
控件檔案在新安裝目錄下....
用currentproject.path,及referens可以新增
但對于api函數引用..
Declare Function GetComputerNameA Lib "kernel32" _
                                 (ByVal strBuffer As String, lngSize As Long) As Long
lib后面如果要用安裝目錄下的函數庫,該怎么引用
我試這,只能引用固定目錄下的...如:"d:\kernel32.DLL"等...




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3