//**************************************************************************** // $Module type: CLASS // $Module name: cDbComboFormServer.pkg // $Author : Nils G. Svedmyr // Created : 2002-07-20 @ 09:02 // // Description : // // $Rev History // 2002-07-20 Module header created //**************************************************************************** Use cRDSdbComboform.pkg Use cSQLBrowseConnect.pkg Use ODBC_Drv.pkg Use MSSqlDrv.pkg //Use NewDfAbout.pkg // Dac package with Network user name function Open SncTable // Visual DataFlex 12.0 Migration Utility, added March 28, 2007: 15:13:23 #IF (!@ >= 120) { OverrideProperty=Entry_State InitialValue=False } { OverrideProperty=Combo_Sort_State InitialValue=True } { OverrideProperty=Label_Row_Offset InitialValue=0 } { OverrideProperty=Label_Col_Offset InitialValue=2 } { OverrideProperty=Label_Justification_Mode InitialValue=jMode_Right } { OverrideProperty=Label_Justification_Mode EnumList="jMode_Right, jMode_Left, jMode_Center" } { OverrideProperty=Size InitialValue=13,150 } #ENDIF Class cDbComboformServer Is A cRDSdbComboform Procedure Construct_Object Handle ho Forward Send Construct_Object // Visual DataFlex 12.0 Migration Utility, added March 28, 2007: 15:13:24 #IF (!@ >= 120) { InitialValue=True } #ENDIF Property Boolean pbFrom True Property Integer piDbType 0 Property Handle phoDD (Main_DD(Self)) Property Handle Private.phoArray 0 //Property Handle Private.phToolTip 0 //Set Combo_Sort_State To True // Has been moved to End_Construct_Object to take effect... Set Oem_Translate_State To False Get Create U_Array To ho Set Private.phoArray To ho End_Procedure // Construct_Object Procedure End_Construct_Object Forward Send End_Construct_Object Set Combo_Sort_State To True End_Procedure // End_Construct_Object // Procedure Set phToolTip Handle hToolTip // Forward Set phToolTip To hToolTip // Set Private.phToolTip To hToolTip // End_Procedure // Set phToolTip Handle hToolTip // Common message to enable/disable object: Procedure DoEnableDisable Integer iDbType Integer iOldDbType iItem iFile iField String sValue Get piDbType To iOldDbType Set piDbType To iDbType Set Enabled_State To (iDbType > 1 And iDbType < 6) Send Combo_Delete_Data Send DoChangeLabel If (Enabled_State(Self)) Begin Send Combo_Add_Item " " Get Data_File To iFile Get Data_Field To iField If Not (Current_Record(phoDD(Self))) Begin Move " " To sValue Set File_Field_Changed_Value Of (phoDD(Self)) iFile iField To sValue Get WinCombo_Item_Matching sValue To iItem If (iItem > -1) Set WinCombo_Current_Item To iItem Else Set WinCombo_Current_Item To 0 End // If Not (Current_Record(phoDD(Self))) Begin End // If (Enabled_State(Self)) Begin End_Procedure // DoEnableDisable Procedure DoCheckClear Integer iFile iField Send Combo_Delete_Data Get Data_File To iFile Get Data_Field To iField Set File_Field_Changed_Value Of (phoDD(Self)) iFile iField To "" End_Procedure // DoCheckClear // To change label and status help according to the // database format choosen: Procedure DoChangeLabel Integer iType iDSNType String sLabel sToolTip If Not (Active_State(Self)) Procedure_Return Get piDbType To iType Get Label To sLabel Case Begin Case (iType = 1) // DataFlex If (sLabel <> "Server Name") Set Label To "Server Name" // The If statement is to reduce flickering... Move ("Database Server name or DSN (Data Source Name)") To sToolTip Case Break Case (iType = 2) // IBM DB2 UDB If (sLabel <> "Data Source Name") Set Label To "Data Source Name" Move ("Database source or alias name") To sToolTip Case Break Case (iType = 3) // MS SQL If (sLabel <> "Server Name") Set Label To "Server Name" Move ; ("Name of a server running SQL Server on the network. The value must be" * ; "either the name of a server on the network, or the name of a SQL Server" * ; "Client Network Utility advanced server entry. You can select (local) as the" * ; "server name on Windows NT to connect to a copy of SQL Server running on the same computer.") To sToolTip Case Break Case (iType = 4) // ODBC If (pbFrom(Self)) Get Field_Current_Value Of (phoDD(Self)) Field SncTable.FromDSNType To iDSNType Else Get Field_Current_Value Of (phoDD(Self)) Field SncTable.ToDSNType To iDSNType If (iDSNType = 2) Begin If (sLabel <> "Data Source File") Set Label To "Data Source File" Move ("ODBC Data Source File Name (DSN). The path to the file is displayed in the 'Table Path:' field below.") To sToolTip End // If (iDSNType = 2) Begin Else Begin If (sLabel <> "Data Source Name") Set Label To "Data Source Name" Move ("ODBC Data Source Name (DSN)") To sToolTip End // Else Begin Case Break Case (iType = 5) // Oracle If (sLabel <> "Database Alias") Set Label To "Database Alias" Move ("Database server or alias name") To sToolTip Case Break Case (iType = 6) // Pervasive.SQL If (sLabel <> "Meta Database File") Set Label To "Meta Database File" Move ; ("Meta database filename (File.ddf). Contains all Pervasive.SQL data tables for this set. Select the path to the File.ddf file with the 'Select File' button.") To sToolTip Case Break Case Else If (sLabel <> "Server Name") Set Label To "Server Name" Set Status_Help To ; ("Database Server name or DSN (Data Source Name)") Procedure_Return Case End Set psTooltip To sToolTip Send RefreshToolTip Set Status_Help To sToolTip // This is needed to avoid flickering of the label object when a change has // occured above, while finding saved records: Send Page_Object Of (Label_Object(Self)) True End_Procedure // DoChangeLabel // Interface for the cFileDSNButton class: Procedure DoFillComboAndTellDataTableCombo Handle hoDD Integer iFile iField String sValue Get phoDD To hoDD Send DoComboFillList Get Data_File To iFile Get Data_Field To iField Get File_Field_Current_Value Of hoDD iFile iField To sValue Send DoUpdateDataTableCombo sValue End_Procedure // DoFillComboAndTellDataTableCombo Procedure OnCloseUp Handle hoDD Integer iFile iField String sOldValue sNewValue Get phoDD To hoDD Get Data_File To iFile Get Data_Field To iField Get File_Field_Current_Value Of hoDD iFile iField To sOldValue Forward Send OnCloseUp Get File_Field_Current_Value Of hoDD iFile iField To sNewValue If (sNewValue Contains "") Begin If (pbFrom(Self)) Set Field_Changed_Value Of (phoDD(Self)) Field SncTable.FromFilePath To "" Else Set Field_Changed_Value Of (phoDD(Self)) Field SncTable.ToFilePath To "" End // If (sNewValue contains "") Begin If (Trim(sOldValue) <> Trim(sNewValue)) ; Send DoUpdateDataTableCombo sNewValue End_Procedure // OnCloseUp // A bit of optimization. When a record exist the combo is only filled with // the save server name. However, when the list is dropped down, we will // fill it with all available servers. Procedure OnDropDown Integer iType Boolean bFrom Get pbFrom To bFrom If bFrom Get Field_Current_Value Of (phoDD(Self)) Field SncTable.FromDSNType To iType Else Get Field_Current_Value Of (phoDD(Self)) Field SncTable.ToDSNType To iType If (iType <> 2) Begin If (Active_State(Self)) Send StartWorkingMessage "Finding Database Servers..." Send DoComboFillList Send StopWorkingMessage End // If (iType <> 2) Begin Forward Send OnDropDown End_Procedure // OnDropDown // Must be send from DDO when finding a record: // This will only display a previously saved server name. // Note: This is an optimization, // when the list is dropped down the list will be filled. Procedure DoFindData Handle hoDD Boolean bChanged Integer iFile iField iItem iType String sValue Get piDbType To iType Get phoDD To hoDD Get Data_File To iFile Get Data_Field To iField Get File_Field_Changed_State Of hoDD iFile iField To bChanged Get File_Field_Current_Value Of hoDD iFile iField To sValue Send Combo_Delete_Data // Reset values and state. This is needed because combo_delete_data clears the DDO buffer: Set File_Field_Changed_Value Of hoDD iFile iField To sValue Set File_Field_Changed_State Of hoDD iFile iField To bChanged Move (Trim(sValue)) To sValue Send Combo_Add_Item " " If (Length(sValue) > 0) Send Combo_Add_Item sValue Get WinCombo_Item_Matching sValue To iItem // If (pbFrom(Self)) showln "DoFindData in cDbComboformServer" " sServer = " sValue " iItem = " iItem If (iItem > -1) Set WinCombo_Current_Item To iItem Else Set WinCombo_Current_Item To 0 Send DoUpdateDataTableCombo sValue End_Procedure // DoFindData Procedure DoUpdateDataTableCombo String sServer Handle ho hoDD Integer iType iRetval String sPath sDriver Get piDbType To iType Broadcast Send DoEnableLoginButton Of (Parent(Self)) iType Get phoDD To hoDD If (piDbType(Self) = 3) Begin // MS SQL If (pbFrom(Self)) Get DDObjectId hoDD SncTable.File_Number "FromDatabase" To ho // Global function in sysfuncs.pkg Else Get DDObjectId hoDD SncTable.File_Number "ToDatabase" To ho If ho Send DoCheckClear Of ho End // If (piDbType(Self) = 3) Begin Else Begin If (pbFrom(Self)) Get DDObjectId hoDD SncTable.File_Number "FromDataTable" To ho // Global function in sysfuncs.pkg Else Get DDObjectId hoDD SncTable.File_Number "ToDataTable" To ho // 2003-07-26 ------------------------------------ Start Nils G. Svedmyr If (piDbType(Self) = 6) Begin // Pervasive.SQL // If (pbFrom(Self)) Begin // Get Field_Current_Value Of (phoDD(Self)) Field SncTable.FromFilePath To sPath // Get Field_Current_Value Of (phoDD(Self)) Field SncTable.FromDriver To sDriver // End // If (pbFrom(Self)) Begin // Else Begin // Get Field_Current_Value Of (phoDD(Self)) Field SncTable.ToFilePath To sPath // Get Field_Current_Value Of (phoDD(Self)) Field SncTable.ToDriver To sDriver // End // Else Begin // Get OpenDDFFile (pbFrom(Self)) sPath sDriver False To iRetval Send DoComboFillList Of ho End // If (piDbType(Self) = 6) Begin If ho Send DoSetDefaults Of ho // 2003-07-26 ------------------------------------ Stop Nils G. Svedmyr End // Else Begin End_Procedure // DoUpdateDataTableCombo Procedure DoComboFillList Integer iType iOrgSize iSize iTmpSize iServers iCount iFile iField iItem Handle hoDD String sServer sValue Boolean bRecord bChanged If Not (Active_State(Self)) Procedure_Return Move (Low(GuiSize(Self))) To iOrgSize Get piDbType To iType Get phoDD To hoDD Get Current_Record Of hoDD To bRecord Get Data_File To iFile Get Data_Field To iField Get File_Field_Changed_State Of hoDD iFile iField To bChanged Get File_Field_Current_Value Of hoDD iFile iField To sValue Send Combo_Delete_Data // This is needed because combo_delete_data clears the DDO buffer: If bRecord Begin Set File_Field_Changed_Value Of hoDD iFile iField To sValue // 2003-05-27 ------------------------------------ Start Nils G. Svedmyr // Bugfix. Set File_Field_Changed_State Of hoDD iFile iField To bChanged // 2003-05-27 ------------------------------------ Stop Nils G. Svedmyr End // If bRecord Begin // Move (Trim(sValue)) To sValue If (iType <> 6) Send Combo_Add_Item " " Get EnumerateServers iType To iServers For iCount From 0 To (iServers - 1) Get ServerName iCount To sServer Send Combo_Add_Item sServer Get Text_Extent sServer To iTmpSize If (iTmpSize > iSize) Move iTmpSize To iSize Loop // For iCount From 0 To (iServers - 1) // If Not bRecord Move " " To sValue If (Length(sValue) > 0) Begin Get WinCombo_Item_Matching sValue To iItem If (iItem > 0) Set WinCombo_Current_Item To iItem End // If (Length(sValue) > 0) Begin If bRecord Set Changed_State Of hoDD To bChanged If (Low(iSize) > iOrgSize) Set ListWidth To (Low(iSize) + 20) Else Set ListWidth To iOrgSize Send DoSetListWidth End_Procedure // DoComboFillList // To be completed... Function EnumerateServers Integer iType Returns Integer Handle hoArray ho Integer iRetval iDsnType String sServer sDriver Get Private.phoArray To hoArray Send Delete_Data Of hoArray If (pbFrom(Self)) Get Field_Current_Value Of (phoDD(Self)) Field SncTable.FromDriver To sDriver Else Get Field_Current_Value Of (phoDD(Self)) Field SncTable.ToDriver To sDriver Case Begin Case (iType = 1) // DataFlex Case Break Case (iType = 2) // IBM DB2 UDB Send FillDB2Servers sDriver Case Break Case (iType = 3) // MS SQL Send FillSQLServers sDriver Case Break Case (iType = 4) // ODBC If (pbFrom(Self)) Get Field_Current_Value Of (phoDD(Self)) Field SncTable.FromDsnType To iDSNType Else Get Field_Current_Value Of (phoDD(Self)) Field SncTable.ToDsnType To iDSNType Send FillDSNs iDSNType sDriver Case Break Case (iType = 5) // Oracle Send FillOracleServers sDriver Case Break Case (iType = 6) // Pervasive Set Array_Value Of ho Item (Item_Count(ho)) To "File.ddf" Case Break Case Else Case End Function_Return (Item_Count(Private.phoArray(Self))) End_Function // EnumerateServers Procedure FillDB2Servers String sDriver Handle ho String sServer sDesc Integer iPos Get Private.phoArray To ho Send Delete_Data Of ho Set psDriver Of ghoBrowseConnect To sDriver Move "" To sServer Repeat Get DataSources Of ghoBrowseConnect To sServer If (Trim(sServer) <> ",") Begin Move (Pos(",", sServer)) To iPos Move (Right(sServer, (Length(sServer) - iPos))) To sDesc Move (Left(sServer, (iPos - 1))) To sServer Set Array_Value Of ho Item (Item_Count(ho)) To (Trim(sServer)) // Set Array_Value Of ho Item (Item_Count(ho)) To (sServer * "(" + String(sDesc) + ")") End // If (Trim(sServer) <> ",") Begin Until (Trim(sServer) = ",") // ...and sort items... Send Sort_Items Of ho End_Procedure // FillDB2Servers Procedure FillSQLServers String sDriver Handle ho String sServer Integer iCount iNumItems Get Private.phoArray To ho Send Delete_Data Of ho Set psDriver Of ghoBrowseConnect To MSSQLDRV_ID //sDriver Get BrowseConnect Of ghoBrowseConnect "DRIVER={SQL Server};" To sServer Get ExtractList Of ghoBrowseConnect sServer To iNumItems For iCount From 0 To (iNumItems - 1) Get String_Value Of ghoBrowseConnect Item iCount To sServer Set Array_Value Of ho Item (Item_Count(ho)) To (Trim(sServer)) Loop // ...and sort items... Send Sort_Items Of ho End_Procedure // FillSQLServers Procedure FillOracleServers String sDriver Handle ho String sServer Procedure_Return // *** Not implemented yet! *** Get Private.phoArray To ho Set psDriver Of ghoBrowseConnect To sDriver Move "" To sServer Repeat Get DataSources Of ghoBrowseConnect To sServer If (Trim(sServer) <> ",") ; Set Array_Value Of ho Item (Item_Count(ho)) To (Trim(sServer)) Until (Trim(sServer) = ",") // ...and sort items... Send Sort_Items Of ho End_Procedure // FillOracleServers Procedure FillDSNs Integer iType String sDriver Handle ho String sDSNName sPath Integer iNumDSN iCount iFile iField Get Private.phoArray To ho Get Data_File To iFile Get Data_Field To iField If (iType = 2) Begin Get File_Field_Current_Value Of (phoDD(Self)) iFile iField To sDSNName If (pbFrom(Self)) Get Field_Current_Value Of (phoDD(Self)) Field SncTable.FromFilePath To sPath Else Get Field_Current_Value Of (phoDD(Self)) Field SncTable.ToFilePath To sPath // 2003-07-26 ------------------------------------ Start Nils G. Svedmyr Set Array_Value Of ho Item (Item_Count(ho)) To (Trim(sDSNName)) // 2003-07-26 ------------------------------------ Stop Nils G. Svedmyr Procedure_Return End // If (iType = 2) Begin Else Begin ODBCEnumerateDataSources iNumDSN iType // First put all items in an array.... For iCount From 1 To iNumDSN ODBCDSNName iCount To sDSNName Set Array_Value Of ho Item (Item_Count(ho)) To (Trim(sDSNName)) Loop End // Else Begin // ...and sort items... Send Sort_Items Of ho End_Procedure // FillDSNList Function ServerName Integer iCount Returns String String sRetval Get String_Value Of (Private.phoArray(Self)) Item iCount To sRetval Function_Return sRetval End_Function // ServerName End_Class // cDbComboformServer