home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l406 / 4.ddi / OPENDB.FR_ / OPENDB.bin (.txt)
Encoding:
Visual Basic Form  |  1992-10-21  |  9.2 KB  |  294 lines

  1. VERSION 2.00
  2. Begin Form fOpenDB 
  3.    BorderStyle     =   3  'Fixed Double
  4.    Caption         =   "Open DataBase"
  5.    ControlBox      =   0   'False
  6.    Height          =   2835
  7.    Left            =   2475
  8.    LinkTopic       =   "Form2"
  9.    ScaleHeight     =   2384.694
  10.    ScaleMode       =   0  'User
  11.    ScaleWidth      =   4477.44
  12.    Top             =   3015
  13.    Width           =   4545
  14.    Begin ComboBox cDBName 
  15.       Height          =   288
  16.       Left            =   1560
  17.       Sorted          =   -1  'True
  18.       TabIndex        =   0
  19.       Text            =   "Combo1"
  20.       Top             =   120
  21.       Width           =   2772
  22.    End
  23.    Begin TextBox cDataBase 
  24.       Height          =   288
  25.       Left            =   1560
  26.       TabIndex        =   1
  27.       Top             =   480
  28.       Width           =   2772
  29.    End
  30.    Begin CheckBox cReadOnlyFlag 
  31.       Caption         =   "Read Only  (not supported by all Drivers)"
  32.       Height          =   252
  33.       Left            =   360
  34.       TabIndex        =   4
  35.       Top             =   1560
  36.       Width           =   3996
  37.    End
  38.    Begin TextBox cUserName 
  39.       Height          =   288
  40.       Left            =   1560
  41.       TabIndex        =   2
  42.       Top             =   840
  43.       Width           =   2772
  44.    End
  45.    Begin TextBox cPassword 
  46.       Height          =   288
  47.       Left            =   1560
  48.       PasswordChar    =   "*"
  49.       TabIndex        =   3
  50.       Top             =   1200
  51.       Width           =   2772
  52.    End
  53.    Begin CommandButton OkayButton 
  54.       Caption         =   "&Open"
  55.       Default         =   -1  'True
  56.       Height          =   372
  57.       Left            =   360
  58.       TabIndex        =   5
  59.       Top             =   1896
  60.       Width           =   1572
  61.    End
  62.    Begin CommandButton CancelButton 
  63.       Cancel          =   -1  'True
  64.       Caption         =   "&Cancel"
  65.       Height          =   372
  66.       Left            =   2520
  67.       TabIndex        =   6
  68.       Top             =   1896
  69.       Width           =   1572
  70.    End
  71.    Begin Label DataBaseLabel 
  72.       Caption         =   "DataBase:"
  73.       Height          =   249
  74.       Left            =   120
  75.       TabIndex        =   10
  76.       Top             =   474
  77.       Width           =   1339
  78.    End
  79.    Begin Label DBNameLabel 
  80.       Caption         =   "Source/Server:"
  81.       Height          =   249
  82.       Left            =   120
  83.       TabIndex        =   7
  84.       Top             =   118
  85.       Width           =   1460
  86.    End
  87.    Begin Label UserNameLabel 
  88.       Caption         =   "User ID:"
  89.       Height          =   249
  90.       Left            =   120
  91.       TabIndex        =   8
  92.       Top             =   842
  93.       Width           =   1339
  94.    End
  95.    Begin Label PasswordLabel 
  96.       Caption         =   "Password:"
  97.       Height          =   249
  98.       Left            =   120
  99.       TabIndex        =   9
  100.       Top             =   1186
  101.       Width           =   1339
  102.    End
  103. Option Explicit
  104. 'ODBC.DLL APIs
  105. Declare Function SQLAllocEnv Lib "odbc.dll" (env As Long) As Integer
  106. Declare Function SQLDataSources Lib "ODBC.DLL" (ByVal henv As Long, ByVal fdir As Integer, ByVal szDSN As String, ByVal cbDSNMAx As Integer, pcbDSN As Integer, ByVal szDesc As String, ByVal cbDescMax As Integer, pcbDesc As Integer) As Integer
  107. Sub CancelButton_Click ()
  108.   gfDBOpenFlag = False
  109.   Unload Me
  110. End Sub
  111. Sub cDBName_Click ()
  112.   Dim tmp As String
  113.   Dim x As Integer
  114.   cDatabase = ""
  115.   cUserName = ""
  116.   cPassword = ""
  117.   'get the database name if there is one
  118.   tmp = String$(255, 32)
  119.   x = OSGetPrivateProfileString(cDBName, "database", "", tmp, Len(tmp), "ODBC.INI")
  120.   cDatabase = Mid$(tmp, 1, x)
  121.   'get the last user name is there is one
  122.   tmp = String$(255, 32)
  123.   x = OSGetPrivateProfileString(cDBName, "lastuser", "", tmp, Len(tmp), "ODBC.INI")
  124.   cUserName = Mid$(tmp, 1, x)
  125.   cPassword = ""
  126.   If cUserName <> "" Then cPassword.SetFocus
  127. End Sub
  128. Sub cDBName_LostFocus ()
  129.   Call cDBName_Click
  130. End Sub
  131. Sub Form_Load ()
  132.   cDBName = gstDBName
  133.   cDatabase = gstDatabase
  134.   cUserName = gstUserName
  135.   cPassword = gstPassword
  136.   Left = (Screen.Width - Width) / 2
  137.   GetDataSources cDBName
  138.   MsgBar "Enter DataBase Parameters", False
  139. End Sub
  140. Sub Form_Unload (Cancel As Integer)
  141.   MsgBar "", False
  142. End Sub
  143. 'this routine fills a list box with all available
  144. 'ODBC data sources found in ODBC.INI
  145. Sub GetDataSources (listctrl As Control)
  146.   Dim DataSource As String, Description As String
  147.   Dim DataSourceLen As Integer, DescriptionLen As Integer
  148.   Dim retcode As Integer
  149.   Dim henv As Long
  150.   If SQLAllocEnv(henv) <> -1 Then
  151.     DataSource = String$(32, 32)
  152.     Description = String$(255, 32)
  153.     'get the first one
  154.     retcode = SQLDataSources(henv, 2, DataSource, Len(DataSource), DataSourceLen, Description, Len(Description), DescriptionLen)
  155.     While retcode = 0 Or retcode = 1
  156.       listctrl.AddItem Mid(DataSource, 1, DataSourceLen)
  157.       DataSource = String$(32, 32)
  158.       Description = String$(255, 32)
  159.       'get all the others
  160.       retcode = SQLDataSources(henv, 1, DataSource, Len(DataSource), DataSourceLen, Description, Len(Description), DescriptionLen)
  161.     Wend
  162.   End If
  163. End Sub
  164. Sub OkayButton_Click ()
  165.    Dim Connect As String
  166.    Dim x As Integer
  167.    Dim st As String
  168.    Dim i As Integer
  169.    Dim s As String, t As String
  170.    Dim dbq As String
  171.    On Error GoTo OpenError
  172.    MsgBar "Opening DataBase", True
  173.    If VDMDI.PrefOpenOnStartup.Checked = True Then
  174.      Me.Refresh
  175.    End If
  176.    SetHourGlass Me
  177.    'check for blank server name and clear other parms
  178.    If cDBName = "" Then
  179.      cDatabase = ""
  180.      cUserName = ""
  181.      cPassword = ""
  182.    End If
  183.    'build connect string
  184.    If cUserName <> "" Then
  185.      Connect = "UID=" + cUserName + ";PWD=" + cPassword
  186.    End If
  187.    If cDatabase <> "" Then
  188.      Connect = Connect + ";DATABASE=" + cDatabase
  189.    End If
  190.    If InStr(1, Connect, "APP") = 0 Then
  191.      Connect = Connect + ";APP=Visual Data"
  192.    End If
  193.    'save the values
  194.    gstDBName = cDBName
  195.    gstDatabase = cDatabase
  196.    gstUserName = cUserName
  197.    gstPassword = cPassword
  198.    Me.Hide
  199.    Set gCurrentDB = OpenDatabase(gstDBName, False, cReadOnlyFlag, Connect)
  200.    If gfDBOpenFlag = True Then
  201.      CloseAllDynasets
  202.    End If
  203.    gfTransPending = False
  204.    VDMDI.QueryButton.Visible = True
  205.    VDMDI.BeginButton.Visible = True
  206.    VDMDI.CommitButton.Visible = False
  207.    VDMDI.RollBackButton.Visible = False
  208.    'process the connect string just in case the
  209.    'values came from the ODBC dialogs
  210.    t = gCurrentDB.Connect
  211.    i = 1
  212.    While i <= Len(t) + 1
  213.      If Mid(t, i, 1) = ";" Or i = Len(t) + 1 Then
  214.        If s <> "" Then
  215.          Select Case Mid(s, 1, InStr(1, s, "=") - 1)
  216.            Case "DSN"
  217.              gstDBName = Mid(s, InStr(1, s, "=") + 1, Len(s))
  218.            Case "DATABASE"
  219.              gstDatabase = Mid(s, InStr(1, s, "=") + 1, Len(s))
  220.            Case "DBQ"
  221.              gstDatabase = Mid(s, InStr(1, s, "=") + 1, Len(s))
  222.            Case "UID"
  223.              gstUserName = Mid(s, InStr(1, s, "=") + 1, Len(s))
  224.            Case "PWD"
  225.              gstPassword = Mid(s, InStr(1, s, "=") + 1, Len(s))
  226.          End Select
  227.        End If
  228.        s = ""
  229.      Else
  230.        s = s + Mid(t, i, 1)
  231.      End If
  232.      i = i + 1
  233.    Wend
  234.    cDBName = gstDBName
  235.    cDatabase = gstDatabase
  236.    cUserName = gstUserName
  237.    cPassword = gstPassword
  238.    x = OSWritePrivateProfileString(gstDBName, "Database", gstDatabase, "ODBC.INI")
  239.    x = OSWritePrivateProfileString(gstDBName, "LastUser", gstUserName, "ODBC.INI")
  240.    fTables.Caption = gstDBName + "." + gstDatabase
  241.    gCurrentDB.QueryTimeout = Val(VDMDI.cQueryTimeout)
  242.    'success
  243.    gfDBOpenFlag = True
  244.    ResetMouse Me
  245.    Unload Me
  246.    GoTo OkayEnd
  247. OpenError:
  248.    ResetMouse Me
  249.    gfDBOpenFlag = False
  250.    If cDBName <> "" Then
  251.      If InStr(1, Error$, "Data source not found") > 0 Then
  252.        Beep
  253.        MsgBox "This DataBase has not been Registered, this will now be attempted for you!", 48
  254.        cDatabase = ""
  255.        cUserName = ""
  256.        cPassword = ""
  257.        If RegisterDB((cDBName)) = True Then
  258.          MsgBox "'" + cDBName + "' has been Registered, proceed with Open.", 48
  259.        End If
  260.      ElseIf InStr(1, Error$, "Login failed") > 0 Then
  261.        Beep
  262.        MsgBox "Invalid Parameter(s), Please try again!", 48
  263.      ElseIf InStr(1, Error$, "QueryTimeout property") > 0 Then
  264.        If Val(VDMDI.cQueryTimeout) <> 5 Then
  265.          Beep
  266.          MsgBox "Query Timeout Could not be set, default will be used!", 48
  267.        End If
  268.        Resume Next
  269.      Else
  270.        ShowError
  271.      End If
  272.    End If
  273.    MsgBar "Enter DataBase Parameters", False
  274.    Me.Show MODAL
  275.    Resume OkayEnd
  276. OkayEnd:
  277. End Sub
  278. Function RegisterDB (dbname As String) As Integer
  279.    On Error GoTo RDBErr
  280.    Dim driver As String
  281.    driver = InputBox("Enter Driver Name from ODBCINST.INI File:", "Driver Name", DEFAULTDRIVER)
  282.    If driver <> DEFAULTDRIVER Then
  283.      RegisterDatabase cDBName, driver, False, ""
  284.    Else
  285.      RegisterDatabase cDBName, driver, True, ""
  286.    End If
  287.    RegisterDB = True
  288.    GoTo RDBEnd
  289. RDBErr:
  290.    RegisterDB = False
  291.    Resume RDBEnd
  292. RDBEnd:
  293. End Function
  294.