//**************************************************************************** // $Module type: CLASS // $Module name: cDbComboFormDatabase.pkg // $Author : Nils G. Svedmyr // Created : 2002-07-20 @ 09:02 // // Description : // // $Rev History // 2002-07-20 Module header created //**************************************************************************** Use cRdsDbComboform.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:24 #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 cDbComboFormDatabase Is A cRDSdbComboform Procedure Construct_Object Handle ho Forward Send Construct_Object // Visual DataFlex 12.0 Migration Utility, added March 28, 2007: 15:13:25 #IF (!@ >= 120) { InitialValue=True } #ENDIF Property Boolean pbFrom False Property Boolean pbFillError False Property Integer piDbType 0 Property Handle phoDD (Main_DD(Self)) Property Handle Private.phoArray 0 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 DoSetDefaults Handle hoDD Integer iFile iField iItem Get Data_File To iFile Get Data_Field To iField Get phoDD To hoDD If Not (Current_Record(hoDD)) Begin Send Combo_Delete_Data Send Combo_Add_Item " " Set WinCombo_Current_Item To 0 // showln " set" End // If Not (Current_Record(hoDD)) Begin End_Procedure // DoSetDefaults Procedure DoCheckClear Send Combo_Delete_Data Send Combo_Add_Item " " Set WinCombo_Current_Item To 0 End_Procedure // DoCheckClear Procedure DoEnableDisable Integer iDbType Handle ho Integer iRecord Set piDbType To iDbType // Set pbHidden To (iDbType <> 3) // New property in cRDSdbComboform.pkg Set Enabled_State To (iDbType = 3) // Send DoChangeLabel End_Procedure // DoEnableDisable // Procedure DoChangeLabel // Integer iType // String sLabel // If Not (Active_State(Self)) Procedure_Return // Get piDbType To iType // Get Label To sLabel // Case Begin // Case (iType = 1) // DataFlex // Case Break // Case (iType = 2) // IBM DB2 UDB // Case Break // Case (iType = 3) // MS SQL // Case Break // Case (iType = 4) // ODBC // Case Break // Case (iType = 5) // Oracle // Case Break // Case (iType = 6) // Pervasive // Case Break // Case Else // // Procedure_Return // Case End // End_Procedure // DoChangeLabel // Must be send from DDO when finding a record: // This will only display a previously saved database 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 If (iType <> 3) Procedure_Return If Not (Current_Record(hoDD)) Procedure_Return 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 // showln "DoFindData in cDbComboformServer" " sServer = " sValue " " Self Send Combo_Add_Item " " Send Combo_Add_Item sValue Get WinCombo_Item_Matching sValue To iItem If (iItem > -1) Set WinCombo_Current_Item To iItem End_Procedure // DoFindData // To be completed with ORACLE: Function EnumerateDatabases Integer iType Returns Integer Handle hoArray hoDD Integer iRetval iDsnType String sServer sDriver Get Private.phoArray To hoArray Send Delete_Data Of hoArray Get phoDD To hoDD If (pbFrom(Self)) Get Field_Current_Value Of hoDD Field SncTable.FromDriver To sDriver Else Get Field_Current_Value Of hoDD Field SncTable.ToDriver To sDriver Case Begin Case (iType = 1) // DataFlex Case Break Case (iType = 2) // IBM DB2 UDB Case Break Case (iType = 3) // MS SQL Send FillSQLDatabases sDriver Case Break Case (iType = 4) // ODBC Case Break Case (iType = 5) // Oracle Case Break Case (iType = 6) // Pervasive Case Break Case Else Case End Function_Return (Item_Count(Private.phoArray(Self))) End_Function // EnumerateDatabases Procedure FillSQLDatabases String sDriver Handle ho hoDD Integer iFile iField iNumberOfDrivers iCount iDriverNum iNumItems iNtAuth String sServer sDataBase sUser sPassword sConnect sText Get Private.phoArray To ho Get phoDD To hoDD Send Delete_Data Of ho Get Data_File To iFile Get Data_Field To iField If (pbFrom(Self)) Begin Get Field_Current_Value Of hoDD Field SncTable.FromServer To sServer Get Field_Current_Value Of hoDD Field SncTable.FromUser To sUser Get Field_Current_Value Of hoDD Field SncTable.FromPv To sPassword Get Field_Current_Value Of hoDD Field SncTable.FromNTAuth To iNtAuth End // If (pbFrom(Self)) Begin Else Begin Get Field_Current_Value Of hoDD Field SncTable.ToServer To sServer Get Field_Current_Value Of hoDD Field SncTable.ToUser To sUser Get Field_Current_Value Of hoDD Field SncTable.ToPv To sPassword Get Field_Current_Value Of hoDD Field SncTable.ToNTAuth To iNtAuth End // Else Begin If (sServer Contains "") Procedure_Return Move (Trim(sServer)) To sServer Move (Trim(sUser)) To sUser Move (Trim(sPassword)) To sPassword Set psDriver Of ghoBrowseConnect To sDriver If (Active_State(Self)) Send StartWorkingMessage ("Connecting to the" * String(sServer) * "Database Server...") If iNTAuth Begin Login (sServer + ";Trusted_Connection=Yes") sUser "" sDriver Move ("DRIVER={SQL Server};SERVER=" + String(sServer) + ";UID=sa;PWD=;") To sConnect // First try with blank password... Indicate Err False Send Ignore_Error Of Error_Info_Object 12289 Get BrowseConnect Of ghoBrowseConnect sConnect To sDataBase If (Err) Begin Indicate Err False Move ("DRIVER={SQL Server};SERVER=" + String(sServer) + ";UID=sa;PWD=sa;") To sConnect // ...then with 'sa' as password. Get BrowseConnect Of ghoBrowseConnect sConnect To sDataBase End // If (Err) Begin Send Trap_Error Of Error_Info_Object 12289 If (Err) Begin Send StopWorkingMessage Set pbFillError To True Move "The enumeration of databases failed. It is not possible to use NT Authentication to enumerate databases." To sText Move (sText * "CrossMerge tried to login with UserID=sa and both with Password='' (blank) and Password=sa, but it failed.") To sText Move (sText * "\nYou need to uncheck the 'Use NT Authentication' and enter a proper user account and password. Then try again.") To sText Send Info_Box sText Procedure_Return End // If (Err) Begin End // If iNTAuth Begin Else Begin Move (";UID=" + sUser + ";PWD=" + sPassword + ";") To sConnect Move (Trim(sConnect)) To sConnect Move ("DRIVER={SQL Server};SERVER=" + String(sServer) + sConnect) To sConnect Indicate Err False Send Ignore_Error Of Error_Info_Object 12289 Get BrowseConnect Of ghoBrowseConnect sConnect To sDataBase Send Trap_Error Of Error_Info_Object 12289 End // Else Begin If Not (Err) Begin Set pbFillError To False Get ExtractList Of ghoBrowseConnect sDataBase To iNumItems For iCount From 0 To (iNumItems - 1) Get String_Value Of ghoBrowseConnect Item iCount To sDataBase Move (Trim(sDatabase)) To sDataBase Set Array_Value Of ho Item (Item_Count(ho)) To sDataBase Loop // ...and sort items... Send Sort_Items Of ho End // If Not (Err) Begin Else Begin Send StopWorkingMessage Set pbFillError To True Send Info_Box "Could not connect to the server. Check your username and password or your rights with the system operator." Procedure_Return End // Else Begin Send StopWorkingMessage End_Procedure // FillSQLDatabases Function DatabaseName Integer iCount Returns String String sRetval Get String_Value Of (Private.phoArray(Self)) Item iCount To sRetval Function_Return sRetval End_Function // DatabaseName // Public access method to fill combo: // This message is send by OnCloseUp in cDbComboformServer class: // NOTE: Has been changed to using the OnDropDown procedure in this class. Procedure DoRefreshCombo Send DoComboFillList End_Procedure // DoFillDatabases Procedure DoComboFillList Integer iType iOrgSize iSize iTmpSize iDatabases iCount iFile iField iItem Handle hoDD String sDatabase 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 Move (Trim(sValue)) To sValue Send Combo_Delete_Data If (piDbType(Self) <> 3) Procedure_Return // MS SQL // This is needed because combo_delete_data clears the DDO buffer: If (Trim(Length(sValue) > 0)) Begin Set File_Field_Changed_Value Of hoDD iFile iField To sValue Set File_Field_Changed_State Of hoDD iFile iField To bChanged End // If bRecord Begin Send Combo_Add_Item " " Set WinCombo_Current_Item To 0 Get EnumerateDatabases iType To iDatabases For iCount From 0 To (iDatabases - 1) Get DatabaseName iCount To sDatabase Send Combo_Add_Item sDatabase Get Text_Extent sDatabase To iTmpSize If (iTmpSize > iSize) Move iTmpSize To iSize Loop // For iCount From 0 To (iServers - 1) If (Low(iSize) > iOrgSize) Set ListWidth To (Low(iSize) + 20) Else Set ListWidth To iOrgSize Send DoSetListWidth If Not bRecord Move " " 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_Procedure // DoComboFillList Procedure OnDropDown Handle hoDD Get phoDD To hoDD If (Current_Record(hoDD) And (Combo_Item_Count(Self) < 3)) Send DoComboFillList Else If (Combo_Item_Count(Self) < 2) Send DoComboFillList // Do not drop-down list if there was a problem with // connecting to the database server: If Not (pbFillError(Self)) Begin // Forward Send OnDropDown // THIS DOESN'T WORK !!! End End_Procedure // OnDropDown 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 (Trim(sOldValue) <> Trim(sNewValue)) Send DoUpdateDataBaseCombo End_Procedure // OnCloseUp // This will update a data table combo with available SQL data tables, // if available. Procedure DoUpdateDataBaseCombo Handle ho hoDD Get phoDD To hoDD 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 If ho Send DoSetDefaults Of ho End_Procedure // DoUpdateDataBaseCombo End_Class // cDbComboFormDatabase