请问:如何读出用Foxpro存储的一系列DBF文件的数据,再把它拼成已制定好的XML格式的字符窜输出。
来者都有分,解决问题另外加分! 问题点数:100、回复次数:14Top
1 楼RSide(江边)回复于 2002-10-16 19:48:56 得分 1
ADO打开dbf文件,然后,生成xmlTop
2 楼iamsoloist(Soloist)回复于 2002-10-16 19:54:27 得分 90
用dao打开dbf库,我没有找到用ado的办法,呵
Dim ResultDb As DAO.Database
Set ResultDb = OpenDatabase(App.Path, False, False, "FoxPro 3.0;")
Set ResultTb = ResultDb.OpenRecordset("F1.dbf", dbOpenTable)
取值就简单了吧,输出成xml,按你定好的格式:)Top
3 楼Smith_79(蓝海)回复于 2002-10-16 20:09:38 得分 0
谢谢楼上的,因为这个XML结构很复杂,我对如何把Foxpro的数据拼成这样复杂的结构心里没底,楼上的能否详细讲一下用VB中拼出此字符窜的方法,是不是应当先把所有取出的数据都转为字符型,另外对XML中各种元素和属性的标记又如何处理呢?Top
4 楼Smith_79(蓝海)回复于 2002-10-17 14:07:18 得分 0
各位再来看看我这个问题呀!Top
5 楼Smith_79(蓝海)回复于 2002-10-17 14:59:00 得分 0
等待。Top
6 楼iamsoloist(Soloist)回复于 2002-10-17 18:24:28 得分 0
你的vb的支持foxpro部分的数据库驱动程序没有安装全,找vb6的盘,将数据库驱动全装上就可以了。Top
7 楼Smith_79(蓝海)回复于 2002-10-17 18:30:18 得分 0
我安装的是公司局域网上的VisualStudio ,安装数据库驱动程序是否要把VB整个重新安装,另外数据库驱动程序在VisualStudio里能找到吗,具体在拿个目录。Top
8 楼iamsoloist(Soloist)回复于 2002-10-18 08:14:14 得分 0
to:Smith_79(阿昌)
给你留言了,留言上有答案
Top
9 楼Smith_79(蓝海)回复于 2002-10-18 11:22:20 得分 0
你好:
连接DBF的问题已经解决了。但现在又有一个问题了,我可以读取其中一个目录下的DBF,但在读另一目录下的一个DBF时提示"can't access foxpro bound dbf file " 我看到该目录下有个DBC文件,里面有很多DBF文件(其中就有我要读的),我foxpro不大熟悉,请问该问题应该如何解决呀!谢谢。Top
10 楼iamsoloist(Soloist)回复于 2002-10-18 13:11:06 得分 0
dbc是foxpro的数据库文件,如果dbf文件为dbc的一部份的话,用我上面的方法是打不开的。我知道的方法,是用odbc连接foxpro数据库了。用ado取odbc数据库应该会吧!:)Top
11 楼Smith_79(蓝海)回复于 2002-10-18 14:52:46 得分 0
我很菜,真的不会呀!Top
12 楼Smith_79(蓝海)回复于 2002-10-18 15:36:38 得分 0
你好!
多次打搅你了,因为刚进公司老板催得紧,而我以前又是用BCB的,心里很焦急。
你说的“用odbc连接foxpro数据库了,用ado取odbc数据库”具体是怎样做的。
另外我在CSDN搜索了以前用ADO的方法。其中有个代码是这样的:
dim conn as new adodb.connection
Dim rs As New ADODB.Recordset
conn = "Provider=MSDASQL.1; " & _
"Persist Security Info=False; " & _
"Driver={Microsoft Visual FoxPro Driver}; " & _
"SourceDB=c:\temp;" & _
"SourceType=DBF;" & _
"Exclusive=No;"
cnn.Open conn
rs.CursorLocation = adUseClient
rs.Open "select * from ttable", cnn, adOpenKeyset, adLockPessimistic
但我用后在dim conn as new adodb.connection提示User defined type not defined而我在DAO方法中却没有此提示,这是怎么回事呀!
谢谢
Top
13 楼iamsoloist(Soloist)回复于 2002-10-18 16:29:20 得分 0
不用客气!不用着急!:)
这样。设置odbc的方法,你上网上搜索一下。
set con=server.CreateObject "adodb.connection") dbcon.Open "filedsn=c:\program files\common files\odbc\data sources\news.sql.dsn" set rs=server.createobject("adodb.recordset")
rs.open "select * from aaaaa",dbcon
我这个是文件odbc,语法类似:)上www.google.com上查一下吧Top
14 楼ddt555()回复于 2002-10-18 18:06:17 得分 9
我是用rdo打开VFP的表的。
下面的例子是我的一个程序里面的,是实现将DBF数据转到MDB里去的功能。
Dim rdoCN As New rdoConnection, rdoRS As rdoResultset
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
Dim rdoCNStr As String, rdoSQL As String
Dim cnStr As String, SQLStr As String
Dim cln As rdoColumn, i As Integer, nRC As Integer
rdoCN.Connect = "SourceType=DBF;" _
& "SourceDB=" & Left$(dbfName, InStrRev(dbfName, "\") - 1) & ";" _
& "Driver={Microsoft Visual FoxPro Driver}"
rdoCN.CursorDriver = rdUseOdbc
rdoCN.EstablishConnection "rdDriverNoPrompt"
dbfName = Right$(dbfName, Len(dbfName) - InStrRev(dbfName, "\")): dbfName = Left$(dbfName, InStr(dbfName, ".") - 1)
rdoSQL = "select * from " & dbfName
Set rdoRS = rdoCN.OpenResultset(rdoSQL, rdOpenKeyset, rdConcurRowVer)
rdoRS.MoveFirst
cn.Provider = "Microsoft.Jet.OLEDB.3.51"
cn.Open MDBName, "Admin" '若没有该年次的库,应该在调用本SUB之前建立之
SQLStr = "select * from " & TBName
With rs
Set .ActiveConnection = cn
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open SQLStr
End With
On Error GoTo CopyErr
'rs.MoveFirst '空库不能执行。数据传递
cn.BeginTrans
Do Until rdoRS.EOF
rs.AddNew
For i = 0 To rdoRS.rdoColumns.Count - 1
Set cln = rdoRS.rdoColumns(i)
rs(cln.Name).Value = cln.Value '指定字段
Next i
rs.Update
rdoRS.MoveNext
nRC = nRC + 1
If nRC = 300 Then
cn.CommitTrans
cn.BeginTrans
nRC = 0
End If
Loop
cn.CommitTrans '数据传递完毕
On Error GoTo 0
Set rdoCN = Nothing: Set rdoRS = Nothing
Set cn = Nothing: Set rs = Nothing
Exit Sub
CopyErr:
'Resume
cn.RollbackTrans
Error Err.Number
Top




