数据库类的扩展:利用FoxPro创建DBase表的注意细节

水如烟 2008-05-04 10:35:39
加精
这里需要注意的细节还真不少,只是不知道今天还有多少人使用DBase来存储数据.
...全文
413 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
mfhappy 2011-02-14
  • 打赏
  • 举报
回复
你好,我想问下dbase3中的数据可以导入到FoxPro中吗?dbase3怎样导入到FoxPro中?由于今天经理让我查这个问题,查了半天也没得出什么结论,还请楼主帮下我,dbase3和FoxPro以前从来都没有接触过。
CloneCenter 2008-05-05
  • 打赏
  • 举报
回复
仰望中……
学习中……
honkerhero 2008-05-05
  • 打赏
  • 举报
回复
MARK and Learn
水如烟 2008-05-05
  • 打赏
  • 举报
回复


    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
WNET.EnumResource( _
NetResource.ResourceScope.RESOURCE_CONNECTED _
, NetResource.ResourceType.RESOURCETYPE_DISK _
, NetResource.ResourceUsage.RESOURCEUSAGE_ALL _
, Nothing, AddressOf action)
End Sub

Private Sub action(ByVal resoure As NetResource.NETRESOURCE)
With resoure
Console.WriteLine(" {0} : LocalName='{1}' RemoteName='{2}'", .dwDisplayType.ToString(), .lpLocalName, .lpRemoteName)
End With
End Sub


结果是:
RESOURCEDISPLAYTYPE_SHARE : LocalName='I:' RemoteName='\\fk-a09-05\shared_db1'
水如烟 2008-05-05
  • 打赏
  • 举报
回复
我也尝试过利用WNetEnumResource枚举网络资源,但取不到那个列表。

Imports System.Runtime.InteropServices

Public Class NetResource
Private Sub New()
End Sub

Public Const CONNECT_UPDATE_PROFILE As Integer = &H1

Public Enum ResourceScope
''' <summary>
''' 枚举已连接的资源(忽略dwUsage)
''' </summary>
RESOURCE_CONNECTED = 1
''' <summary>
''' 枚举所有资源
''' </summary>
RESOURCE_GLOBALNET
''' <summary>
''' 只枚举永久性连接
''' </summary>
RESOURCE_REMEMBERED
''' <summary>
'''
''' </summary>
RESOURCE_RECENT
''' <summary>
'''
''' </summary>
RESOURCE_CONTEXT
End Enum

Public Enum ResourceType
''' <summary>
''' 枚举所有类型的网络资源
''' </summary>
RESOURCETYPE_ANY
''' <summary>
''' 枚举磁盘资源
''' </summary>
RESOURCETYPE_DISK
''' <summary>
''' 枚举打印资源
''' </summary>
RESOURCETYPE_PRINT
''' <summary>
'''
''' </summary>
RESOURCETYPE_RESERVED
End Enum

Public Enum ResourceUsage
''' <summary>
''' 只枚举那些能够连接的资源
''' </summary>
RESOURCEUSAGE_CONNECTABLE = &H1
''' <summary>
''' 只枚举包含了其他资源的资源
''' </summary>
RESOURCEUSAGE_CONTAINER = &H2
''' <summary>
'''
''' </summary>
RESOURCEUSAGE_NOLOCALDEVICE = &H4
''' <summary>
'''
''' </summary>
RESOURCEUSAGE_SIBLING = &H8
''' <summary>
'''
''' </summary>
RESOURCEUSAGE_ATTACHED = &H10
''' <summary>
'''
''' </summary>
RESOURCEUSAGE_ALL = RESOURCEUSAGE_CONNECTABLE Or RESOURCEUSAGE_CONTAINER Or RESOURCEUSAGE_ATTACHED
End Enum

Public Enum ResourceDisplayType
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_GENERIC
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_DOMAIN
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_SERVERrhf
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_SHARE
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_FILE
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_GROUP
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_NETWORK
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_ROOT
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_SHAREADMIN
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_DIRECTORY
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_TREE
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_NDSCONTAINER
End Enum

<StructLayout(LayoutKind.Sequential)> _
Public Structure NETRESOURCE
Public dwScope As ResourceScope
Public dwType As ResourceType
Public dwDisplayType As ResourceDisplayType
Public dwUsage As ResourceUsage
Public lpLocalName As String
Public lpRemoteName As String
Public lpComment As String
Public lpProvider As String
End Structure


<DllImport("mpr.dll", SetLastError:=True)> _
Public Shared Function WNetOpenEnum _
(ByVal dwScope As ResourceScope, _
ByVal dwType As ResourceType, _
ByVal dwUsage As ResourceUsage, _
<MarshalAs(UnmanagedType.AsAny)> ByVal lpNetResource As Object, _
ByRef lphEnum As IntPtr) As Integer
End Function

<DllImport("mpr.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Public Shared Function WNetCloseEnum _
(ByVal lphEnum As IntPtr) As Integer
End Function

<DllImport("mpr.dll", SetLastError:=True)> _
Public Shared Function WNetEnumResource _
(ByVal hEnum As IntPtr, _
ByRef lpCount As Integer, _
ByVal lpBuffer As IntPtr, _
ByRef lpBufferSize As Integer) As Integer
End Function

End Class


Imports System.Runtime.InteropServices

Public Class WNET

Public Shared Sub EnumResource(ByVal scope As NetResource.ResourceScope, ByVal type As NetResource.ResourceType, ByVal usage As NetResource.ResourceUsage, ByVal source As NetResource.NETRESOURCE, ByVal acton As Action(Of NetResource.NETRESOURCE))

Dim iRet As Integer
Dim ptrHandle As IntPtr = New IntPtr

Try

iRet = NetResource.WNetOpenEnum(scope, type, usage, source, ptrHandle)

If iRet <> 0 Then
Return
End If

Dim entries As Integer
Dim buffer As Integer = &H4000
Dim ptrBuffer As IntPtr = Marshal.AllocHGlobal(buffer)

Dim nextSource As NetResource.NETRESOURCE

Do While True
entries = -1
buffer = &H4000

iRet = NetResource.WNetEnumResource(ptrHandle, entries, ptrBuffer, buffer)

If iRet <> 0 OrElse entries < 1 Then
Return
End If

Dim ptr As Integer = ptrBuffer.ToInt32()

For i As Integer = 0 To entries - 1

nextSource = CType(Marshal.PtrToStructure(New IntPtr(ptr), GetType(NetResource.NETRESOURCE)), NetResource.NETRESOURCE)

EnumResource(scope, type, usage, nextSource, acton)

acton.Invoke(nextSource)

ptr += Marshal.SizeOf(nextSource)


Next i
Loop

Marshal.FreeHGlobal(ptrBuffer)

iRet = NetResource.WNetCloseEnum(ptrHandle)

Catch e As Exception
Console.WriteLine(e.ToString)
End Try
End Sub
End Class
水如烟 2008-05-05
  • 打赏
  • 举报
回复
至于取可用可连接的驱动器,我找不到可用的方法,但应该有这样的方法,
WNetConnectionDialog对话框的驱动器列表就列出了可用可连接的驱动器。

现在我暂时这样做:

Public Shared Function GetLastDrive() As Char
Dim usedDriveList As New List(Of String)
Dim result As Char = Nothing

For Each info As IO.DriveInfo In IO.DriveInfo.GetDrives
usedDriveList.Add(info.Name)
Next

For Each d As Char In Drives
Dim drive As String = String.Concat(d.ToString, IO.Path.VolumeSeparatorChar, IO.Path.DirectorySeparatorChar)
If Not usedDriveList.Contains(drive) Then
result = d
Exit For
End If
Next

Return result
End Function
Private Shared ReadOnly Drives() As Char = New Char() {"C"c, "D"c, "E"c, "F"c, "G"c, "H"c, "I"c, "J"c, "K"c, "L"c, "M"c, "N"c, "O"c, "P"c, "Q"c, "R"c, "S"c, "T"c, "U"c, "V"c, "W"c, "X"c, "Y"c, "Z"c}

水如烟 2008-05-05
  • 打赏
  • 举报
回复
如何映射、断开一个网络资源,需用到mpr.dll的有关方法。

Imports System.Runtime.InteropServices

Namespace LzmTW.uSystem
Friend Class Win32Native
Private Sub New()
End Sub

Public Const CONNECT_UPDATE_PROFILE As Integer = &H1

Public Enum ResourceScope
''' <summary>
''' 枚举已连接的资源(忽略dwUsage)
''' </summary>
RESOURCE_CONNECTED = 1
''' <summary>
''' 枚举所有资源
''' </summary>
RESOURCE_GLOBALNET
''' <summary>
''' 只枚举永久性连接
''' </summary>
RESOURCE_REMEMBERED
''' <summary>
'''
''' </summary>
RESOURCE_RECENT
''' <summary>
'''
''' </summary>
RESOURCE_CONTEXT
End Enum

Public Enum ResourceType
''' <summary>
''' 枚举所有类型的网络资源
''' </summary>
RESOURCETYPE_ANY
''' <summary>
''' 枚举磁盘资源
''' </summary>
RESOURCETYPE_DISK
''' <summary>
''' 枚举打印资源
''' </summary>
RESOURCETYPE_PRINT
''' <summary>
'''
''' </summary>
RESOURCETYPE_RESERVED
End Enum

Public Enum ResourceUsage
''' <summary>
''' 只枚举那些能够连接的资源
''' </summary>
RESOURCEUSAGE_CONNECTABLE = &H1
''' <summary>
''' 只枚举包含了其他资源的资源
''' </summary>
RESOURCEUSAGE_CONTAINER = &H2
''' <summary>
'''
''' </summary>
RESOURCEUSAGE_NOLOCALDEVICE = &H4
''' <summary>
'''
''' </summary>
RESOURCEUSAGE_SIBLING = &H8
''' <summary>
'''
''' </summary>
RESOURCEUSAGE_ATTACHED = &H10
''' <summary>
'''
''' </summary>
RESOURCEUSAGE_ALL = RESOURCEUSAGE_CONNECTABLE Or RESOURCEUSAGE_CONTAINER Or RESOURCEUSAGE_ATTACHED
End Enum

Public Enum ResourceDisplayType
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_GENERIC
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_DOMAIN
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_SERVERrhf
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_SHARE
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_FILE
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_GROUP
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_NETWORK
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_ROOT
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_SHAREADMIN
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_DIRECTORY
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_TREE
''' <summary>
'''
''' </summary>
RESOURCEDISPLAYTYPE_NDSCONTAINER
End Enum

<StructLayout(LayoutKind.Sequential)> _
Public Structure NETRESOURCE
Public dwScope As ResourceScope
Public dwType As ResourceType
Public dwDisplayType As ResourceDisplayType
Public dwUsage As ResourceUsage
Public lpLocalName As String
Public lpRemoteName As String
Public lpComment As String
Public lpProvider As String
End Structure

<DllImport("mpr.dll", SetLastError:=True)> _
Public Shared Function WNetAddConnection2 _
(ByRef lpNetResource As NETRESOURCE, _
ByVal lpPassword As String, _
ByVal lpUserName As String, _
ByVal dwFlags As Integer) As Integer
End Function

<DllImport("mpr.dll", SetLastError:=True)> _
Public Shared Function WNetCancelConnection2 _
(ByVal lpName As String, _
ByVal dwFlags As Integer, _
ByVal fForce As Integer) As Integer
End Function

End Class
End Namespace



Public Shared Function MapDrive(ByRef UNCPath As String, ByRef Drive As String, Optional ByVal user As String = Nothing, Optional ByVal pass As String = Nothing) As Boolean
Dim mDrive As String = GetLastDrive()
Drive = String.Empty

Dim data As New uSystem.Win32Native.NETRESOURCE
With data
.dwScope = LzmTW.uSystem.Win32Native.ResourceScope.RESOURCE_GLOBALNET
.dwType = LzmTW.uSystem.Win32Native.ResourceType.RESOURCETYPE_DISK
.dwUsage = LzmTW.uSystem.Win32Native.ResourceUsage.RESOURCEUSAGE_ALL
.lpLocalName = GetDriveName(CChar(mDrive))
.lpRemoteName = UNCPath
.lpComment = Nothing
.lpProvider = Nothing
End With

Dim result As Integer
result = LzmTW.uSystem.Win32Native.WNetAddConnection2(data, pass, user, 0)

If result = 0 Then
Drive = mDrive
Return True
Else
Drive = GetWin32ErrorMessage()
Return False
End If
End Function

Public Shared Function UnMapDrive(ByVal Driver As Char, ByRef ErrMessage As String) As Boolean
Dim mDrive As String = GetDriveName(Driver)
ErrMessage = String.Empty

Dim result As Integer
result = LzmTW.uSystem.Win32Native.WNetCancelConnection2(mDrive, 0, 1)

If result = 0 Then
Return True
Else
ErrMessage = GetWin32ErrorMessage()
Return False
End If
End Function

Private Shared Function GetDriveName(ByVal driver As Char) As String
If driver < "A"c OrElse driver > "z"c OrElse (driver > "Z"c And driver < "a"c) Then
Throw New Exception("驱动器无效")
End If

Return String.Concat(driver.ToString.ToUpper, IO.Path.VolumeSeparatorChar)
End Function
水如烟 2008-05-05
  • 打赏
  • 举报
回复
如何判断Connection的数据源是本地的一个文件夹还是UNC路径,可以通过URI的IsUnc属性来判断.

数据源对两种连接方式,其出处也不相同.
如同是连接到G:\Office

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim db As LzmTW.Data.Database

db = New LzmTW.Data.DBaseOleDbDatabase("g:\office")
Console.WriteLine(String.Format("DataSource:{0}, Database:{1}", db.DataSource, db.Database))

db = New LzmTW.Data.DBaseOdbcDatabase("g:\office")
Console.WriteLine(String.Format("DataSource:{0}, Database:{1}", db.DataSource, db.Database))

End Sub


结果是:
DataSource:g:\office, Database:
DataSource:DBASE, Database:g:\office

如果已知数据源(路径)
如连接到\\fk-a09-05\Shared,这是一个UNC路径,

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim uri As New Uri("\\fk-a09-05\shared")

Console.WriteLine(uri.IsUnc)

End Sub


其判断结果当然为True
水如烟 2008-05-05
  • 打赏
  • 举报
回复
ODBC,OLEDB两种连接方式,即
Private Const ConnnectionStringFormat As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV;User ID=Admin;Password=;"

Private Const ConnnectionStringFormat As String = "Driver={{Microsoft dBASE Driver (*.dbf)}};DriverID=277;Dbq={0};"

都允许UNC路径(形如\\computer\sharepath).
但在FoxPro2.6,是不允许的,只能通过映射共享文件为本地的一个驱动器来连接网络资源.

水如烟 2008-05-04
  • 打赏
  • 举报
回复
例如,如"我的文档"为表的文件夹

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim sql As String = "CREATE TABLE ""{0}\Hello.DBF""(name Character(80), addr Character(30), Salary Numeric(8,2), sex Logical, birthday Date,income Float(10,3))"
Dim path As String = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim shortPath As String = LzmTW.Data.Util.GetShortPathName(path)
Dim result As String = LzmTW.Data.FoxPro.CreateDBaseTable(String.Format(sql, shortPath))
Console.WriteLine(result)
End Sub


水如烟 2008-05-04
  • 打赏
  • 举报
回复
FoxPro2.6原是在Dos运行的,因此,文件名需要遵循8.3格式.

        <DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Public Shared Function GetShortPathName _
(ByVal longPath As String, _
<MarshalAs(UnmanagedType.LPTStr)> _
ByVal ShortPath As System.Text.StringBuilder, _
<MarshalAs(UnmanagedType.U4)> _
ByVal bufferSize As Integer) As Integer
End Function


        Public Shared Function GetShortPathName(ByVal Path As String) As String
Dim b As New System.Text.StringBuilder(1024)
Dim result As String
Dim value As Integer = uSystem.Win32Native.GetShortPathName(Path, b, 1024)
If value <> 0 Then
result = b.ToString()
Else
Throw New Exception("Failed to return a short path")
End If

Return result
End Function
水如烟 2008-05-04
  • 打赏
  • 举报
回复
创建表的示例语句

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim sql As String = "CREATE TABLE ""g:\Office\Hello.DBF""(name Character(80), addr Character(30), Salary Numeric(8,2), sex Logical, birthday Date,income Float(10,3))"
Dim result As String = LzmTW.Data.FoxPro.CreateDBaseTable(sql)
Console.WriteLine(result)
End Sub


如果成功创建,Result为String.Empty,否则,为错误信息.
水如烟 2008-05-04
  • 打赏
  • 举报
回复
uSystem.ConsoleOut.Execute(Me.GetCurentPathFullName(FoxRarExe), "", , Me.Path)

指定Me.Path是必要的,否则,fox.exe运行时生成的多个临时文件,不会在fox.exe所在的目录创建,而创建在程序即Application所在的目录.
水如烟 2008-05-04
  • 打赏
  • 举报
回复
exe文件的加载类

Namespace LzmTW.uSystem
Public Class ConsoleOut

Public Shared Function Execute(ByVal cmd As String, Optional ByVal waitTime As Integer = 500, Optional ByVal workingDirectory As String = "") As String
Dim result As String = ""
If String.IsNullOrEmpty(cmd) Then Return result

Dim Info As ProcessStartInfo = GetStartInfo(cmd, workingDirectory)

Return Execute(Info, waitTime)
End Function

Public Shared Function Execute(ByVal fileName As String, ByVal args As String, Optional ByVal waitTime As Integer = 500, Optional ByVal workingDirectory As String = "") As String
Dim result As String = ""
If String.IsNullOrEmpty(fileName) Then Return result

Dim Info As ProcessStartInfo = GetStartInfo(fileName, args, workingDirectory)

Return Execute(Info, waitTime)
End Function

Private Shared Function Execute(ByVal info As ProcessStartInfo, ByVal waitTime As Integer) As String
Dim result As String = ""

Dim process As New Process
process.StartInfo = info

Try
If process.Start Then
If waitTime = 0 Then
process.WaitForExit()
Else
process.WaitForExit(waitTime)
End If

result = process.StandardOutput.ReadToEnd
End If
Catch ex As Exception
result = ex.Message
Finally
process.Dispose()
process = Nothing
End Try

Return result
End Function

Private Shared Function GetStartInfo(ByVal cmd As String, ByVal WorkingDirectory As String) As ProcessStartInfo
Return GetStartInfo(System.Environment.GetEnvironmentVariable("ComSpec"), String.Format("/C {0}", cmd), WorkingDirectory)
End Function

Private Shared Function GetStartInfo(ByVal fileName As String, ByVal args As String, ByVal WorkingDirectory As String) As ProcessStartInfo
Dim mStartInfo As New ProcessStartInfo

With mStartInfo
.CreateNoWindow = True
.RedirectStandardOutput = True
.UseShellExecute = False
.WorkingDirectory = WorkingDirectory
.FileName = fileName
.Arguments = args
End With

Return mStartInfo
End Function
End Class
End Namespace
水如烟 2008-05-04
  • 打赏
  • 举报
回复
prg的解释程序,我的是FoxPro2.6的两个主要文件:FoxPro.exe,FoxPro.ovl,在后面中,我已改名为FOX.EXE,FOX.OVL

我这的FoxPro2.6,Fox.EXE应该是经过加密处理的.如果将Fox.EXE,Fox.OVL分别内嵌为项目资源,程序运行时将它们释放到磁盘生成相应文件,运行时出错,
说是Fox.Exe与Fox.Ovl不相配.

因此我利用WinRAR.exe将Fox.exe与Fox.ovl压缩成FoxRAR.exe自解压文件.
程序运行时将两个文件解压出来就可了.
Imports System.Security.Permissions
Imports Microsoft.VisualBasic

Namespace LzmTW.Data
<FileIOPermissionAttribute(SecurityAction.Demand, Unrestricted:=True)> _
Public Class FoxPro
Private gPath As String

'若有错误,则返回错误信息
Public Shared Function CreateDBaseTable(ByVal sqlForCreateTable As String) As String
'临时文件夹X:\LzmTWFox为Fox.exe的工作目录
Dim root As String = IO.Path.GetPathRoot(AppDomain.CurrentDomain.SetupInformation.ApplicationBase)
Dim tmpPath As String = Microsoft.VisualBasic.FileIO.FileSystem.CombinePath(root, "LzmTWFox")
If Not IO.Directory.Exists(tmpPath) Then
IO.Directory.CreateDirectory(tmpPath)
End If

Dim result As String = ""

Dim fox As New FoxPro(tmpPath)
Try
result = fox.CreateTable(sqlForCreateTable)
Catch ex As Exception
result = ex.Message
End Try

Return result
End Function

Private ReadOnly Property Path() As String
Get
Return gPath
End Get
End Property

Private Sub DeletePath()
FileIO.FileSystem.DeleteDirectory(Me.Path, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing)
End Sub

Private Sub Execute()
If Not IO.File.Exists(Me.GetCurentPathFullName(CreatePrg)) Then Return

uSystem.ConsoleOut.Execute(Me.GetCurentPathFullName(FoxExe), Me.GetCurentPathFullName(CreatePrg), 500, Me.Path)
End Sub

Public Function CreateTable(ByVal createSql As String) As String
Dim result As String = ""

'创建Create.prg文件
FoxPro.CreateFile(Me.GetCurentPathFullName(CreatePrg), FoxPro.CreatePrgString(createSql))

'执行Create.Prg文件
Me.Execute()

'检查错误文件,若有错误,返回错误信息
Dim fileInfo As New IO.FileInfo(Me.GetCurentPathFullName(CreateErr))
If fileInfo.Exists Then
Dim reader As IO.StreamReader = fileInfo.OpenText
result = reader.ReadToEnd
reader.Dispose()
reader = Nothing
End If

'For Each s As String In IO.Directory.GetFiles(Me.Path)
' Console.WriteLine(s)
'Next

'删除临时文件夹X:\LzmTWFox
Me.DeletePath()

Return result
End Function

Sub New(ByVal path As String)
Me.gPath = path

'自资源中释放FOX为FoxRar.Exe文件
Dim Res As System.Resources.ResourceManager = New System.Resources.ResourceManager("Resources", GetType(FoxPro).Assembly)
Dim bytes As Byte() = CType(Res.GetObject(FOX), Byte())
FoxPro.CreateFile(Me.GetCurentPathFullName(FoxRarExe), bytes)

'解压出文件Fox.Exe,Fox.OVL
uSystem.ConsoleOut.Execute(Me.GetCurentPathFullName(FoxRarExe), "", , Me.Path)

'删除FoxRar.Exe文件
IO.File.Delete(Me.GetCurentPathFullName(FoxRarExe))
End Sub

Private ReadOnly FOX As String = "FOX"
Private ReadOnly FoxRarExe As String = "FoxRar.EXE"
Private ReadOnly FoxExe As String = "FOX.EXE"
Private ReadOnly CreatePrg As String = "Create.Prg"
Private ReadOnly CreateErr As String = "Create.Err"


Private Function GetCurentPathFullName(ByVal fileName As String) As String
Return Microsoft.VisualBasic.FileIO.FileSystem.CombinePath(Me.Path, fileName)
End Function

Private Shared Function CreatePrgString(ByVal SqlForCreateTable As String) As String
Dim b As New System.Text.StringBuilder
b.AppendLine("SET SAFETY OFF;")
b.AppendLine("SET DEBUG OFF;")
b.AppendLine("")
b.AppendLine("ON ERROR DO ErrHandle;")
b.AppendLine("")
b.AppendLine(SqlForCreateTable & ";")
b.AppendLine("")
b.AppendLine("QUIT;")
b.AppendLine("")
b.AppendLine("PROCEDURE ErrHandle")
b.AppendLine("QUIT")

Return b.ToString
End Function

Private Shared Sub CreateFile(ByVal fileName As String, ByVal content As Byte())
Dim fileInfo As New IO.FileInfo(fileName)
Dim stream As IO.FileStream = fileInfo.Open(IO.FileMode.Create)
stream.Write(content, 0, content.Length)
stream.Flush()
stream.Dispose()
stream = Nothing
End Sub

Private Shared Sub CreateFile(ByVal fileName As String, ByVal content As String)
Dim Writer As New IO.StreamWriter(fileName, False)
Writer.Write(content)
Writer.Flush()
Writer.Dispose()
Writer = Nothing
End Sub
End Class
End Namespace
水如烟 2008-05-04
  • 打赏
  • 举报
回复
prg文件模板

SET SAFETY OFF;
SET DEBUG OFF;

ON ERROR DO ErrHandle;

#SQL#

QUIT;

PROCEDURE ErrHandle
QUIT


比如创建一个DBase表的prg

SET SAFETY OFF;
SET DEBUG OFF;

ON ERROR DO ErrHandle;

CREATE TABLE "G:\Office\Hello.DBF"(name Character(80), addr Character(30), Salary Numeric(8,2), sex Logical, birthday Date,income Float(10,3));

QUIT;

PROCEDURE ErrHandle
QUIT
数据库的分   模糊数据库   指能够处理模糊数据的数据库。一般的数据库都是以二直逻辑和精确的数据工具为基础的,不能示许多模糊不清的事情。随着模糊数学理论体系的建立,人们可以用数量来描述模糊事件并能进行模糊运算。这样就可以把不完全性、不确定性、模糊性引入数据库系统中,从而形成模糊数据库。模糊数据库研究主要有两方面,首先是如何在数据库中存放模糊数据;其次是定义各种运算建立模糊数据上的函数。模糊数的示主要有模糊区间数、模糊中心数、模糊集合数和隶属函数等。   统计数据库   管理统计数据的数据库系统。这数据库包含有大量的数据记录,但其目的是向用户提供各种统计汇总信息,而不是提供单个记录的信息。   网状数据库   处理以记录型为结点的网状数据模型的数据库。处理方法是将网状结构分解成若干棵二级树结构,称为系。系型是二个或二个以上的记录型之间联系的一种描述。在一个系型中,有一个记录型处于主导地位,称为系主记录型,其它称为成员记录型。系主和成员之间的联系是一对多的联系。网状数据库的代是DBTG系统。1969年美国的CODASYL组织提出了一份“DBTG报告”,以后,根据DBTG报告实现的系统一般称 为DBTG系统。现有的网状数据库系统大都是采用DBTG方案的。DBTG系统是典型的三级结构体系:子模式、模式、存储模式。相应的数据定义语言分别称为子模式定义语言SSDDL,模式定义语言SDDL,设备介质控制语言DMCL。另外还有数据操纵语言DML。   演绎数据库   是指具有演绎推理能力的数据库。一般地,它用一个数据库管理系统和一个规则管理系统来实现。将推理用的事实数据存放在数据库中,称为外延数据库;用逻辑规则定义要导出的事实,称为内涵数据库。主要研究内容为,如何有效地计算逻辑规则推理。具体为:递归查询的优化、规则的一致性维护等。   Access数据库   美国Microsoft公司于1994年推出的微机数据库管理系统。它具有界面友好、易学易用、开发简单、接口灵活等特点,是典型的新一代桌面数据库管理系统。其主要特点如下:   (1)完善地管理各种数据库对象,具有强大的数据组织、用户管理、安全检查等功能。   (2)强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户数据库管理系统具有传统的XBASE(DBASE、FoxBASE的统称)数据库系统所无法实现的客户服务器(Cient/Server)结构和相应的数据库安全机制,Access具备了许多先进的大型数据库管理系统所具备的特征,如事务处理/出错回滚能力等。   (3)可以方便地生成各种数据对象,利用存储的数据建立窗体和报,可视性好。   (4)作为Office套件的一部分,可以与Office集成,实现无缝连接。   (5)能够利用Web检索和发布数据,实现与Internet的连接。 Access主要适用于中小型应用系统,或作为客户机/服务器系统中的客户端数据库。   Informix数据库   美国InfomixSoftware公司研制的关系型数据库管理系统。Informix有Informix-SE和Informix-Online两种版本。Informix-SE适用于UNIX和WindowsNT平台,是为中小规模的应用而设计的;Informix-Online在UNIX操作系统下运行,可以提供多线程服务器,支持对称多处理器,适用于大型应用。   Informix可以提供面向屏幕的数据输入询问及面向设计的询问语言报告生成器。数据定义包括定义关系、撤销关系、定义索引和重新定义索引等。Informix不仅可以建立数据库,还可以方便地重构数据库,系统的保护措施十分健全,不仅能使数据得到保护而不被权限外的用户存取,且能重新建立丢失了的文件及恢复被破坏了的数据。其文件的大小不受磁盘空间的限制,域的大小和记录的长度均可达2K。采用加下标顺序访问法,Informix与COBOL软件兼容,并支持C语言程序。 Informix可移植性强、兼容性好,在很多微型计算机和小型机上得到应用,尤其适用于中小型企业的人事、仓储及财务管理。   Orcale数据库   美国Orcale公司研制的一种关系型数据库管理系统,是一个协调服务器和用于支持任务决定型应用程序的开放型RDBMS。它可以支持多种不同的硬件和操作系统平台,从台式机到大型和超级计算机,为各种硬件结构提供高度的可伸缩性,支持对称多处理器、群集多处理器、大规模处理器等,并提供广泛的国际语言支持。 Orcale是一个多用户系统,能自动从批处理或在线环境的系统故障中恢复运行。系统提供了一个完整的软件开发工具Developer2000,包括交互式应用程序生成器、报打印软件、字处理软件以及集中式数据字典,用户可以利用这些工具生成自己的应用程序。Orcale以二维的形式示数据,并提供了SQL(结构式查询语言),可完成数据查询、操作、定义和控制等基本数据库管理功能。Orcale具有很好的可移植性,通过它的通信功能,微型计算机上的程序可以同小型乃至大型计算机上的Orcale,并且能相互传递数据。另外Orcale还具有与C语言的接电子格、图形处理等软件。 Orcale属于大型数据库系统,主要适用于大、中小型应用系统,或作为客户机/服务器系统中服务器端的数据库系统。   DB2数据库   IBM公司研制的一种关系型数据库系统。DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于OS/2、Windows等平台下。 DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SQL命令。DB2采用了数据分级技术,能够使大型机数据很方便地下载到LAN数据库服务器,使得客户机/服务器用户和基于LAN的应用程序可以访问大型机数据,并使数据库本地化及远程连接透明化。 它以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能,并支持多任务并行查询。 DB2具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统尤为适用。   SQLServer数据库   美国Microsoft公司推出的一种关系型数据库系统。SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。 其主要特点如下:   (1)高性能设计,可充分利用WindowsNT的优势。   (2)系统管理先进,支持Windows图形化管理工具,支持本地和远程的系统管理和配置。   (3)强壮的事务处理功能,采用各种方法保证数据的完整性。   (4)支持对称多处理器结构、存储过程、ODBC,并具有自主的SQL语言。 SQLServer以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台。   Sybase数据库   美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统。 Sybase提供了一套应用程序编程接口和库,可以与非Sybase数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触发器、存储过程、规则以及完整性定义,支持优化查询,具有较好的数据安全性。Sybase通常与SybaseSQLAnywhere用于客户机/服务器环境,前者作为服务器数据库,后者为客户机数据库,采用该公司研制的PowerBuilder为开发工具,在我国大中型系统中具有广泛的应用。美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统。 Sybase提供了一套应用程序编程接口和库,可以与非Sybase数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触发器、存储过程、规则以及完整性定义,支持优化查询,具有较好的数据安全性。Sybase通常与SybaseSQLAnywhere用于客户机/服务器环境,前者作为服务器数据库,后者为客户机数据库,采用该公司研制的PowerBuilder为开发工具,在我国大中型系统中具有广泛的应用。   FoxPro数据库   最初由美国Fox公司1988年推出,1992年Fox公司被Microsoft公司收购后,相继推出了FoxPro2.5、2.6和VisualFoxPro等版本,其功能和性能有了较大的提高。 FoxPro2.5、2.6分为DOS和Windows两种版本,分别运行于DOS和Windows环境下。FoxPro比FoxBASE在功能和性能上又有了很大的改进,主要是引入了窗口、按纽、列框和文本框等控件,进一步提高了系统的开发能力。   什么是数据库的主码(主键)?   能够唯一示数据中的每个记录的【字段】或者【字段】的组合就称为主码。   什么是数据库?   数据数据库中一个非常重要的对象,是其他对象的基础。没有数据,关键字、主键、索引等也就无从谈起。在数据库画板中可以显示数据库中的所有数据(即使不是用PowerBuilder创建),创建数据,修改的定义等数据数据库中一个非常重要的对象,是其他对象的基础。没有数据,关键字、主键、索引等也就无从谈起。在数据库画板中可以显示数据库中的所有数据(即使不是用PowerBuilder创建),创建数据,修改的定义等
第一节 Xbase系列数据库产品概述   数据库理论的研究在七十年代后期进入较为成熟的阶段,随着八十年代初 IBM/PC及其兼容机的广泛使用,数据库产品的代作之一,Ashton-Tate公司开发的dBASE很快进入微机世界,成为一个相当普遍而且受欢迎的数据库管理系统。用户只需键入简单的命令,即可轻易完成数据库的建立,增添、修改、查询、索引以及产生报或标签,或者利用其程序语言开发应用系统程序。由于它易于使用,功能较强,很快成为八十年代中期的主导数据库系统(极盛时期曾在个人计算机的数据库管理系统市场上的占有率高达80-85%)。继dBASE II 之后,dBASE III,dBASE III Plus 以及dBASE IV相继诞生,其功能逐渐增强。   但是,dBASE存在的一些缺陷使其应用受到越来越大的限制。首先,它运行速度慢,这在建立大型数据库时显得尤为突出。其次,早期的dBASE不带编译器,仅是解释执行,后来虽然增加了编译器,但编译与解释执行时存在许多差异。再就是它的设计标准,随着dBASE增强版本的出现,由于各版本之间不相兼容,其标准变得越来越模糊,Ashton-Tate公司不再定义dBASE标准,就连dBASE IV本身也未按标准设计。后来,人们常用Xbase示各种数据库管理系统的程序设计语言。 致力于改进dBASE语言软件公司的着眼点则放在兼顾挂靠速度与友好性。其做法是:继续保有如dBASE般以交互式与用户双向通信的用户界面,以维持其友好性;对于程序,将其转成非常接近机器码的中间码,以节省汇编时间增快其执行速度。 从事该项工作之一的Fox Software 正是看到了dBASE在性能与速度上存在的问题,也预见到了PC平台上DBMS的巨大潜力,在成立后的第二年(1984年)便推出了与dBASE全兼容的FoxBASE,其速度大大快于dBASE,并且在FoxBASE中第一次引入了编译器。 1986年,与dBASE III Plus兼容的FoxBASE+推出后不久,FoxPro/LAN也投入市场,一时间引起轰动。 1987年之后相继推出了FoxBASE+ 2.0和2.10,这两个产品不仅速度上超越其前期产品,而且还扩充了对开发者极其有用的语言,并提供了良好的界面和较为丰富的工具。 人们预测,随着软件技术的快速发展,PC DBMS(数据库管理系统)必将发生巨大的变化。它将越来越易于使用,为各个层次的用户完成底层复杂的工作;它将提供更完整、更标准的Xbase语言和丰富的工具,并且具有面向对象的特点;多媒体技术将引入,人们可以建立其上的分布式数据库来存取各种数据而无需考虑这些数据的物理位置。为了顺应这一发展趋势,FoxPro 诞生了,它旨在创建Xbase语言的标准,它的每一个版本都向这一方向努力,其功能越来越完善和丰富。 1989年下半年,FoxPro 1.0 正式推出,它首次引入了基于 DOS 环境的窗口技术 COM (面向字符的窗口),用户使用的界面再也不是圆点,而是能产生圆点提示下等效命令的菜单系统。它支持鼠标,操作方便,是一个与dBASE、FoxBASE全兼容的编译型集成环境式的数据库系统。 1991年,FoxPro 2.0推出。由于使用了Rushmore 查询优化技术、先进的关系查询与报技术以及整套第四代语言工具,FoxPro 2.0在性能上大幅度地提高了。它面向对象与事件,其扩展版充分使用全部现存的扩展内存,是一个真正的32位产品。它除了支持 FoxPro先前版本的全部功能外,还增加了100多条全新的命令与函数,从而使得FoxPro 的程序设计语言逐步成为Xbase 语言的标准。在与dBASE IV、Paradox、Clipper等同时期其他竞争产品一起参加基准测试中,FoxPro 能以百倍快的速度大大超越其它竞争者。因此,该公司常用的广告用语为“Nothing Runs Like The Fox”(没有东西跑得像狐狸那么快)。 FoxPro2.0 第一次引入SQL结构化设计语言以及和直观的按例关系查询;它采用存入备注数据字段的方式,不产生独立存在的 .obj 文件;其目标程序若再配合 Fox Distribution Kit 链接后即变成可直接在DOS下执行的.exe文件;同时,它支持鼠标操作,不需额外处理即允许用户在程序中加入鼠标功能;它的应用程序生成器(application buikder)、特有的项目管理程序(project manager),在寻找文件、记录文件所在位置以及处理编译后的目标程序的方式,是同一时期,其他同产品所不能比拟的。这使得FoxPro荣获当年度美国诸多杂志所评选取的多项优秀成果奖。 1992年微软收购了Fox 公司,把FoxPro纳入自己的产品中。它利用自身的技术优势和巨大的资源,在不长的时间里开发出FoxPro2.5、FoxPro2.6等大约20个软件产品及其相关产品,包括DOS、Windows、Mac和UNIX四个平台的软件产品。1995年6月,微软推出了Visual FoxPro 3.0版。接着又很快推出Visual FoxPro 5.0及其中文版。1998年发布了可视化编程语言集成包Visual Stadio 6.0 ,本课程介绍的Visual FoxPro 6.0(中文版)就是其中的一员。它是可运行于Windows95/98,Windows NT 平台的32位数据库开发系统。它是能充分发挥32位微处理器的强大功能,直观易用的编程工具。其强大的功能将在下一节中加以介绍。 注:1、在本课程中,如不说明,Visual FoxPro及VFP6.0 都指的是(中文版)。
网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。   Bootcfg   bootcfg 命令启动配置和故障恢复(对于大多数计算机,即 boot.ini 文件)。   含有下列参数的 bootcfg 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 bootcfg 命令。   用法:   bootcfg /default  设置默认引导项。   bootcfg /add    向引导列中添加 Windows 安装。   bootcfg /rebuild  重复全部 Windows 安装过程并允许用户选择要添加的内容。   注意:使用 bootcfg /rebuild 之前,应先通过 bootcfg /copy 命令备份 boot.ini 文件。   bootcfg /scan    扫描用于 Windows 安装的所有磁盘并显示结果。   注意:这些结果被静态存储,并用于本次会话。如果在本次会话期间磁盘配置发生变化,为获得更新的扫描,必须先重新启动计算机,然后再次扫描磁盘。   bootcfg /list   列出引导列中已有的条目。   bootcfg /disableredirect 在启动引导程序中禁用重定向。   bootcfg /redirect [ PortBaudRrate] |[ useBiosSettings]   在启动引导程序中通过指定配置启用重定向。   范例: bootcfg /redirect com1 115200 bootcfg /redirect useBiosSettings   hkdsk   创建并显示磁盘的状态报告。Chkdsk 命令还可列出并纠正磁盘上的错误。   含有下列参数的 chkdsk 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 chkdsk 命令。   vol [drive:] [ chkdsk [drive:] [/p] [/r]   参数  无   如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。 drive: 指定要 chkdsk 检查的驱动器。 /p   即使驱动器不在 chkdsk 的检查范围内,也执行彻底检查。该参数不对驱动器做任何更改。 /r   找到坏扇区并恢复可读取的信息。隐含着 /p 参数。   注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart   创建和删除硬盘驱动器上的分区。diskpart 命令仅在使用故障恢复控制台时才可用。   diskpart [ /add |/delete] [device_name |drive_name |partition_name] [size]   参数 无   如果不带任何参数,diskpart 命令将启动 diskpart 的 Windows 字符模式版本。   /add   创建新的分区。   /delete   删除现有分区。   device_name   要创建或删除分区的设备。设备名称可从 map 命令的输出获得。例如,设备名称:   DeviceHardDisk0   drive_name   以驱动器号示的待删除分区。仅与 /delete 同时使用。以下是驱动器名称的范例:   D:   partition_name   以分区名称示的待删除分区。可代替 drive_name 使用。仅与 /delete 同时使用。以下是分区名称的范例:   DeviceHardDisk0Partition1    大小   要创建的分区大小,以兆字节 (MB)示。仅与 /add 同时使用。   范例   下例将删除分区: diskpart /delete Device HardDisk0 Partition3 diskpart /delete F:   下例将在硬盘上添加一个 20 MB 的分区:   diskpart /add Device HardDisk0 20   Fixboot

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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