private PartnerEditTDSFamilyMembersTable GetFamilyMembersInternal(Int64 AFamilyPartnerKey, String AWorkWithSpecialType, out Int32 ACount, Boolean ACountOnly) { TDBTransaction ReadTransaction; OdbcParameter[] ParametersArray; Boolean NewTransaction = false; PartnerEditTDSFamilyMembersTable PartnerTypeFamilyMembersDT; PPersonTable FamilyPersonsDT; PPartnerTypeTable PartnerTypesDT; DataRow[] PartnerTypesFoundRows; PartnerEditTDSFamilyMembersRow NewRow; StringCollection RequiredColumns; int Counter; Boolean TypeCodePresent; DataSet TmpDS; PartnerTypeFamilyMembersDT = new PartnerEditTDSFamilyMembersTable(); try { ReadTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.RepeatableRead, TEnforceIsolationLevel.eilMinimum, out NewTransaction); ParametersArray = new OdbcParameter[1]; ParametersArray[0] = new OdbcParameter("", OdbcType.Decimal, 10); ParametersArray[0].Value = (System.Object)AFamilyPartnerKey; if (ACountOnly) { ACount = Convert.ToInt32(DBAccess.GDBAccessObj.ExecuteScalar( "SELECT COUNT(*) " + "FROM PUB_" + PPersonTable.GetTableDBName() + " INNER JOIN " + "PUB_" + PPartnerTable.GetTableDBName() + " ON " + "PUB_" + PPersonTable.GetTableDBName() + '.' + PPartnerTable.GetPartnerKeyDBName() + " = " + "PUB_" + PPartnerTable.GetTableDBName() + '.' + PPartnerTable.GetPartnerKeyDBName() + ' ' + "WHERE " + PPersonTable.GetFamilyKeyDBName() + " = ? " + "AND " + PPartnerTable.GetStatusCodeDBName() + " <> '" + SharedTypes.StdPartnerStatusCodeEnumToString(TStdPartnerStatusCode.spscMERGED) + "'", ReadTransaction, ParametersArray)); // Make sure we don't count MERGED Partners (shouldn't have a p_family_key_n, but just in case.) } else { // Find all Persons that belong to the Family // TLogging.LogAtLevel(7, "TPartnerEditUIConnector.GetFamilyMembersInternal: loading Persons for Family " + AFamilyPartnerKey.ToString() + "..."); TmpDS = new DataSet(); FamilyPersonsDT = new PPersonTable(); TmpDS.Tables.Add(FamilyPersonsDT); DBAccess.GDBAccessObj.Select(TmpDS, "SELECT " + "PUB_" + PPartnerTable.GetTableDBName() + '.' + PPartnerTable.GetPartnerKeyDBName() + ", " + PPersonTable.GetFamilyNameDBName() + ", " + PPersonTable.GetTitleDBName() + ", " + PPersonTable.GetFirstNameDBName() + ", " + PPersonTable.GetMiddleName1DBName() + ", " + PPersonTable.GetFamilyIdDBName() + ", " + PPersonTable.GetGenderDBName() + ", " + PPersonTable.GetDateOfBirthDBName() + ' ' + "FROM PUB_" + PPersonTable.GetTableDBName() + " INNER JOIN " + "PUB_" + PPartnerTable.GetTableDBName() + " ON " + "PUB_" + PPersonTable.GetTableDBName() + '.' + PPartnerTable.GetPartnerKeyDBName() + " = " + "PUB_" + PPartnerTable.GetTableDBName() + '.' + PPartnerTable.GetPartnerKeyDBName() + ' ' + "WHERE " + PPersonTable.GetFamilyKeyDBName() + " = ? " + "AND " + PPartnerTable.GetStatusCodeDBName() + " <> '" + SharedTypes.StdPartnerStatusCodeEnumToString(TStdPartnerStatusCode.spscMERGED) + "'", // Make sure we don't load MERGED Partners (shouldn't have a p_family_key_n, but just in case.) PPersonTable.GetTableName(), ReadTransaction, ParametersArray, 0, 0); ACount = FamilyPersonsDT.Rows.Count; RequiredColumns = new StringCollection(); RequiredColumns.Add(PPartnerTypeTable.GetTypeCodeDBName()); TypeCodePresent = false; // Add Persons to Table for (Counter = 0; Counter <= FamilyPersonsDT.Rows.Count - 1; Counter += 1) { // Load a Person's SpecialTypes if requested if (AWorkWithSpecialType != "") { PartnerTypesDT = PPartnerTypeAccess.LoadViaPPartner( FamilyPersonsDT[Counter].PartnerKey, RequiredColumns, ReadTransaction, null, 0, 0); if (PartnerTypesDT.Rows.Count != 0) { // check if the searched for Special Type is present PartnerTypesFoundRows = PartnerTypesDT.Select( PPartnerTypeTable.GetTypeCodeDBName() + " = '" + AWorkWithSpecialType + "'"); if ((PartnerTypesFoundRows != null) && (PartnerTypesFoundRows.Length > 0)) { TypeCodePresent = true; } else { TypeCodePresent = false; } } else { TypeCodePresent = false; } } NewRow = PartnerTypeFamilyMembersDT.NewRowTyped(false); NewRow.PartnerKey = FamilyPersonsDT[Counter].PartnerKey; NewRow.PartnerShortName = Calculations.DeterminePartnerShortName(TSaveConvert.StringColumnToString(FamilyPersonsDT.ColumnFamilyName, FamilyPersonsDT[Counter]), TSaveConvert.StringColumnToString(FamilyPersonsDT.ColumnTitle, FamilyPersonsDT[Counter]), TSaveConvert.StringColumnToString(FamilyPersonsDT.ColumnFirstName, FamilyPersonsDT[Counter]), TSaveConvert.StringColumnToString(FamilyPersonsDT.ColumnMiddleName1, FamilyPersonsDT[Counter])); NewRow.FamilyId = FamilyPersonsDT[Counter].FamilyId; if (AWorkWithSpecialType != "") { NewRow.TypeCodePresent = TypeCodePresent; NewRow.TypeCodeModify = false; // TODO 2 oChristianK cSpecial Types / Family Members : Add all other Special Types of each Person NewRow.OtherTypeCodes = "#NOT YET RETRIEVED FROM DB!#"; } NewRow.Gender = FamilyPersonsDT[Counter].Gender; try { NewRow.DateOfBirth = FamilyPersonsDT[Counter].DateOfBirth; } catch (System.Data.StrongTypingException) { NewRow.DateOfBirth = System.DateTime.MinValue; } PartnerTypeFamilyMembersDT.Rows.Add(NewRow); } } } finally { if (NewTransaction) { DBAccess.GDBAccessObj.CommitTransaction(); TLogging.LogAtLevel(7, "TPartnerEditUIConnector.GetFamilyMembersInternal: committed own transaction."); } } return PartnerTypeFamilyMembersDT; }