|
|
'//+---------------------------------------------------------------------------- '// '// File: global.bas '// '// Module: pbadmin.exe '// '// Synopsis: The implementation of functions global to PBA. '// '// Copyright (c) 1997-1999 Microsoft Corporation '// '// Author: quintinb Created Header 09/02/99 '// '//+----------------------------------------------------------------------------
Attribute VB_Name = "global" Option Explicit
'Declare configuration global variables Public PBFileName As String Public RegionFilename As String Public signature As String Public PartialCab As String Public FullCab As String Public DBName As String Public locPath As Variant 'define the app path. Public updateFound As Integer Public gStatusText(0 To 1) As String Public gRegionText(-1 To 0) As String Public gCommandStatus As Integer Public gBuildDir Public gCLError As Boolean Public HTMLHelpFile As String
' Registry and resource values Global gsRegAppTitle As String
'region edit list Type EditLists Action() As String Region() As String OldRegion() As String ID() As Integer Count As Integer End Type
Public Type tmpFont Name As String Size As Integer Charset As Integer End Type
Public gfnt As tmpFont
'Declare the global constants for flag calculations Global Const Global_Or = 2 Global Const Global_And = &HFFFF Public result As Long Public service As Integer
'Set the check point for the insert operation Public code As Integer
Public Type bitValues desc(1) As String End Type
Public gQuote As String
'Declare the database and dynasets for the tables Public gsCurrentPB As String Public gsCurrentPBPath As String Public MyWorkspace As Workspace Public gsyspb As Database Public Gsyspbpost As Database Public GsysRgn As Recordset Public GsysCty As Recordset Public GsysDial As Recordset Public GsysVer As Recordset Public GsysDelta As Recordset
'Declare the recordset for accessing information Public GsysNRgn As Recordset Public GsysNCty As Recordset Public GsysNDial As Recordset Public GsysNVer As Recordset Public GsysNDelta As Recordset Public temp As Recordset
'Declare recordset to directly hand DAO RS to data control Public rsDataDelta As Recordset Public dbDataDelta As Database
'registry Global Const HKEY_LOCAL_MACHINE = &H80000002 Global Const KEY_ALL_ACCESS = &H3F Global Const ERROR_NONE = 0 Public Const REG_SZ = 1 Public Const REG_DWORD = 4 Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value. Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Declare Function RegQueryValueExString Lib "advapi32.dll" Alias _ "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _ String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _ As String, lpcbData As Long) As Long Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias _ "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _ String, ByVal lpReserved As Long, lpType As Long, lpData As _ Long, lpcbData As Long) As Long Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias _ "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _ String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _ As Long, lpcbData As Long) As Long 'Public gsDAOPath As String 'Declare Function DllRegisterServer Lib "gsDAOPath" () As Long
Declare Function OSWritePrivateProfileString% Lib "kernel32" _ Alias "WritePrivateProfileStringA" _ (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal FileName$) Declare Function OSWritePrivateProfileSection% Lib "kernel32" _ Alias "WritePrivateProfileSectionA" _ (ByVal AppName$, ByVal KeyName$, ByVal FileName$) 'Declare Function OSGetPrivateProfileString% Lib "kernel32" _ ' Alias "GetPrivateProfileStringA" _ ' (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal ReturnString$, ByVal NumBytes As Integer, ByVal FileName$)
Declare Function OSWinHelp% Lib "user32" Alias "WinHelpA" (ByVal hWnd&, ByVal HelpFile$, ByVal wCommand%, dwData As Any) 'helpfile API 'Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long, ByVal HelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As Long 'helpfile API Declare Function HtmlHelp Lib "hhwrap.dll" Alias "CallHtmlHelp" (ByVal hWnd As Long, ByVal HelpFile As String, ByVal wCommand As Long, ByVal dwData As Any) As Long 'Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" (ByVal hWnd As Long, ByVal HelpFile As String, ByVal wCommand As Long, dwData As Any) As Long
Public Const HELP_CONTEXT = &H1 Public Const HELP_INDEX = &H3 Public Const HH_DISPLAY_TOPIC = &H0
Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long Declare Function GetUserDefaultLCID& Lib "kernel32" ()
Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, _ lpReOpenBuff As OFSTRUCT, _ ByVal wStyle As Long) As Long Public Const OFS_MAXPATHNAME = 128 Public Const OF_EXIST = &H4000
Declare Function apiGetWindowsDirectory& Lib "kernel32" Alias _ "GetWindowsDirectoryA" (ByVal lpbuffer As String, ByVal _ nSize As Long)
Type OFSTRUCT cBytes As Byte fFixedDisk As Byte nErrCode As Integer Reserved1 As Integer Reserved2 As Integer szPathName(OFS_MAXPATHNAME) As Byte End Type
Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long Public Const RESOURCETYPE_DISK = &H1 Type NETRESOURCE dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long lpLocalName As String lpRemoteName As String lpComment As String lpProvider As String End Type
Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias _ "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, _ lpSectorsPerCluster As Long, lpBytesPerSector As Long, _ lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) _ As Long
Public Const VER_PLATFORM_WIN32s = 0 Public Const VER_PLATFORM_WIN32_WINDOWS = 1 Public Const VER_PLATFORM_WIN32_NT = 2 Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 ' Maintenance string for PSS usage End Type
Public Sub GetFont(fnt As tmpFont)
Const DEFAULT_CHARSET = 1 Const SYMBOL_CHARSET = 2 Const SHIFTJIS_CHARSET = 128 Const HANGEUL_CHARSET = 129 Const CHINESEBIG5_CHARSET = 136 Const CHINESESIMPLIFIED_CHARSET = 134
Dim MyLCID As Integer MyLCID = GetUserDefaultLCID()
Select Case MyLCID Case &H404 ' Traditional Chinese fnt.Charset = CHINESEBIG5_CHARSET fnt.Name = ChrW(&H65B0) + ChrW(&H7D30) + ChrW(&H660E) _ + ChrW(&H9AD4) 'New Ming-Li fnt.Size = 9 Case &H411 ' Japan fnt.Charset = SHIFTJIS_CHARSET fnt.Name = ChrW(&HFF2D) + ChrW(&HFF33) + ChrW(&H20) + ChrW(&HFF30) + _ ChrW(&H30B4) + ChrW(&H30B7) + ChrW(&H30C3) + ChrW(&H30AF) fnt.Size = 9 Case &H412 'Korea UserLCID fnt.Charset = HANGEUL_CHARSET fnt.Name = ChrW(&HAD74) + ChrW(&HB9BC) 'Korea FontName fnt.Size = 9 'Korea FontSize Case &H804 ' Simplified Chinese fnt.Charset = CHINESESIMPLIFIED_CHARSET fnt.Name = ChrW(&H5B8B) + ChrW(&H4F53) fnt.Size = 9 Case Else ' The other countries fnt.Charset = DEFAULT_CHARSET fnt.Name = "MS Sans Serif" fnt.Size = 8 End Select End Sub
Function DeletePOP(ByRef ID As Long, ByRef dbPB As Database) As Integer
Dim strSQL As String Dim deltnum As Integer, i As Integer Dim deltasql As String Dim deletecheck As Recordset
Set GsysDial = dbPB.OpenRecordset("select * from Dialupport where accessnumberId = " & CStr(ID), dbOpenSnapshot) If GsysDial.EOF And GsysDial.BOF Then DeletePOP = ID Exit Function End If
strSQL = "DELETE FROM DialUpPort WHERE AccessNumberID = " & ID dbPB.Execute strSQL
Set GsysDelta = dbPB.OpenRecordset("Select * from Delta order by DeltaNum", dbOpenDynaset) If GsysDelta.RecordCount = 0 Then deltnum = 1 Else GsysDelta.MoveLast deltnum = GsysDelta!deltanum If deltnum > 6 Then deltnum = deltnum - 1 End If End If
For i = 1 To deltnum deltasql = "Select * from delta where DeltaNum = " & i% & _ " AND AccessNumberId = '" & ID & "' " & _ " order by DeltaNum" Set GsysDelta = dbPB.OpenRecordset(deltasql, dbOpenDynaset) If Not (GsysDelta.BOF And GsysDelta.EOF) Then GsysDelta.Edit Else GsysDelta.AddNew GsysDelta!deltanum = i% GsysDelta!AccessNumberId = ID End If GsysDelta!CountryNumber = 0 GsysDelta!AreaCode = 0 GsysDelta!AccessNumber = 0 GsysDelta!MinimumSpeed = 0 GsysDelta!MaximumSpeed = 0 GsysDelta!RegionID = 0 GsysDelta!CityName = "0" GsysDelta!ScriptId = "0" GsysDelta!Flags = 0 GsysDelta.Update Next i%
Set deletecheck = dbPB.OpenRecordset("DialUpPort", dbOpenSnapshot) If deletecheck.RecordCount = 0 Then dbPB.Execute "DELETE from PhoneBookVersions" dbPB.Execute "DELETE from delta" End If
LogPOPDelete GsysDial
On Error GoTo 0
Exit Function
DeleteErr: DeletePOP = ID Exit Function
End Function
Function FilterPBKey(KeyAscii As Integer, objTextBox As TextBox) As Integer
Select Case KeyAscii ' space32 "34 %37 '39 *42 /47 :58 <60 =61 >62 ?63 \92 |124 !33 ,44 ;59 .46 &38 {123 }125 [91 ]93 Case 32, 34, 37, 39, 42, 47, 58, 60, 61, 62, 63, 92, 124, 33, 44, 59, 46, 38, 123, 125, 91, 93 KeyAscii = 0 Beep End Select
If KeyAscii <> 8 Then Dim TextLeng As Integer ' Current text length Dim SelLeng As Integer ' Current selected text length Dim KeyLeng As Integer ' inputted character length ANSI -> 2 ' DBCS -> 4 TextLeng = LenB(StrConv(objTextBox.Text, vbFromUnicode)) SelLeng = LenB(StrConv(objTextBox.SelText, vbFromUnicode)) KeyLeng = Len(Hex(KeyAscii)) / 2 If (TextLeng - SelLeng + KeyLeng) > 8 Then KeyAscii = 0 Beep End If End If
FilterPBKey = KeyAscii
End Function
Function FilterNumberKey(KeyAscii As Integer) As Integer
' numbers and backspace If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 Then KeyAscii = 0 Beep End If
FilterNumberKey = KeyAscii
End Function
Function GetDeltaCount(ByVal version As Integer) As Integer
If version > 5 Then GetDeltaCount = 5 Else GetDeltaCount = version - 1 End If
End Function
Function GetPBVersion(ByRef dbPB As Database) As Integer
Dim rsVer As Recordset
' open db Set rsVer = dbPB.OpenRecordset("SELECT max(Version) as MaxVer FROM PhoneBookVersions") If IsNull(rsVer!MaxVer) Then GetPBVersion = 1 Else GetPBVersion = rsVer!MaxVer End If rsVer.Close
End Function
Function GetSQLDeltaInsert(ByRef Record As Variant, ByVal deltanum As Integer) As String
Dim strSQL As String Dim intX As Integer
On Error GoTo SQLInsertErr strSQL = "INSERT into Delta " & _ " (DeltaNum, AccessNumberID, CountryNumber,RegionID,CityName,AreaCode, " & _ " AccessNumber, MinimumSpeed, MaximumSpeed, FlipFactor, Flags, ScriptID)" & _ " VALUES (" & deltanum & "," For intX = 0 To 10 Select Case intX Case 1, 2, 6 To 9 strSQL = strSQL & Record(intX) & "," Case 10 strSQL = strSQL & Chr(34) & Record(intX) & Chr(34) & ")" Case Else strSQL = strSQL & Chr(34) & Record(intX) & Chr(34) & "," End Select Next
GetSQLDeltaInsert = strSQL On Error GoTo 0
Exit Function
SQLInsertErr: Exit Function
End Function
Function GetSQLDeltaUpdate(ByRef Record As Variant, ByVal deltanum As Integer) As String
Dim strSQL As String
On Error GoTo SQLUpdateErr
strSQL = "UPDATE Delta SET" & _ " CountryNumber=" & Record(1) & _ ", RegionID=" & Record(2) & _ ", CityName=" & Chr(34) & Record(3) & Chr(34) & _ ", AreaCode='" & Record(4) & "'" & _ ", AccessNumber='" & Record(5) & "'" & _ ", MinimumSpeed=" & Record(6) & _ ", MaximumSpeed=" & Record(7) & _ ", FlipFactor=" & Record(8) & _ ", Flags=" & Record(9) & _ ", ScriptID='" & Record(10) & "'" strSQL = strSQL & " WHERE AccessNumberID='" & Record(0) & "'" & _ " AND DeltaNum=" & deltanum
GetSQLDeltaUpdate = strSQL On Error GoTo 0
Exit Function
SQLUpdateErr: GetSQLDeltaUpdate = "" Exit Function
' If cmbstatus.ItemData(cmbstatus.ListIndex) = 1 Then ' 'insert the delta table (production pop) ' ' For i = 1 To deltnum ' deltasql = "Select * from delta where DeltaNum = " & i% & " order by DeltaNum" ' Set GsysDelta = GsysPb.OpenRecordset(deltasql, dbOpenDynaset) ' ' addFound = 0 'initialize delta not found ' Do While GsysDelta.EOF = False ' If GsysDelta!AccessNumberId = Val(txtid.Text) Then ' addFound = 1 ' Exit Do ' Else ' GsysDelta.MoveNext ' End If ' Loop ' ' If addFound = 0 Then ' GsysDelta.AddNew ' GsysDelta!deltanum = i% ' GsysDelta!AccessNumberId = txtid.Text ' Else ' GsysDelta.Edit ' End If '' GsysDelta!CountryNumber = dbCmbCty.ItemData(dbCmbCty.ListIndex) ' GsysDelta!AreaCode = maskArea.Text ' GsysDelta!AccessNumber = maskAccNo.Text ' If Trim(cmbmin.Text) <> "" Or Val(cmbmin.Text) = 0 Then ' GsysDelta!MinimumSpeed = Val(cmbmin.Text) ' Else '' GsysDelta!MinimumSpeed = Null ' End If ' If Trim(cmbmax.Text) <> "" Or Val(cmbmax.Text) = 0 Then '' GsysDelta!MaximumSpeed = Val(cmbmax.Text) ' Else ' GsysDelta!MaximumSpeed = Null ' End If '' GsysDelta!regionID = cmbRegion.ItemData(cmbRegion.ListIndex) ' GsysDelta!CityName = txtcity.Text ' GsysDelta!ScriptID = txtscript.Text ' GsysDelta!FlipFactor = 0 ' GsysDelta!Flags = result ' GsysDelta.Update ' Next i% ' End If
End Function
Function GetSQLPOPInsert(ByRef Record As Variant) As String
Dim strSQL As String Dim intX As Integer Dim bAddFields As Boolean
If UBound(Record) < 14 Then bAddFields = True Else bAddFields = False End If strSQL = "INSERT into DialUpPort " & _ " (AccessNumberID, CountryNumber,RegionID,CityName,AreaCode, " & _ " AccessNumber, MinimumSpeed, MaximumSpeed, FlipFactor, Flags, " & _ " ScriptID, Status, StatusDate, ServiceType, Comments)" & _ " VALUES (" For intX = 0 To 14 Select Case intX Case 0 To 2, 6 To 9 strSQL = strSQL & Record(intX) & "," Case 11 If bAddFields Then strSQL = strSQL & "'1'," Else 'strSQL = strSQL & "'" & Record(intX) & "'," strSQL = strSQL & Chr(34) & Record(intX) & Chr(34) & "," End If Case 12 strSQL = strSQL & "'" & Date & "'," Case 13 strSQL = strSQL & "' '," Case 14 If bAddFields Then strSQL = strSQL & "'')" Else strSQL = strSQL & "'" & Record(12) & "')" End If Case Else strSQL = strSQL & Chr(34) & Record(intX) & Chr(34) & "," End Select Next
GetSQLPOPInsert = strSQL
End Function
Function GetSQLPOPUpdate(ByRef Record As Variant) As String
Dim strSQL As String Dim bAddFields As Boolean
On Error GoTo SQLUpdateErr If UBound(Record) < 14 Then bAddFields = True Else bAddFields = False End If
strSQL = "UPDATE DISTINCTROW DialUpPort SET" & _ " CountryNumber=" & Record(1) & _ ", RegionID=" & Record(2) & _ ", CityName=" & Chr(34) & Record(3) & Chr(34) & _ ", AreaCode='" & Record(4) & "'" & _ ", AccessNumber='" & Record(5) & "'" & _ ", MinimumSpeed=" & Record(6) & _ ", MaximumSpeed=" & Record(7) & _ ", FlipFactor=" & Record(8) & _ ", Flags=" & Record(9) & _ ", ScriptID='" & Record(10) & "'" If bAddFields Then strSQL = strSQL & _ ", Status='1'" & _ ", StatusDate='" & Date & " '" & _ ", ServiceType=' '" & _ ", Comments=''" Else strSQL = strSQL & _ ", Status='" & Record(11) & "'" & _ ", StatusDate='" & Date & " '" & _ ", ServiceType=' '" & _ ", Comments=" & Chr(34) & Record(12) & Chr(34) End If strSQL = strSQL & " WHERE AccessNumberID=" & Record(0)
GetSQLPOPUpdate = strSQL On Error GoTo 0
Exit Function
SQLUpdateErr: GetSQLPOPUpdate = "" Exit Function
End Function
Function ReplaceChars(ByVal InString As String, ByVal OldChar As String, ByVal NewChar As String) As String
Dim intX As Integer
intX = 1 Do While intX < Len(InString) And intX <> 0 intX = InStr(intX, InString, OldChar) If intX < Len(InString) And intX <> 0 Then InString = Left$(InString, intX - 1) & NewChar & _ Right$(InString, Len(InString) - intX) End If Loop
ReplaceChars = InString
End Function
Function GetDriveSpace(ByVal Drive As String, ByVal Required As Double) As Double
'input: <drive path>, <required space in bytes> 'returns: <space available in bytes>, if adequate space OR ' <-2> if not adequate space OR ' <-1> if there was a problem determining space available
Dim bRC As Boolean Dim intRC As Long Dim intSectors As Long Dim intBytes As Long Dim intFreeClusters As Long Dim intClusters As Long Dim strUNC As String Dim netRes As NETRESOURCE
On Error GoTo GetSpaceErr Drive = Trim(Drive) If Left(Drive, 2) = "\\" Then 'unc strUNC = Right(Drive, Len(Drive) - 2) strUNC = "\\" & Left(strUNC, InStr(InStr(strUNC, "\") + 1, strUNC, "\") - 1) If ItIsNT Then ' can use GetDiskFreeSpace directly strUNC = strUNC & "\" bRC = GetDiskFreeSpace(strUNC, intSectors, intBytes, intFreeClusters, intClusters) Else netRes.dwType = RESOURCETYPE_DISK netRes.lpLocalName = "Q:" netRes.lpRemoteName = strUNC netRes.lpProvider = "" If WNetAddConnection2(netRes, vbNullString, vbNullString, 0) = 0 Then bRC = GetDiskFreeSpace(netRes.lpLocalName & "\", intSectors, intBytes, intFreeClusters, intClusters) intRC = WNetCancelConnection2(netRes.lpLocalName, 0, True) End If End If Else bRC = GetDiskFreeSpace(Left(Drive, 3), intSectors, intBytes, intFreeClusters, intClusters) End If If bRC Then GetDriveSpace = intBytes * intSectors * intFreeClusters If Required > GetDriveSpace And Not GetDriveSpace < 0 Then MsgBox LoadResString(6052) & Drive, vbExclamation GetDriveSpace = -2 End If Else GetDriveSpace = -1 'problem determining drive space End If On Error GoTo 0
Exit Function GetSpaceErr: GetDriveSpace = -1 Exit Function End Function
' comm Function GetFileStat() As Integer
' this caused a crash! ' need something better.
If CheckPath(locPath & gsCurrentPB & ".mdb") <> 0 Then 'problem GetFileStat = 1 Else GetFileStat = 0 End If
End Function
Function GetMyShortPath(ByVal LongPath As String) As String
Dim strBuffer As String Dim intRC As Integer
On Error GoTo PathErr strBuffer = Space(500) intRC = GetShortPathName(LongPath, strBuffer, 500) If Trim(strBuffer) <> "" Then GetMyShortPath = Left$(strBuffer, InStr(strBuffer, Chr$(0)) - 1) Else GetMyShortPath = "" End If On Error GoTo 0
Exit Function
PathErr: GetMyShortPath = "" Exit Function End Function
Function ItIsNT() As Boolean
Dim v As OSVERSIONINFO
v.dwOSVersionInfoSize = Len(v) GetVersionEx v ItIsNT = False If v.dwPlatformId = VER_PLATFORM_WIN32_NT Then ItIsNT = True
End Function
Function LogEdit(ByVal Record As String) As Integer
Dim intFile As Integer Dim strFile As String
On Error GoTo LogErr intFile = FreeFile strFile = locPath & gsCurrentPB & "\" & gsCurrentPB & ".log" If CheckPath(strFile) <> 0 Then Open strFile For Output As #intFile Print #intFile, LoadResString(5236); ", "; LoadResString(5237) & _ ", "; LoadResString(5238); ", "; LoadResString(5239) Close intFile End If
Open strFile For Append As #intFile Print #intFile, Now & ", " & Record Close #intFile On Error GoTo 0
Exit Function LogErr: Exit Function End Function Function LogError(ByVal Record As String) As Integer
Dim intFile As Integer Dim strFile As String
On Error GoTo LogErr intFile = FreeFile strFile = locPath & "error.log" If CheckPath(strFile) <> 0 Then Open strFile For Output As #intFile Print #intFile, LoadResString(5236); ", "; LoadResString(5237) & _ ", "; LoadResString(5238); ", "; LoadResString(5239) Close intFile End If
Open strFile For Append As #intFile Print #intFile, Now & ", " & Record Close #intFile On Error GoTo 0
Exit Function LogErr: Exit Function End Function Function LogPOPAdd(ByRef RS As Recordset) As Integer
Dim strAction As String Dim strRecord, strKey As String Dim intX As Integer
strAction = LoadResString(5233) strRecord = LogPOPRecord(RS) strKey = RS!CityName LogEdit strAction & ", " & strKey & ", " & strRecord
End Function Function LogPOPEdit(ByRef Key As String, ByRef RS As Recordset) As Integer
Dim strAction As String Dim strRecord Dim intX As Integer
strAction = LoadResString(5234) strRecord = LogPOPRecord(RS) LogEdit strAction & ", " & Key & ", " & strRecord
End Function Function LogPOPDelete(ByRef RS As Recordset) As Integer
Dim strAction As String Dim strRecord, strKey As String Dim intX As Integer
strAction = LoadResString(5235) strRecord = LogPOPRecord(RS) strKey = RS!CityName LogEdit strAction & ", " & strKey & ", " & strRecord
End Function Function LogPOPRecord(ByRef RS As Recordset) As String
Dim strRecord As String Dim intX As Integer
strRecord = RS(0) For intX = 1 To RS.Fields.Count - 2 strRecord = strRecord & ";" & RS(intX) Next LogPOPRecord = strRecord
End Function
Function LogPublish(ByVal Key As String) As Integer
Dim strAction As String
strAction = LoadResString(6058) LogEdit strAction & ", " & Key & ", " & gsCurrentPB
End Function
Function LogRegionAdd(ByVal Key As String, ByVal Record As String) As Integer
Dim strAction As String
strAction = LoadResString(5230) LogEdit strAction & ", " & Key & ", " & Record
End Function Function LogRegionEdit(ByVal Key As String, ByVal Record As String) As Integer Dim strAction As String
strAction = LoadResString(5231) LogEdit strAction & ", " & Key & ", " & Record
End Function
Function LogRegionDelete(ByVal Key As String, ByVal Record As String) As Integer Dim strAction As String
strAction = LoadResString(5232) LogEdit strAction & ", " & Key & ", " & Record
End Function Function MakeFullINF(ByVal strNewPB As String) As Integer
Dim strINFfile As String Dim strTemp As String
If CheckPath(locPath & strNewPB) <> 0 Then MkDir locPath & strNewPB End If
Exit Function ' we're not doing this anymore - no INFs strINFfile = locPath & strNewPB & "\" & strNewPB & ".inf" If CheckPath(strINFfile) <> 0 Then FileCopy locPath & "fullcab.inf", strINFfile strTemp = Chr(34) & strNewPB & Chr(34) OSWritePrivateProfileString "Strings", "ShortSvcName", strTemp, strINFfile strTemp = strNewPB & ".pbk" & Chr(13) & Chr(10) & strNewPB & ".pbr" OSWritePrivateProfileSection "Install.CopyFiles", strTemp, strINFfile OSWritePrivateProfileString vbNullString, vbNullString, vbNullString, strINFfile End If
End Function
Function MakeLogFile(ByVal PBName As String) As Integer
Dim intFile As Integer Dim strFile As String
On Error GoTo MakeFileErr If CheckPath(locPath & PBName) <> 0 Then MkDir locPath & PBName End If
intFile = FreeFile strFile = locPath & PBName & "\" & PBName & ".log" If CheckPath(strFile) = 0 Then Kill strFile End If Open strFile For Output As #intFile Print #intFile, LoadResString(5236); ", "; LoadResString(5237) & _ ", "; LoadResString(5238); ", "; LoadResString(5239) Close intFile On Error GoTo 0
Exit Function
MakeFileErr: Exit Function
End Function
Public Function masterOutfile(file As String, ds As Recordset)
Dim strTemp As String Dim intFile As Integer
intFile = FreeFile Open file For Output As #intFile While Not ds.EOF Print #intFile, Trim(ds!AccessNumberId); ","; Print #intFile, Trim(ds!CountryNumber); ","; If IsNull(ds!RegionID) Then Print #intFile, ""; ","; Else Print #intFile, Trim(ds!RegionID); ","; End If Print #intFile, ds!CityName; ","; Print #intFile, Trim(ds!AreaCode); ","; Print #intFile, Trim(ds!AccessNumber); ","; Print #intFile, Trim(ds!MinimumSpeed); ","; Print #intFile, Trim(ds!MaximumSpeed); ","; Print #intFile, Trim(ds!FlipFactor); ","; Print #intFile, Trim(ds!Flags); ","; If IsNull(ds!ScriptId) Then Print #intFile, "" Else Print #intFile, ds!ScriptId End If ds.MoveNext Wend Close #intFile
End Function Public Function deltaoutfile(file As String, ds As Recordset)
Dim strTemp As String Dim intFile As Integer
intFile = FreeFile Open file For Output As #intFile While Not ds.EOF If ds!CityName = "" Or IsNull(ds!CityName) Then Print #intFile, ds!AccessNumberId; ","; Print #intFile, "0"; ","; Print #intFile, "0"; ","; Print #intFile, "0"; ","; Print #intFile, "0"; ","; Print #intFile, "0"; ","; Print #intFile, "0"; ","; Print #intFile, "0"; ","; Print #intFile, "0"; ","; Print #intFile, "0"; ","; Print #intFile, "0" Else Print #intFile, Trim(ds!AccessNumberId); ","; Print #intFile, Trim(ds!CountryNumber); ","; If IsNull(ds!RegionID) Then Print #intFile, ""; "0,"; Else Print #intFile, Trim(ds!RegionID); ","; End If Print #intFile, ds!CityName; ","; Print #intFile, Trim(ds!AreaCode); ","; Print #intFile, Trim(ds!AccessNumber); ","; strTemp = Trim(ds!MinimumSpeed) If Val(strTemp) = 0 Then strTemp = "" Print #intFile, strTemp; ","; strTemp = Trim(ds!MaximumSpeed) If Val(strTemp) = 0 Then strTemp = "" Print #intFile, strTemp; ","; Print #intFile, "0"; ","; Print #intFile, Trim(ds!Flags); ","; If IsNull(ds!ScriptId) Then Print #intFile, "" Else Print #intFile, ds!ScriptId End If End If ds.MoveNext Wend Close #intFile
End Function
Public Function GetINISetting(ByVal section As String, ByVal Key As String) As Variant
Dim intFile, intX As Integer Dim strLine, strINIFile As String Dim varTemp(0 To 99, 0 To 1) As Variant
On Error GoTo ReadErr
GetINISetting = Null intFile = FreeFile strINIFile = locPath & gsRegAppTitle & ".ini" Open strINIFile For Input Access Read As #intFile Do While Not EOF(intFile) Line Input #intFile, strLine strLine = Trim(strLine) If strLine = "[" & section & "]" Then If Key = "" Then 'return all keys intX = 0 Do While Not EOF(intFile) Line Input #intFile, strLine strLine = Trim(strLine) If Left(strLine, 1) <> "[" Then If strLine <> "" And InStr(strLine, "=") <> 0 Then varTemp(intX, 0) = Left(strLine, InStr(strLine, "=") - 1) varTemp(intX, 1) = Right(strLine, Len(strLine) - InStr(strLine, "=")) intX = intX + 1 End If Else Exit Do End If Loop Close #intFile GetINISetting = varTemp Exit Function Else 'return single key Do While Not EOF(intFile) Line Input #intFile, strLine strLine = Trim(strLine) If strLine <> "" Then If Key = Left(strLine, InStr(strLine, "=") - 1) Then GetINISetting = Right(strLine, Len(strLine) - InStr(strLine, "=")) Close #intFile Exit Function ElseIf strLine <> "" And Left(strLine, 1) = "[" Then Close #intFile Exit Function End If End If Loop End If Exit Do End If Loop
Close #intFile
Exit Function
ReadErr: Close #intFile Exit Function
End Function
Public Function isBitSet(n As Long, i As Integer) As Integer
Dim p As Long If i = 31 Then isBitSet = (n < 0) * -1 Else p = 2 ^ i isBitSet = (n And p) / p End If
End Function
Public Sub CenterForm(C As Object, p As Object) C.Move (p.Width - C.Width) / 2, (p.Height - C.Height) / 2 End Sub
Public Function ReIndexRegions(pb As Database) As Boolean Dim rsTemp As Recordset, rsTempPop As Recordset, rsTempDelta As Recordset Dim index As Integer, curindex As Integer, i As Integer, deltnum As Integer Dim strSQL As String, deltasql As String, popsql As String
On Error GoTo ReIndexError Set rsTemp = pb.OpenRecordset("Region", dbOpenDynaset) If Not rsTemp.EOF And Not rsTemp.BOF Then rsTemp.MoveFirst index = 1
Do Until rsTemp.EOF curindex = rsTemp!RegionID If curindex <> index Then rsTemp.Edit rsTemp!RegionID = index rsTemp.Update popsql = "Select * from DialUpPort where RegionID = " & curindex Set rsTempPop = pb.OpenRecordset(popsql, dbOpenDynaset) If Not (rsTempPop.BOF And rsTempPop.EOF) Then rsTempPop.MoveFirst Do Until rsTempPop.EOF rsTempPop.Edit rsTempPop!RegionID = index rsTempPop.Update
If rsTempPop!status = 1 Then Set rsTempDelta = pb.OpenRecordset("Select * from Delta order by DeltaNum", dbOpenDynaset) If rsTempDelta.RecordCount = 0 Then deltnum = 1 Else rsTempDelta.MoveLast deltnum = rsTempDelta!deltanum If deltnum > 6 Then deltnum = deltnum - 1 End If End If For i = 1 To deltnum deltasql = "Select * from delta where DeltaNum = " & i & _ " AND AccessNumberId = '" & rsTempPop!AccessNumberId & "' " & _ " order by DeltaNum" Set rsTempDelta = pb.OpenRecordset(deltasql, dbOpenDynaset) If Not (rsTempDelta.BOF And rsTempDelta.EOF) Then rsTempDelta.Edit Else rsTempDelta.AddNew rsTempDelta!deltanum = i rsTempDelta!AccessNumberId = rsTempPop!AccessNumberId End If If rsTempPop!status = 1 Then rsTempDelta!CountryNumber = rsTempPop!CountryNumber rsTempDelta!AreaCode = rsTempPop!AreaCode rsTempDelta!AccessNumber = rsTempPop!AccessNumber rsTempDelta!MinimumSpeed = rsTempPop!MinimumSpeed rsTempDelta!MaximumSpeed = rsTempPop!MaximumSpeed rsTempDelta!RegionID = rsTempPop!RegionID rsTempDelta!CityName = rsTempPop!CityName rsTempDelta!ScriptId = rsTempPop!ScriptId rsTempDelta!Flags = rsTempPop!Flags rsTempDelta.Update End If Next i End If rsTempPop.MoveNext Loop End If End If index = index + 1 rsTemp.MoveNext Loop End If ReIndexRegions = True Exit Function
ReIndexError: ReIndexRegions = False End Function Public Function RegGetValue(sKeyName As String, sValueName As String) As String
Dim lRetVal As Long 'result of the API functions Dim hKey As Long 'handle of opened key Dim vValue As Variant 'setting of queried value
lRetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sKeyName, 0, _ KEY_ALL_ACCESS, hKey) lRetVal = QueryValueEx(hKey, sValueName, vValue) 'MsgBox vValue RegCloseKey (hKey)
RegGetValue = vValue
End Function Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As _ String, vValue As Variant) As Long
Dim cch As Long Dim lrc As Long Dim lType As Long Dim lValue As Long Dim sValue As String
On Error GoTo QueryValueExError
' Determine the size and type of data to be read lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch) If lrc <> ERROR_NONE Then Error 5
Select Case lType ' For strings Case REG_SZ: sValue = String(cch, 0) lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
If lrc = ERROR_NONE Then vValue = Left$(sValue, cch) Else vValue = Empty End If ' For DWORDS Case REG_DWORD: lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
If lrc = ERROR_NONE Then vValue = lValue Case Else 'all other data types not supported lrc = -1 End Select
QueryValueExExit:
QueryValueEx = lrc Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function Function CheckPath(ByVal path As String) As Integer
'function returns 0 if path exists
Dim intRC As Integer
On Error GoTo PathErr If Trim(path) = "" Or IsNull(path) Then CheckPath = 1 Exit Function End If intRC = GetAttr(path) CheckPath = 0
Exit Function
PathErr: CheckPath = 1 Exit Function
End Function
Function SavePOP(ByRef Record As Variant, ByRef dbPB As Database) As Integer
' Handles inserting or updating a POP. ' If Record(0) = "" then generate new AccessNumberID and INSERT. ' Otherwise do like cmdImportRegions; just do an UPDATE and ' then an INSERT.
Dim strSQL As String Dim rsPB As Recordset Dim intX, intNewID As Integer Dim bInService As Boolean Dim NewPOP As Recordset Dim deltasql As String Dim deltnum As Integer, i As Integer, addFound As Integer
On Error GoTo SaveErr
If Record(0) = "" Then Set rsPB = dbPB.OpenRecordset("SELECT max(AccessNumberID) as MaxID from DialUpPort", dbOpenSnapshot) If IsNull(rsPB!maxID) Then intNewID = 1 Else intNewID = rsPB!maxID + 1 End If rsPB.Close Record(0) = intNewID 'try this: edit a referenced array 'INSERT strSQL = GetSQLPOPInsert(Record) dbPB.Execute strSQL Else Set GsysDial = dbPB.OpenRecordset("SELECT * from DialUpPort where AccessNumberID = " & CStr(Record(0)), dbOpenSnapshot) If GsysDial.EOF And GsysDial.BOF Then 'INSERT strSQL = GetSQLPOPInsert(Record) dbPB.Execute strSQL ', dbFailOnError Set GsysDial = dbPB.OpenRecordset("SELECT * from DialUpPort where AccessNumberID = " & CStr(Record(0)), dbOpenSnapshot) LogPOPAdd GsysDial Else 'UPDATE strSQL = GetSQLPOPUpdate(Record) dbPB.Execute strSQL ', dbFailOnError 'INSERT strSQL = GetSQLPOPInsert(Record) dbPB.Execute strSQL ', dbFailOnError Set NewPOP = dbPB.OpenRecordset("SELECT * from DialUpPort where AccessNumberID = " & CStr(Record(0)), dbOpenSnapshot) LogPOPEdit GsysDial!CityName, NewPOP End If End If
If UBound(Record) < 14 Then bInService = True ElseIf Record(11) = 1 Then bInService = True Else bInService = False End If
If bInService Then ' insert to Delta table if 'In Service' Set GsysDelta = dbPB.OpenRecordset("Select * from Delta order by DeltaNum", dbOpenDynaset)
If GsysDelta.RecordCount = 0 Then deltnum = 1 Else GsysDelta.MoveLast deltnum = GsysDelta!deltanum If deltnum > 6 Then deltnum = deltnum - 1 End If End If
For i = 1 To deltnum deltasql = "Select * from delta where DeltaNum = " & i% & " order by DeltaNum" Set GsysDelta = dbPB.OpenRecordset(deltasql, dbOpenDynaset)
addFound = 0 'initialize delta not found Do While GsysDelta.EOF = False If GsysDelta!AccessNumberId = Record(0) Then addFound = 1 Exit Do Else GsysDelta.MoveNext End If Loop
If addFound = 0 Then GsysDelta.AddNew GsysDelta!deltanum = i% GsysDelta!AccessNumberId = Record(0) Else GsysDelta.Edit End If GsysDelta!CountryNumber = Record(1) GsysDelta!AreaCode = Record(4) GsysDelta!AccessNumber = Record(5) GsysDelta!MinimumSpeed = Record(6) GsysDelta!MaximumSpeed = Record(7) GsysDelta!RegionID = Record(2) GsysDelta!CityName = Record(3) GsysDelta!ScriptId = Record(10) GsysDelta!FlipFactor = Record(8) GsysDelta!Flags = Record(9) GsysDelta.Update Next i% End If
On Error GoTo 0
Exit Function
SaveErr: SavePOP = CInt(Record(0)) Exit Function End Function
Function SetFonts(ByRef frmToApply As Form) As Integer Const SYMBOL_CHARSET As Integer = 2 Dim Ctl As Control Dim fnt As tmpFont
GetFont fnt
If Not TypeOf frmToApply Is MDIForm Then If frmToApply.Font.Charset <> SYMBOL_CHARSET Then If frmToApply.Font.Size >= 8 And frmToApply.Font.Size <= 9 Then frmToApply.Font.Name = fnt.Name frmToApply.Font.Size = fnt.Size frmToApply.Font.Charset = fnt.Charset Else frmToApply.Font.Name = fnt.Name frmToApply.Font.Charset = fnt.Charset End If End If End If
On Error Resume Next For Each Ctl In frmToApply.Controls If Ctl.Font.Charset <> SYMBOL_CHARSET Then If Ctl.Font.Size >= 8 And Ctl.Font.Size <= 9 Then Ctl.Font.Name = fnt.Name Ctl.Font.Size = fnt.Size Ctl.Font.Charset = fnt.Charset Else Ctl.Font.Name = fnt.Name Ctl.Font.Charset = fnt.Charset End If End If Next
On Error GoTo 0
End Function
Function GetLocalPath() As String
' returns short version of local path ' also sets global variable locpath
On Error GoTo PathErr 'locPath = GetMyShortPath(Trim(LCase(App.Path))) locPath = Trim(LCase(App.path))
If Right(locPath, 1) <> "\" Then locPath = locPath + "\" End If
'''locPath = "c:\\Program Files\\pbantop\\" GetLocalPath = locPath On Error GoTo 0
Exit Function PathErr: GetLocalPath = "" Exit Function
End Function
Function SplitLine(ByVal Line As String, ByVal Delimiter As String) As Variant
ReDim varArray(30) Dim intX As Integer
On Error GoTo SplitErr Line = Line & Delimiter intX = 0 ' split out fields - deconstruct Line Do While (InStr(Line, Delimiter) <> 0 & intX < 30) varArray(intX) = Trim(Left(Line, InStr(Line, Delimiter) - 1)) If InStr(Line, Delimiter) + 1 <= Len(Line) Then Line = Right(Line, Len(Line) - InStr(Line, Delimiter)) Else Exit Do End If intX = intX + 1 Loop
ReDim Preserve varArray(intX) SplitLine = varArray() On Error GoTo 0
Exit Function
SplitErr: SplitLine = 1 Exit Function
End Function
Function QuietTestNewPBName(ByVal strNewPB As String) As Integer Dim strTemp As String Dim varRegKeys As Variant Dim intX As Integer Dim varTemp As Variant
On Error GoTo ErrTrap strNewPB = Trim(strNewPB)
If strNewPB = "" Or strNewPB = "empty_pb" Or strNewPB = "pbserver" Then QuietTestNewPBName = 6049 Exit Function Else varTemp = strNewPB If IsNumeric(varTemp) Then QuietTestNewPBName = 6095 Exit Function End If varRegKeys = GetINISetting("Phonebooks", strNewPB) If Not IsNull(varRegKeys) Then QuietTestNewPBName = 6050 Exit Function End If strTemp = locPath & strNewPB & ".mdb"
If CheckPath(strTemp) = 0 Then
QuietTestNewPBName = 6020 Exit Function End If 'test write access On Error GoTo FileErr Open strTemp For Output As #1 Close #1 Kill strTemp End If QuietTestNewPBName = 0
Exit Function
ErrTrap: Exit Function
FileErr: QuietTestNewPBName = 6051 Exit Function
End Function
Function TestNewPBName(ByVal strNewPB As String) As Integer Dim rt As Integer Dim intX As Integer
rt = QuietTestNewPBName(strNewPB) If rt <> 0 Then If rt = 6020 Then ' File already exists intX = MsgBox(LoadResString(6020) & Chr(13) & strNewPB & Chr$(13) & _ LoadResString(6021), _ vbQuestion + vbYesNo + vbDefaultButton2)
If intX = vbNo Then ' 7 == no TestNewPBName = 1 Exit Function End If End If
MsgBox rt, vbExclamation TestNewPBName = 1 Else TestNewPBName = 0 End If
End Function
Public Sub SelectText(txtBox As Control) txtBox.SelStart = 0 txtBox.SelLength = Len(txtBox.Text) End Sub
Public Sub CheckChar(ASCIIChar As Integer)
Select Case ASCIIChar Case 34 Beep ASCIIChar = 0 Case 44 Beep ASCIIChar = 0 Case 128 To 159 Beep ASCIIChar = 0 End Select
End Sub
Public Function CreatePB(ByRef strNewPB As String) As Integer Dim dblFreeSpace As Double Dim rt As Integer
dblFreeSpace = GetDriveSpace(locPath, 250000) If dblFreeSpace = -2 Then cmdLogError 6054 CreatePB = -2 Exit Function End If
rt = QuietTestNewPBName(strNewPB)
If rt = 0 Then 'ok MakeFullINF strNewPB MakeLogFile strNewPB FileCopy locPath & "empty_pb.mdb", locPath & strNewPB & ".mdb" OSWritePrivateProfileString "Phonebooks", strNewPB, strNewPB & ".mdb", locPath & gsRegAppTitle & ".ini" OSWritePrivateProfileString vbNullString, vbNullString, vbNullString, locPath & gsRegAppTitle & ".ini" Else cmdLogError rt CreatePB = -1 End If
CreatePB = 0 End Function
Public Function SetOptions(strURL As String, strUser As String, strPassword As String) As Integer
Dim i As Integer Dim strTemp As String Dim configuration As Recordset
On Error GoTo ErrTrap
strURL = Trim(strURL) strUser = Trim(strUser) strPassword = Trim(strPassword)
If strTemp <> "" Then ' max len 64, alpha, numeric If strUser = "" Or InStr(strUser, " ") Then cmdLogError 6010 SetOptions = 1 Exit Function ' max len 64, alpha, numeric, meta ElseIf strPassword = "" Then cmdLogError 6011 SetOptions = 2 Exit Function End If End If
Set configuration = gsyspb.OpenRecordset("Configuration", dbOpenDynaset)
If configuration.RecordCount = 0 Then configuration.AddNew Else configuration.Edit End If
configuration!index = 1
If strURL <> "" Then configuration!URL = strURL Else configuration!URL = Null End If
If strUser <> "" Then configuration!ServerUID = strUser Else configuration!ServerUID = Null End If
If strPassword <> "" Then configuration!ServerPWD = strPassword Else configuration!ServerPWD = Null End If
configuration!NewVersion = 0
configuration.Update configuration.Close SetOptions = 0 Exit Function
ErrTrap: SetOptions = 3 End Function
Public Function cmdLogError(ErrorNum As Integer, Optional ErrorMsg As String) Dim intFile As Integer Dim strFile As String
On Error GoTo LogErr gCLError = True intFile = FreeFile strFile = locPath & "import.log" Open strFile For Append As #intFile On Error GoTo 0
Print #intFile, Now & ", " & gsCurrentPB & ", " & LoadResString(ErrorNum) & ErrorMsg
Close #intFile MsgBox LoadResString(6083) Exit Function
LogErr: Exit Function
End Function
|