496 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			496 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| /*********************************************************************************************
 | |
|  * Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
 | |
|  * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
 | |
|  * ------------------------------------------------------------------------------
 | |
|  * $Workfile: vdb_TransUsage.cs $     $Revision: 7 $
 | |
|  * $Author: Kathy $   $Date: 5/01/06 11:17a $
 | |
|  *
 | |
|  * $History: vdb_TransUsage.cs $
 | |
|  * 
 | |
|  * *****************  Version 7  *****************
 | |
|  * User: Kathy        Date: 5/01/06    Time: 11:17a
 | |
|  * Updated in $/LibSource/VDB
 | |
|  * Fix B2006-018: single quote in proc number causes problem on data
 | |
|  * request
 | |
|  * 
 | |
|  * *****************  Version 6  *****************
 | |
|  * User: Kathy        Date: 8/16/05    Time: 2:54p
 | |
|  * Updated in $/LibSource/VDB
 | |
|  * B2005-030: error if missing ndx
 | |
|  * 
 | |
|  * *****************  Version 5  *****************
 | |
|  * User: Kathy        Date: 4/21/05    Time: 10:20a
 | |
|  * Updated in $/LibSource/VDB
 | |
|  * always write inf file
 | |
|  * 
 | |
|  * *****************  Version 4  *****************
 | |
|  * User: Kathy        Date: 3/08/05    Time: 1:48p
 | |
|  * Updated in $/LibSource/VDB
 | |
|  * Approval
 | |
|  * 
 | |
|  * *****************  Version 3  *****************
 | |
|  * User: Jsj          Date: 8/30/04    Time: 12:16p
 | |
|  * Updated in $/LibSource/VDB
 | |
|  * upper cased WHERE string did not find mixed cased database items, now
 | |
|  * use the WHERE string as it is passed in.
 | |
|  * 
 | |
|  * *****************  Version 2  *****************
 | |
|  * User: Jsj          Date: 8/23/04    Time: 10:13a
 | |
|  * Updated in $/LibSource/VDB
 | |
|  * Fixed replace of single quote
 | |
|  * 
 | |
|  * *****************  Version 1  *****************
 | |
|  * User: Kathy        Date: 7/27/04    Time: 8:40a
 | |
|  * Created in $/LibSource/VDB
 | |
|  *********************************************************************************************/
 | |
| 
 | |
| using System;
 | |
| using System.Data;
 | |
| using System.Text;
 | |
| using System.Collections.Specialized;
 | |
| using System.IO;
 | |
| using System.Windows.Forms;
 | |
| using VDB;
 | |
| using VDB_ConnType;
 | |
| 
 | |
| namespace VDB_TransUsage
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Open, Create, Delete, Update functions for Transition Usage files (tables)
 | |
| 	/// </summary>
 | |
| 	public class vdb_TransUsage:VDB_Base
 | |
| 	{
 | |
| 		public enum SortTypes {NotSorted,FromSort,ToSort}; // list of sorting types
 | |
| 
 | |
| 		public string TransFromNDX = "";
 | |
| 		public string TransToNDX = "";
 | |
| 
 | |
| 		public vdb_TransUsage(String strPath):base(strPath)
 | |
| 		{
 | |
| 			// if no table (file name) specified, then default to TRAN (TRAN.DBF)
 | |
| 			if (DBTable.Equals(""))
 | |
| 				DBTable = "TRAN";
 | |
| 		}
 | |
| 
 | |
| 		// Build a SQL statement. Optionally sort and filter the select statement.
 | |
| 		private void BuildSelectCommand(int SortingType,string WhereStr)
 | |
| 		{
 | |
| 			StringBuilder tmp = new StringBuilder();
 | |
| 			tmp.Append("SELECT [FROMNUMBER],[FROMSEQUEN],[FROMINSTAN],[TYPE],");
 | |
| 			tmp.Append("[TONUMBER],[TOSEQUENCE],[TOINSTANCE],[DTI],[OLDTO] FROM [");
 | |
| 			tmp.Append(DBTable);
 | |
| 			tmp.Append("]");
 | |
| 			
 | |
| 			if (WhereStr.Length > 0) // Was a WHERE clause passed in?
 | |
| 			{
 | |
| 				// Add " WHERE " to the beginning if it is not already there
 | |
| 				string tmpstr = WhereStr.ToUpper();
 | |
| 				if (tmpstr[0] != ' ')
 | |
| 				{
 | |
| 					tmp.Append(" ");
 | |
| 					if (!tmpstr.StartsWith("WHERE "))
 | |
| 						tmp.Append("WHERE ");
 | |
| 				}
 | |
| 				else if (!tmpstr.StartsWith(" WHERE "))
 | |
| 					tmp.Append(" WHERE");
 | |
| 				// add the passed in WHERE clause
 | |
| // When the WhereStr was upper cased, procedure numbers with mixed and/or lower
 | |
| // cased letters would not be found.  Therefore, use the WhereStr exactly as it
 | |
| // was sent in.
 | |
| //				tmp.Append(tmpstr);
 | |
| 				tmp.Append(WhereStr);
 | |
| 			}
 | |
| 
 | |
| 			switch (SortingType)
 | |
| 			{
 | |
| 				case 0: //NotSorted
 | |
| 					break;
 | |
| 				case 1: // FromSort - sorted by FROMNUMBER
 | |
| 					tmp.Append(" GROUP BY [FROMNUMBER],[FROMSEQUEN],[FROMINSTAN],[TYPE],");
 | |
| 					tmp.Append("[TONUMBER],[TOSEQUENCE],[TOINSTANCE],[DTI],[OLDTO]");
 | |
| 					break;
 | |
| 				case 2: // Tosort - sorted by TONUMBER
 | |
| 					tmp.Append(" GROUP BY [TONUMBER],[TOSEQUENCE],[TOINSTANCE],");
 | |
| 					tmp.Append("[FROMNUMBER],[FROMSEQUEN],[FROMINSTAN],[TYPE],[DTI],[OLDTO]");
 | |
| 					break;
 | |
| 			}
 | |
| 			SelectCmd = tmp.ToString();		
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		private void BuildNDXFileNames()
 | |
| 		{
 | |
| 			TransFromNDX = DBTable +"FROM";
 | |
| 			TransToNDX = DBTable + "TO";
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		// Build the SQL command needed to update a row in the TRAN file
 | |
| 		public override string GetRecUpdateStr(DataTable tbl,DataRow row)
 | |
| 		{
 | |
| 			int j = 0;
 | |
| 			bool FirstOne = true;
 | |
| 			StringBuilder updateStr = new StringBuilder();
 | |
| 			string strNumber = "";
 | |
| 			string strSequence = "";
 | |
| 			string strInstance = "";
 | |
| 
 | |
| 			updateStr.Append("UPDATE [");
 | |
| 			updateStr.Append(DBTable);
 | |
| 			updateStr.Append("] SET");
 | |
| 
 | |
| 			foreach (DataColumn col in tbl.Columns)
 | |
| 			{
 | |
| 				bool isString = (col.DataType == Type.GetType("System.String"));
 | |
| 
 | |
| 				if (col.ColumnName.Equals("FROMNUMBER"))
 | |
| 				{
 | |
| 					strNumber = row.ItemArray[j].ToString();
 | |
| 					strNumber = strNumber.Replace("'","''");
 | |
| 				}
 | |
| 				else if (col.ColumnName.Equals("FROMSEQUEN"))
 | |
| 				{
 | |
| 					strSequence = row.ItemArray[j].ToString();
 | |
| 					strSequence = strSequence.Replace("'","''");
 | |
| 				}
 | |
| 				else if (col.ColumnName.Equals("FROMINSTAN"))
 | |
| 				{
 | |
| 					strInstance = row.ItemArray[j].ToString();
 | |
| 					strInstance = strInstance.Replace("'","''");
 | |
| 				}
 | |
| 
 | |
| 				if (FirstOne)
 | |
| 				{
 | |
| 					updateStr.Append(" [");
 | |
| 					FirstOne = false;
 | |
| 				}
 | |
| 				else
 | |
| 					updateStr.Append(", [");
 | |
| 
 | |
| 				updateStr.Append(col.ColumnName);
 | |
| 				updateStr.Append("]=");
 | |
| 
 | |
| 				if (row.ItemArray[j].ToString().Equals(""))
 | |
| 				{
 | |
| 					updateStr.Append("NULL");
 | |
| 				}
 | |
| 				else if (isString)
 | |
| 				{
 | |
| 					String tmpstr = row.ItemArray[j].ToString();
 | |
| 					updateStr.Append("'");
 | |
| 					tmpstr = tmpstr.Replace("'","''");
 | |
| 					updateStr.Append(tmpstr);
 | |
| 					updateStr.Append("'");
 | |
| 				}
 | |
| 				j++;
 | |
| 			}
 | |
| 			// Add the WHERE clause
 | |
| 			updateStr.Append(" WHERE [FROMNUMBER] = '");
 | |
| 			updateStr.Append(strNumber.ToString());
 | |
| 			updateStr.Append("' AND [FROMSEQUEN] = '");
 | |
| 			updateStr.Append(strSequence.ToString());
 | |
| 			updateStr.Append("' AND [FROMINSTAN] = '");
 | |
| 			updateStr.Append(strInstance.ToString());
 | |
| 			updateStr.Append("'");
 | |
| 			return updateStr.ToString();
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		// Build the SQL command needed to insert a row in the TRAN file
 | |
| 		public override string GetRecInsertStr(DataTable tbl,DataRow row)
 | |
| 		{
 | |
| 			int j = 0;
 | |
| 			StringBuilder insrtStr = new StringBuilder();
 | |
| 			StringBuilder valueStr = new StringBuilder();
 | |
| 
 | |
| 			insrtStr.Append("INSERT INTO [");
 | |
| 			insrtStr.Append(DBTable);
 | |
| 			insrtStr.Append("] (");
 | |
| 
 | |
| 			valueStr.Append(" VALUES (");
 | |
| 
 | |
| 			foreach (DataColumn col in tbl.Columns)
 | |
| 			{
 | |
| 				bool isString = (col.DataType == Type.GetType("System.String"));
 | |
| 				insrtStr.Append("[");
 | |
| 				insrtStr.Append(col.ColumnName);
 | |
| 				insrtStr.Append("],");
 | |
| 
 | |
| 				if (row.ItemArray[j].ToString().Equals(""))
 | |
| 				{
 | |
| 					valueStr.Append("NULL");
 | |
| 				}
 | |
| 				else if (isString)
 | |
| 				{
 | |
| 					String tmpstr = row.ItemArray[j].ToString();
 | |
| 					tmpstr = tmpstr.Replace("'","''");
 | |
| 					valueStr.Append("'");
 | |
| 					valueStr.Append(tmpstr);
 | |
| 					valueStr.Append("'");
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					valueStr.Append(row.ItemArray[j].ToString());
 | |
| 				}
 | |
| 				valueStr.Append(",");
 | |
| 				j++;
 | |
| 			}
 | |
| 
 | |
| 			insrtStr = insrtStr.Replace(',',')',insrtStr.Length-1,1);
 | |
| 			valueStr = valueStr.Replace(',',')',valueStr.Length-1,1);
 | |
| 			insrtStr.Append(valueStr.ToString());
 | |
| 
 | |
| 			return insrtStr.ToString();
 | |
| 		}
 | |
| 
 | |
| 		// Build the SQL command needed to delete a row in the TRAN file
 | |
| 		public override string RecDeleteStr(DataTable tbl,DataRow row)
 | |
| 		{
 | |
| 			int j = 0;
 | |
| 			string strNumber = "";
 | |
| 			string strSequence = "";
 | |
| 			string strInstance = "";
 | |
| 			StringBuilder deleteStr = new StringBuilder();
 | |
| 
 | |
| 			deleteStr.Append("DELETE FROM [");
 | |
| 			deleteStr.Append(DBTable);
 | |
| 			deleteStr.Append("]");
 | |
| 
 | |
| 			row.RejectChanges();
 | |
| 			foreach (DataColumn col in tbl.Columns)
 | |
| 			{
 | |
| 				if (col.ColumnName.Equals("FROMNUMBER"))
 | |
| 				{
 | |
| 					strNumber = row.ItemArray[j].ToString();
 | |
| 					strNumber = strNumber.Replace("'","''");
 | |
| 				}
 | |
| 				else if (col.ColumnName.Equals("FROMSEQUEN"))
 | |
| 				{
 | |
| 					strSequence = row.ItemArray[j].ToString();
 | |
| 					strSequence = strSequence.Replace("'","''");
 | |
| 				}
 | |
| 				else if (col.ColumnName.Equals("FROMINSTAN"))
 | |
| 				{
 | |
| 					strInstance = row.ItemArray[j].ToString();
 | |
| 					strInstance = strInstance.Replace("'","''");
 | |
| 				}
 | |
| 				j++;
 | |
| 			}
 | |
| 			// Add the WHERE clause
 | |
| 			deleteStr.Append(" WHERE [FROMNUMBER] = '");
 | |
| 			deleteStr.Append(strNumber.ToString());
 | |
| 			deleteStr.Append("' AND [FROMSEQUEN] = '");
 | |
| 			deleteStr.Append(strSequence.ToString());
 | |
| 			deleteStr.Append("' AND [FROMINSTAN] = '");
 | |
| 			deleteStr.Append(strInstance.ToString());
 | |
| 			deleteStr.Append("'");
 | |
| 
 | |
| 			return deleteStr.ToString();
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		public override string GetCreateIndx1String()
 | |
| 		{
 | |
| 			StringBuilder index1Str = new StringBuilder();
 | |
| 			index1Str.Append("CREATE INDEX [");
 | |
| 			index1Str.Append(TransFromNDX);
 | |
| 			index1Str.Append("] ON ");
 | |
| 			index1Str.Append(DBTable);
 | |
| 			index1Str.Append(".DBF ([FROMNUMBER],[FROMSEQUEN],[FROMINSTAN])");
 | |
| 			return (index1Str.ToString());
 | |
| 		}
 | |
| 
 | |
| 		public override string GetCreateIndx2String()
 | |
| 		{
 | |
| 			StringBuilder index2Str = new StringBuilder();
 | |
| 			index2Str.Append("CREATE INDEX [");
 | |
| 			index2Str.Append(TransToNDX);
 | |
| 			index2Str.Append("] ON ");
 | |
| 			index2Str.Append(DBTable);
 | |
| 			index2Str.Append(".DBF ([TONUMBER], [TOSEQUENCE])");
 | |
| 			return (index2Str.ToString());
 | |
| 		}
 | |
| 
 | |
| 		public override bool IndexFilesExist()
 | |
| 		{
 | |
| 			if (TransFromNDX==""||TransToNDX=="")BuildNDXFileNames();
 | |
| 			if(!File.Exists(DBPath+"\\"+TransFromNDX+".NDX") || !File.Exists(DBPath+"\\"+TransToNDX+".NDX")) return false;
 | |
| 			return true;
 | |
| 		}
 | |
| 		public override void DeleteIndexFiles()
 | |
| 		{
 | |
| 			if(File.Exists(DBPath+"\\"+TransFromNDX+".NDX")) File.Delete(DBPath+"\\"+TransFromNDX+".NDX");
 | |
| 			if(File.Exists(DBPath+"\\"+TransToNDX+".NDX")) File.Delete(DBPath+"\\"+TransToNDX+".NDX");
 | |
| 			if(File.Exists(DBPath+"\\"+DBTable+".INF")) File.Delete(DBPath+"\\"+DBTable+".INF");
 | |
| 		}
 | |
| 
 | |
| 		public override StringCollection CreateIndexFilesStatements()
 | |
| 		{
 | |
| 			if (isdBaseFile())
 | |
| 			{
 | |
| 				StringCollection rtnStrColl = new StringCollection();
 | |
| 				string indx1 = GetCreateIndx1String();
 | |
| 				rtnStrColl.Add(indx1);
 | |
| 				string indx2 = GetCreateIndx2String();
 | |
| 				rtnStrColl.Add(indx2);
 | |
| 				return rtnStrColl;
 | |
| 			}
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		// Build a list of SQL commands needed to create a new TRAN table (file)
 | |
| 		// and add the first row
 | |
| 		public override StringCollection CreateTableStatements(string strTblName)
 | |
| 		{
 | |
| 			StringCollection rtnStrColl = new StringCollection();
 | |
| 			StringBuilder createStr = new StringBuilder();
 | |
| 			//StringBuilder index1Str = new StringBuilder();
 | |
| 			//StringBuilder index2Str = new StringBuilder();
 | |
| 
 | |
| 			if (strTblName.Length > 0) // was a table name passd in?
 | |
| 			{
 | |
| 				DBTable = strTblName;
 | |
| 			}
 | |
| 
 | |
| 			if (DBTable.Equals(""))
 | |
| 			{
 | |
| 				MessageBox.Show("Trying to Create a new Table without a Name","Create Table Error");
 | |
| 				return rtnStrColl;
 | |
| 			}
 | |
| 
 | |
| 			// Build the command that creates a new SET table (file)
 | |
| 			createStr.Append("CREATE TABLE [");
 | |
| 			createStr.Append(DBTable);
 | |
| 			createStr.Append("] ");
 | |
| 			createStr.Append("([FROMNUMBER] Char(20), [FROMSEQUEN] Char(12), ");
 | |
| 			createStr.Append("[FROMINSTAN] Char(1), [TYPE] Char(1),");
 | |
| 			createStr.Append("[TONUMBER] Char(20), [TOSEQUENCE] Char(12), ");
 | |
| 			createStr.Append("[TOINSTANCE] Char(2), [DTI] Char(18), [OLDTO] Char(32))");
 | |
| 
 | |
| 			rtnStrColl.Add(createStr.ToString()); // add create table
 | |
| 
 | |
| 			if (isdBaseFile())
 | |
| 			{
 | |
| 				// Build the command that creates the first index file
 | |
| 				rtnStrColl.Add(GetCreateIndx1String()); // add create 1st index
 | |
| 
 | |
| 				// Build the commmand that creates the second index file
 | |
| 				//string tmp = DBTable;				
 | |
| 
 | |
| 				rtnStrColl.Add(GetCreateIndx2String()); // add create 2nd index
 | |
| 			}
 | |
| 
 | |
| 			return rtnStrColl;
 | |
| 		}
 | |
| 
 | |
| 		// After the table is created, create the associated INF file
 | |
| 		public override int PostCreateTableFunction()
 | |
| 		{
 | |
| 			CreateINF();  // should already be created
 | |
| 			return 0;
 | |
| 		}
 | |
| 
 | |
| 		// This will be called from CreateTableStatements()
 | |
| 		// and this is called if the table name is assigned to the DBTable property
 | |
| 		public override int CreateINF()
 | |
| 		{
 | |
| 			// if we are using dBase files, create an INF file containing
 | |
| 			// a list of the associated NDX files.
 | |
| 			if (isdBaseFile())
 | |
| 			{
 | |
| 				StreamWriter infFile;
 | |
| 				string infFileStr;
 | |
| 				StringBuilder tmp = new StringBuilder();
 | |
| 
 | |
| 				// build the ndx file names (w/o extensions)
 | |
| 				BuildNDXFileNames();
 | |
| 
 | |
| 				//build INF file name
 | |
| 				tmp.Append(DBPath);
 | |
| 				tmp.Append("\\");
 | |
| 				tmp.Append(DBTable);
 | |
| 				tmp.Append(".INF");
 | |
| 
 | |
| 				infFileStr = tmp.ToString();
 | |
| 
 | |
| 				// if the INF file does not already exist create it
 | |
| 				//if (!File.Exists(infFileStr))
 | |
| 				//{
 | |
| 				// always recreate it. Some plants' data had invalid files
 | |
| 				// and it was felt that it would be quicker to recreate always
 | |
| 				// rather than 
 | |
| 				infFile = new StreamWriter(infFileStr,false);
 | |
| 				infFile.Write("NDX1=");
 | |
| 				infFile.Write(TransFromNDX); // TRANFROM.NDX
 | |
| 				infFile.Write(".NDX\r\n");
 | |
| 				infFile.Write("NDX2=");
 | |
| 				infFile.Write(TransToNDX); //TRANTO.NDX
 | |
| 				infFile.Write(".NDX\r\n");
 | |
| 				infFile.Close();
 | |
| 				//}
 | |
| 			}
 | |
| 			return 0;
 | |
| 		}
 | |
| 
 | |
| 		// return a list of SQL commands that will drop (delete) a database table (file)
 | |
| 		public override StringCollection DeleteTableStatements(string strTblName)
 | |
| 		{
 | |
| 			StringCollection rtnStrColl = new StringCollection();
 | |
| 			StringBuilder DropTableStr = new StringBuilder();
 | |
| 
 | |
| 			DropTableStr.Append("Drop Table [");
 | |
| 			DropTableStr.Append(DBTable);
 | |
| 			DropTableStr.Append("]");
 | |
| 
 | |
| 			rtnStrColl.Add(DropTableStr.ToString());
 | |
| 			return rtnStrColl;
 | |
| 		}
 | |
| 
 | |
| 		// return a dataset of Transition Usage records, not sorted
 | |
| 		public System.Data.DataSet GetNotSorted(string WhereStr)
 | |
| 		{
 | |
| 			BuildSelectCommand((int)SortTypes.NotSorted,WhereStr);
 | |
| 			return DB_Data;
 | |
| 		}
 | |
| 
 | |
| 		// return a dataset or Transition Usage records, sorted by the [FROMNUMBER] field
 | |
| 		public System.Data.DataSet GetSortedByFromTrans(string WhereStr)
 | |
| 		{
 | |
| 			BuildSelectCommand((int)SortTypes.FromSort,WhereStr);
 | |
| 			return DB_Data;
 | |
| 		}
 | |
| 
 | |
| 		// return a dataset or Transition Usage records, sorted by the [TONUMBER] field
 | |
| 		public System.Data.DataSet GetSortedByToTrans(string WhereStr)
 | |
| 		{
 | |
| 			BuildSelectCommand((int)SortTypes.ToSort,WhereStr);
 | |
| 			return DB_Data;
 | |
| 		}
 | |
| 
 | |
| 		public void UpdateProcNumber(string oldnum, string newnum)
 | |
| 		{
 | |
| 			// Change fromnumber first, then tonumber
 | |
| 			StringBuilder updateStr = new StringBuilder();
 | |
| 			updateStr.Append("UPDATE [");
 | |
| 			updateStr.Append(DBTable);
 | |
| 			updateStr.Append("] SET [FROMNUMBER] = '");
 | |
| 			updateStr.Append(newnum.Replace("'","''"));
 | |
| 			updateStr.Append("' WHERE [FROMNUMBER] = '");
 | |
| 			updateStr.Append(oldnum.Replace("'","''"));
 | |
| 			updateStr.Append("'");
 | |
| 			ProcessACommand(updateStr.ToString());
 | |
| 
 | |
| 			// now to...
 | |
| 			updateStr.Remove(0,updateStr.Length);
 | |
| 			updateStr.Append("UPDATE [");
 | |
| 			updateStr.Append(DBTable);
 | |
| 			updateStr.Append("] SET [TONUMBER] = '");
 | |
| 			updateStr.Append(newnum.Replace("'","''"));
 | |
| 			updateStr.Append("' WHERE [TONUMBER] = '");
 | |
| 			updateStr.Append(oldnum.Replace("'","''"));
 | |
| 			updateStr.Append("'");
 | |
| 			ProcessACommand(updateStr.ToString());
 | |
| 		}
 | |
| 	}
 | |
| }
 |