예제 #1
0
 private void newDropDown(EntryItem edit, int fromTable, int link, int Top, int Left, int Width, string text)
 {
     using (AutoCursor.DatabaseCall)
       {
     try
     {
       edit.Combo(Top, Left, Width, text);
       DBHandler db = new DBHandler(connect);
       int tno = pcLinks[link].tableNo;
       TPCTable pcTable = pcTables[tno];
       int noFields = pcTable.noFields;
       int offsetFields = pcTable.offsetFields;
       int noShowFields = pcTable.noShowFields;
       int offsetShowFields = pcTable.offsetShowFields;
       int noOrderFields = pcTable.noOrderFields;
       int noLinkPairs = pcLinks[link].noLinkPairs;
       int offsetOrderFields = pcTable.offsetOrderFields;
       if (noShowFields > 0)
     db.GetTable(pcTable.name, pcFields, offsetFields, noFields, pcShowFields, offsetShowFields, noShowFields);
       else
     db.GetTable(pcTable.name, pcFields, offsetFields, noFields, pcOrderFields, offsetOrderFields, noOrderFields);
       DataTable table = db.GetDataTable();
       System.Data.DataRowCollection rows = table.Rows;
       for (int row = 0; row < rows.Count; row++)
       {
     string[] values = new string[noLinkPairs];
     string[] descr = new string[noShowFields == 0 ? noLinkPairs : noShowFields];
     for (int field = 0; field < noFields; field++)
     {
       int offset = pcLinks[link].offsetLinkPairs;
       int offset2 = pcTable.offsetShowFields;
       for (int pair = 0; pair < noLinkPairs; pair++)
       {
         if (field == pcLinkPairs[pair + offset].toNo)
         {
           values[pair] = rows[row][field].ToString();
           if (noShowFields == 0)
             descr[pair] = values[pair];
         }
       }
       for (int show = 0; show < noShowFields; show++)
       {
         if (field == pcShowFields[offset2 + show].index)
           descr[show] = rows[row][field].ToString();
       }
     }
     edit.combo.Items.Add(new ListItem(values, descr, row));
       }
       int no = getIndex(edit.combo, text);
       edit.combo.SelectedIndex = no;
     }
     catch (Exception ex)
     {
       showException(ex);
     }
       }
 }
예제 #2
0
 private void parmExecute(EHow how)
 {
     if (allowUpdates == false && how != EHow.DISPLAY)
     return;
       string where = "", c = "", query = "";
       int row = -1;
       int field;
       DataTable data = null;
       int offset = pcTable.offsetFields;
       if (tablesDataGrid.CurrentRow != null)
       {
     where = "WHERE ";
     row = tablesDataGrid.CurrentRow.Index;
     data = tablesDataGrid.DataSource as DataTable;
     for (int k = 0; k < pcTable.noKeyFields; k++)
     {
       int okfield = k + pcTable.offsetKeyFields;
       field = pcKeyFields[okfield].index;
       string value = data.Rows[row][field].ToString();
       TPCField pcField = pcFields[offset + field];
       string ready = sqlReady(pcField, value);
       where += c + pcFields[offset + field].name + " = " + ready;
       c = " AND ";
     }
       }
       string oldUsId = "";
       string oldTmStamp = "";
       string newUsId = "";
       string newTmStamp = "";
       if (row != -1)
       {
     int no = pcTable.noFields;
     oldUsId = data.Rows[row][no].ToString();
     oldTmStamp = DateTime.Parse(data.Rows[row][no + 1].ToString()).ToString("yyyyMMddhhmmss");
       }
       List<EntryItem> edits = new List<EntryItem>(pcTable.noFields);
       ScaffoldForm form = scaffoldForm = new ScaffoldForm(this, how, edits);
       int comboWidth = form.ClientSize.Width - 132;
       int editWidth = comboWidth - 18;
       // The next 3 lines are indicative of why properties are at best second class.
       Size size = form.MinimumSize;
       size.Height = pcTable.noFields * 24 + 66;
       form.MinimumSize = size;
       Dictionary<int, ComboBox> combos = new Dictionary<int, ComboBox>();
       for (field = 0; field < pcTable.noFields; field++)
       {
     EntryItem edit = new EntryItem();
     edits.Add(edit);
     TPCField pcField = pcFields[field + offset];
     edit.ofType = pcField.type;
     edit.isNull = pcField.isNull == 1;
     if (how != EHow.ADD && (how == EHow.DELETE || how == EHow.DISPLAY || isKey(pcTable, field))
     || (how == EHow.ADD && pcField.type == DBHandler.PC_SEQUENCE))
       edit.isReadOnly = true;
     if (pcField.uppercase == 1 || isKey(pcTable, field) == true)
       edit.uppercase = true;
     Label label = edit.label = new Label();
     label.Text = pcField.name;
     label.Top = field * 24 + 4;
     label.Left = 4;
     form.CapturePanel.Controls.Add(label);
     if (showSetup.Checked == true)
       LogDebug = label.Text + " " + label.Top + " " + label.Left;
     string setupWork = pcField.name;
     string value = "";
     if (how == EHow.ADD || (how == EHow.CHANGE && isKey(pcTable, field) == false))
     {
       value = row != -1 ? data.Rows[row][field].ToString() : "";
       if (clearAdd.Checked == true && how == EHow.ADD) value = "";
       int link;  int pair;
       if (setupLink(pcTable, field, out link, out pair))
       {
     setupWork += " Is Link Field";
     if (sizeIsOk(link) == true)
     {
       setupWork += " and is not too large";
       if (pair == 0)
       {
         newDropDown(edit, pcTable.index, link, field * 24 + 4, 124, comboWidth, value);
         combos.Add(link, edit.combo);
         edit.pair = pair;
         form.CapturePanel.Controls.Add(edit.combo);
         if (showSetup.Checked == true)
           LogDebug = setupWork;
       }
       else
       {
         setupWork += " is extra link pair field";
         edit.isReadOnly = true;
         edit.combo = combos[link];
         edit.pair = pair;
         edit.combo.SelectedIndexChanged += new EventHandler(editComboSelectedIndexChanged);
         edit.Text(field * 24 + 4, 124, editWidth, maxLength(pcField), value);
         List<EntryItem> list = (List<EntryItem>)edit.combo.Tag;
         list.Add(edit);
         form.CapturePanel.Controls.Add(edit.text);
       }
       continue;
     }
       }
       else if (pcField.noEnums > 0)
       {
     setupWork += " Is Enum Field";
     enumDropDown(edit, field + offset, field * 24 + 4, 124, comboWidth, value);
     form.CapturePanel.Controls.Add(edit.combo);
     if (showSetup.Checked == true)
       LogDebug = setupWork;
     continue;
       }
     }
     value = row != -1 ? data.Rows[row][field].ToString() : "";
     if (clearAdd.Checked == true && how == EHow.ADD) value = "";
     switch (pcField.type)
     {
       case DBHandler.PC_CHAR:
       case DBHandler.PC_USERSTAMP:
     {
       setupWork += " Is Text Field";
       edit.Text(field * 24 + 4, 124, editWidth, maxLength(pcField), value);
       form.CapturePanel.Controls.Add(edit.text);
     }
     break;
       case DBHandler.PC_DATE:
     {
       setupWork += " Is Date Field";
       edit.Date(field * 24 + 4, 124, comboWidth, value);
       form.CapturePanel.Controls.Add(edit.date);
     }
     break;
       case DBHandler.PC_DATETIME:
       case DBHandler.PC_TIMESTAMP:
     {
       setupWork += " Is Date Time Field";
       edit.Date(field * 24 + 4, 124, comboWidth * 8 / 14, value);
       form.CapturePanel.Controls.Add(edit.date);
       edit.Time(field * 24 + 4, 124 + edit.date.Width + 4, comboWidth * 6 / 14 - 4, value);
       form.CapturePanel.Controls.Add(edit.time);
     }
     break;
       case DBHandler.PC_TIME:
     {
       setupWork += " Is Time Field";
       edit.Time(field * 24 + 4, 124, comboWidth, value);
       form.CapturePanel.Controls.Add(edit.time);
     }
     break;
       case DBHandler.PC_BOOLEAN:
     {
       setupWork += " Is Boolean";
       edit.Combo(field * 24 + 4, 124, comboWidth, value);
       form.CapturePanel.Controls.Add(edit.combo);
     }
     break;
       case DBHandler.PC_BYTE:
     {
       setupWork += " Is Byte";
       edit.Text(field * 24 + 4, 124, editWidth, maxLength(pcField), value);
       form.CapturePanel.Controls.Add(edit.text);
     }
     break;
       case DBHandler.PC_SHORT:
     {
       setupWork += " Is Short";
       edit.Text(field * 24 + 4, 124, editWidth, maxLength(pcField), value);
       form.CapturePanel.Controls.Add(edit.text);
     }
     break;
       case DBHandler.PC_DOUBLE:
     {
       edit.Text(field * 24 + 4, 124, editWidth, maxLength(pcField), value);
       form.CapturePanel.Controls.Add(edit.text);
     }
     break;
       case DBHandler.PC_SEQUENCE:
       case DBHandler.PC_INT:
     {
       edit.Text(field * 24 + 4, 124, editWidth, maxLength(pcField), value);
       form.CapturePanel.Controls.Add(edit.text);
     }
     break;
       case DBHandler.PC_LONG:
     {
       edit.Text(field * 24 + 4, 124, editWidth, maxLength(pcField), value);
       form.CapturePanel.Controls.Add(edit.text);
     }
     break;
     }
     if (showSetup.Checked == true)
       LogDebug = setupWork;
       }
       switch (how)
       {
     case EHow.ADD:
       form.Text = "Add Record for " + pcTable.name;
       form.isAdd = true;
       form.isChange = false;
       form.isDelete = false;
       form.isDisplay = false;
       break;
     case EHow.CHANGE:
       form.Text = "Change Record on " + pcTable.name;
       form.isAdd = false;
       form.isChange = true;
       form.isDelete = false;
       form.isDisplay = false;
       break;
     case EHow.DELETE:
       form.Text = "Delete Record in " + pcTable.name;
       form.isAdd = false;
       form.isChange = false;
       form.isDelete = true;
       form.isDisplay = false;
       break;
     case EHow.DISPLAY:
       form.Text = "Display Record of " + pcTable.name;
       form.isAdd = false;
       form.isChange = false;
       form.isDelete = false;
       form.isDisplay = true;
       break;
       }
       DialogResult rc = form.ShowDialog();
       if (rc != DialogResult.OK || how == EHow.DISPLAY)
     return;
       List<string> cells = new List<string>(pcTable.noFields);
       for (field = 0; field < pcTable.noFields; field++)
     cells.Add(edits[field].Value);
       connect.BeginTransaction();
       try
       {
     DBHandler db = new DBHandler(connect);
     string sysdate = DateTime.Now.ToString("yyyyMMddhhmmss");
     switch (how)
     {
       case EHow.ADD:
     newUsId = userName;
     newTmStamp = sysdate;
     query = "INSERT INTO " + pcTable.name;
     query += " VALUES ";
     c = "( ";
     for (field = 0; field < pcTable.noFields; field++)
     {
       query += c + sqlReady(pcFields[offset + field], cells[field], true, pcTable.name);
       c = ", ";
     }
     query += ", '" + userName + "', Sysdate)";
     break;
       case EHow.CHANGE:
     newUsId = userName;
     newTmStamp = sysdate;
     query = "UPDATE " + pcTable.name;
     query += " SET ";
     c = "";
     for (field = 0; field < pcTable.noFields; field++)
     {
       if (isKey(pcTable, field) == true)
         continue;
       query += c + pcFields[offset + field].name + " = "
                  + sqlReady(pcFields[offset + field], cells[field]);
       c = ", ";
     }
     query += ", " + db.UsId + " = '" + userName + "', " + db.TmStamp + " = Sysdate";
     query += " " + where;
     break;
       case EHow.DELETE:
     query = "DELETE FROM " + pcTable.name;
     query += " " + where;
     break;
     }
     using (AutoCursor.DatabaseCall)
     {
       try
       {
     if (showSQL.Checked == true)
       LogDebug = query;
     db.Execute(query);
     if (BinTables.HasValidation() == true)
     {
       if (validateAuditPython(pcTable, how, edits, oldUsId, newUsId, oldTmStamp, newTmStamp) == false)
       {
         connect.FlagRollback();
         return;
       }
       showTableGrid();
     }
       }
       catch (Exception ex)
       {
     connect.FlagRollback();
     showException(ex);
       }
     }
       }
       finally
       {
     connect.EndTransaction();
       }
 }
예제 #3
0
 private void fromSelectedClick(object sender, EventArgs e)
 {
     using (AutoCursor.DatabaseCall)
       {
     connect.BeginTransaction();
     try
     {
       lastErrorStripLabel.Text = "";
       int fromCol = relationFromCol == 0 ? relationFromCol : relationToCol;
       int toCol = relationToCol == 0 ? relationFromCol : relationToCol;
       int noFromCols = relationFromCol == 0 ? relationNoFromCols : relationNoToCols;
       int noToCols = relationToCol == 0 ? relationNoFromCols : relationNoToCols;
       int offsetFields = pcRelation.offsetFields;
       string fromValue = relationFromValue;
       string[] toValues = new string[selectedRelationList.SelectedIndices.Count];
       int i = 0;
       foreach (int index in selectedRelationList.SelectedIndices)
     toValues[i++] = selectedRelationList.Items[index].ToString();
       foreach (string toValue in toValues)
       {
     string[] fromList = relationFromCol == 0 ? fromValue.Split(('|')) : toValue.Split(('|'));
     string[] toList = relationToCol == 0 ? fromValue.Split(('|')) : toValue.Split(('|'));
     string fieldNames = "[";
     string values = "[";
     string comma = "";
     string command = "DELETE FROM " + pcRelation.name;
     string conj = " WHERE ";
     for (int c = 0; c < noFromCols; c++)
     {
       fieldNames += comma + "'" + pcFields[c + offsetFields + fromCol].name + "'";
       values += comma + "'" + fromList[c] + "'";
       comma = ", ";
       command += conj + pcFields[c + offsetFields + fromCol].name + " = '" + fromList[c] + "'";
       conj = " AND ";
     }
     for (int c = 0; c < noToCols; c++)
     {
       fieldNames += comma + "'" + pcFields[c + offsetFields + toCol].name + "'";
       values += comma + "'" + fromList[c] + "'";
       command += conj + pcFields[c + offsetFields + toCol].name + " = '" + toList[c] + "'";
       conj = " AND ";
     }
     fieldNames += "]";
     values += "]";
     DBHandler db = new DBHandler(connect);
     db.Execute(command);
     if (BinTables.HasValidation() == true)
     {
       if (validatePython(pcRelation, EHow.DELETE, fieldNames, values) == false)
       {
         connect.FlagRollback();
         return;
       }
     }
       }
       listOfRelationsDoubleClick(sender, e);
       Refresh();
       if (relationFromCol == 0)
       {
     leftRelationCombo.SelectedIndex = leftRelationCombo.Items.IndexOf(fromValue);
     leftRelationComboChange(sender, e);
       }
       else
       {
     rightRelationCombo.SelectedIndex = rightRelationCombo.Items.IndexOf(fromValue);
     rightRelationComboChange(sender, e);
       }
     }
     catch (Exception ex)
     {
       showException(ex);
       connect.FlagRollback();
     }
     finally
     {
       connect.EndTransaction();
     }
       }
 }
예제 #4
0
 private void lookupChange(object sender, EventArgs e)
 {
     using (AutoCursor.DatabaseCall)
       {
     try
     {
       lastErrorStripLabel.Text = "";
       DBHandler db = new DBHandler(connect);
       setDB(db, pcTable.name);
       db.Lookup = "";
       string C = " WHERE ";
       string MR = "5000";
       if (maxRowsEdit.Value > 0)
     MR = maxRowsEdit.Value.ToString();
       db.Lookup += C + "RowNum <= " + MR;
       C = "AND ";
       string value = likeEdit.Text.Trim();
       if (value.Length > 0)
       {
     int o = pcTable.offsetFields;
     int k = pcTable.offsetKeyFields;
     int f = pcKeyFields[k].index + o;
     value = value.Replace("'", "''");
     int p = value.IndexOf('%');
     if (p == 0) p = value.IndexOf('_');
     db.Lookup += string.Format("{0} {1} {2} '{3}'", C, pcFields[f].name, p == 0 ? "=" : "LIKE", value);
       }
       dbLookupLabel.Text = registry["Lookup", pcTable.name] = db.Lookup;
       db.GetTable(pcTable.name,
     pcFields, pcTable.offsetFields, pcTable.noFields,
     pcOrderFields, pcTable.offsetOrderFields, pcTable.noOrderFields);
       db.Grid = tablesDataGrid;
     }
     catch (Exception ex)
     {
       showException(ex);
     }
       }
 }
예제 #5
0
 private void valueComboChange(object sender, EventArgs e)
 {
     using (AutoCursor.DatabaseCall)
       {
     try
     {
       registry["Value", pcTable.name] = valueCombo.Text;
       DBHandler db = new DBHandler(connect);
       setDB(db, pcTable.name);
       db.Lookup = "";
       string C = " WHERE ";
       string MR = "5000";
       if (maxRowsEdit.Value > 0)
     MR = maxRowsEdit.Value.ToString();
       db.Lookup += C + "RowNum <= " + MR;
       C = "AND ";
       string value = valueCombo.Text.Trim();
       value = value.Replace("'", "''");
       int p = value.IndexOf('%');
       if (p == 0) p = value.IndexOf('_');
       if (value.Length > 0)
     db.Lookup += string.Format("{0} {1} {2} '{3}'", C, lookupCombo.Text, p == 0 ? "=" : "LIKE", value);
       db.GetTable(pcTable.name,
     pcFields, pcTable.offsetFields, pcTable.noFields,
     pcOrderFields, pcTable.offsetOrderFields, pcTable.noOrderFields);
       db.Grid = tablesDataGrid;
     }
     catch (Exception ex)
     {
       showException(ex);
     }
       }
 }
예제 #6
0
 private void valueComboDropDown(object sender, EventArgs e)
 {
     using (AutoCursor.DatabaseCall)
       {
     try
     {
       lastErrorStripLabel.Text = "";
       if (valueCombo.Items.Count > 0) return;
       int field;
       int noFields = pcTable.noFields;
       int offsetFields = pcTable.offsetFields;
       for (field = 0; field < noFields; field++)
     if (lookupCombo.Text.CompareTo(pcFields[field + offsetFields].name) == 0)
       break;
       if (field > noFields) return;
       DBHandler db = new DBHandler(connect);
       db.GetDistinctList(pcTable.name, pcFields[field + offsetFields]);
       db.PopulateCombo(valueCombo);
     }
     catch (Exception ex)
     {
       showException(ex);
     }
       }
 }
예제 #7
0
 public static void SQLAction(string code)
 {
     if (connect == null) return;
       DBHandler db = new DBHandler(connect);
       db.Execute(code);
 }
예제 #8
0
 public static string SQLQuery(string code)
 {
     if (connect == null) return "";
       DBHandler db = new DBHandler(connect);
       return db.Query(code);
 }
예제 #9
0
 private bool sizeIsOk(int link)
 {
     using (AutoCursor.DatabaseCall)
       {
     try
     {
       DBHandler db = new DBHandler(connect);
       int tno = pcLinks[link].tableNo;
       string name = pcTables[tno].name;
       int size = db.GetCount(name);
       return size < int.Parse(maxDropdownEdit.Text);
     }
     catch (Exception ex)
     {
       showException(ex);
       return false;
     }
       }
 }
예제 #10
0
 private void showTableGrid()
 {
     using (AutoCursor.DatabaseCall)
       {
     try
     {
       lastErrorStripLabel.Text = "";
       maxRowsEdit.Value = Registry.IntOf(registry["MaxRows", pcTable.name, "0"]);
       allowUpdates = pcTable.viewOnly == 0;
       setUpdateActions();
       DBHandler db = new DBHandler(connect);
       setDB(db, pcTable.name);
       db.GetTable(pcTable.name,
     pcFields, pcTable.offsetFields, pcTable.noFields,
     pcOrderFields, pcTable.offsetOrderFields, pcTable.noOrderFields);
       tablesDataGrid.Columns.Clear();
       db.Grid = tablesDataGrid;
       clearAdd.Checked = registry["ClearAdd", pcTable.name, "False"] == "True" ? true : false;
       if (pcTable.noOrderFields > 1)
       {
     lookupCombo.Visible = true;
     lookupLabel.Visible = true;
     valueCombo.Visible = true;
     valueLabel.Visible = true;
     doValueButton.Visible = true;
     likeLabel.Visible = false;
     likeEdit.Visible = false;
     doButton.Visible = false;
     lookupCombo.Items.Clear();
     valueCombo.Items.Clear();
     int o = pcTable.offsetFields;
     for (int j = 0; j < pcTable.noOrderFields; j++)
     {
       int k = j + pcTable.offsetOrderFields;
       int f = pcOrderFields[k].index + o;
       lookupCombo.Items.Add(pcFields[f].name);
     }
     lookupCombo.Text = registry["LookupKey", pcTable.name, ""];
     valueCombo.Text = registry["LookupValue", pcTable.name, ""];
       }
       else
       {
     lookupCombo.Visible = false;
     lookupLabel.Visible = false;
     valueCombo.Visible = false;
     valueLabel.Visible = false;
     doValueButton.Visible = false;
     likeLabel.Visible = true;
     likeEdit.Visible = true;
     doButton.Visible = true;
     likeEdit.Text = registry["Like", pcTable.name, ""];
       }
     }
     catch (Exception ex)
     {
       showException(ex);
     }
       }
 }
예제 #11
0
 private void showRelationsGrid()
 {
     using (AutoCursor.DatabaseCall)
       {
     try
     {
       lastErrorStripLabel.Text = "";
       DBHandler db = new DBHandler(connect);
       int offsetFields = pcRelation.offsetFields;
       int noFields = pcRelation.noFromFields + pcRelation.noToFields;
       db.GetTable(pcRelation.name,
     pcFields, offsetFields, noFields,
     pcOrderFields, 0, 0);
       db.Grid = relationDataGrid;
       populateCombo(leftRelationCombo, pcRelation.fromTable);
       leftTableLabel.Text = pcTables[pcRelation.fromTable].name;
       populateCombo(rightRelationCombo, pcRelation.toTable);
       rightTableLabel.Text = pcTables[pcRelation.toTable].name;
       availableRelationList.Items.Clear();
       selectedRelationList.Items.Clear();
     }
     catch (Exception ex)
     {
       showException(ex);
     }
       }
 }
예제 #12
0
 private void setDB(DBHandler db, string tableName)
 {
     dbLookupLabel.Text = db.Lookup = registry["Lookup", tableName, ""];
       db.UsId = registry["UsId", tableName, "UsId"];
       db.TmStamp = registry["TmStamp", tableName, "TmStamp"];
 }
예제 #13
0
 private void populateCombo(ComboBox combo, int tableIndex)
 {
     using (AutoCursor.DatabaseCall)
       {
     try
     {
       TPCTable pcTable = pcTables[tableIndex];
       lastErrorStripLabel.Text = "";
       DBHandler db = new DBHandler(connect);
       setDB(db, pcTable.name);
       db.Lookup = "";
       db.GetTable(pcTable.name,
     pcFields, pcTable.offsetFields, pcTable.noFields,
     pcOrderFields, pcTable.offsetOrderFields, pcTable.noOrderFields);
       db.PopulateCombo(combo, pcKeyFields, pcTable.offsetKeyFields, pcTable.noKeyFields);
     }
     catch (Exception ex)
     {
       showException(ex);
     }
       }
 }