private void button1_Click(object sender, EventArgs e) { if (MessageBox.Show("Данные будут записаны в БД! Продолжить?", "Предупреждение", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK) { foreach (ProgramReadDB.InitValue list in InitValuesLists1[comboBox1.SelectedIndex].InitValuesList) { string SQL = "Update ISACARDS set INITIALVALUE = '" + textBox1.Text + "' where CARDSID =" + list.ObjID; ProgramConnect connect = new ProgramConnect(); connect.WriteToBase(SQL, BaseAddr); } MessageBox.Show("Данные записаны"); } }
public void FullKlName() { string SQL_KLASS = "Select * from KLASSIFIKATOR"; ProgramConnect connect = new ProgramConnect(); connect.ConnectToBase(SQL_KLASS, BaseAddr); foreach (TeconObject obj in TeconObjects) { string KlassPath = obj.KLASSIFIKATORNAME; int TmpID = 0; string st = ""; for (int i = 0; i < connect.dt1.Rows.Count; i++) { st = connect.dt1.Rows[i][2].ToString(); // выбираем НАЗВАНИЕ if (st == obj.KLASSIFIKATORNAME) { TmpID = Convert.ToInt16(connect.dt1.Rows[i][1]); /*выбираем PID*/ break; } } while (TmpID != 0) { for (int i = 0; i < connect.dt1.Rows.Count; i++) { if ((Convert.ToInt16(connect.dt1.Rows[i][0]) == TmpID)) { TmpID = Convert.ToInt16(connect.dt1.Rows[i][1]); if (TmpID == 0) { break; } KlassPath = Convert.ToString(connect.dt1.Rows[i][2]) + @"\" + KlassPath; break; } } } obj.KLASSIFIKATORNAME = KlassPath; } }
public void AddInitValue(int ID) { string SQL = "Select ISACARDS.MARKA, ISACARDS.INITIALVALUE from ISACARDS where ISACARDS.CARDSID = " + ID; ProgramConnect connect = new ProgramConnect(); connect.ConnectToBase(SQL, BaseAddr); var obj = new InitValue() { Marka = connect.dt1.Rows[0][0].ToString(), InitialValue = connect.dt1.Rows[0][1].ToString(), ObjID = ID.ToString() }; SQL = "Select OBJTYPE.NAME from CARDS, OBJTYPE where CARDS.ID = " + ID + " and CARDS.OBJTYPEID = OBJTYPE.ID"; connect.ConnectToBase(SQL, BaseAddr); obj.ObjType = connect.dt1.Rows[0][0].ToString(); InitValues.Add(obj); }
public void FindTypes() { ObjTypeIDUnic.Clear(); ObjTypeCh.Clear(); // для повторной активации функции ObjTypeChannelsList.Clear(); ObjTypeIDUnic = ObjTypeID.Distinct().ToList(); //убираем повторяющиеся типы объектов foreach (int id in ObjTypeIDUnic) { SQL_OBJTYPES = "Select OBJTYPEPARAM.NAME from OBJTYPEPARAM where OBJTYPEPARAM.PID = " + id; ProgramConnect connect = new ProgramConnect(); connect.ConnectToBase(SQL_OBJTYPES, BaseAddr); for (int i = 0; i < connect.dt1.Rows.Count; i++) { ObjTypeChannelsList.Add(connect.dt1.Rows[i][0].ToString()); } var ObjTypeCh1 = new ObjTypeChannels() { TypeID = id, Channels = ObjTypeChannelsList.ToList(), Index = 0, // 0 - значит индекс еще не заполнен }; ObjTypeCh.Add(ObjTypeCh1); //заполняем список с каналами типа объекта } // выявление одинаковых каналов у типов и присваивание им индексов int k = 1; for (int i = 0; i <= ObjTypeCh.Count - 1; i++) { for (int j = 0; j <= ObjTypeCh.Count - 1; j++) { if ((ObjTypeCh[i].Channels.SequenceEqual(ObjTypeCh[j].Channels)) && (i != j)) { if (ObjTypeCh[i].Index != 0) { ObjTypeCh[j].Index = ObjTypeCh[i].Index; } else { ObjTypeCh[i].Index = k; ObjTypeCh[j].Index = ObjTypeCh[i].Index; k++; } } } } // Присваиваем оставшимся уникальным типам (нулевые индексы) индексы больше, чем у неуникальных for (int i = 0; i <= ObjTypeCh.Count - 1; i++) { if (ObjTypeCh[i].Index == 0) { ObjTypeCh[i].Index = k; k++; } } // Присваиваем индексы каждому объекту, согласно его типу for (int i = 0; i <= TeconObjects.Count - 1; i++) { for (int j = 0; j <= ObjTypeCh.Count - 1; j++) { if (TeconObjects[i].ObjTypeID == ObjTypeCh[j].TypeID) { TeconObjects[i].Index = ObjTypeCh[j].Index; break; } else if (j == ObjTypeCh.Count) { MessageBox.Show("Для объекта: " + TeconObjects[i].Name + "; не найден тип!"); } } } TablesNum = k - 1; //присваиваем количество таблиц }
public List <string> ObjTypeChannelsMatched = new List <string>(); //список каналов типа объекта public void Big_SQL(List <int> ObjID) //ОНО СРАБОТАЕТ ТАК? //Запрос всех каналов { // Делаем часть строки с ID для запроса Каналов string Ch = ""; bool firstIter = true; for (int i = 0; i < ObjID.Count; i++) // объединили все id в один запрос { if (firstIter) { Ch = Ch + " (CARDPARAMS.CARDID = " + ObjID[i].ToString() + " and OBJTYPEPARAM.ID = CARDPARAMS.OBJTYPEPARAMID) "; firstIter = false; } // запросы проверены, таким образом мы не получим бесконечного цикла в ответе и ID каналов подменятся на имена else { Ch = Ch + " or (CARDPARAMS.CARDID = " + ObjID[i].ToString() + " and OBJTYPEPARAM.ID = CARDPARAMS.OBJTYPEPARAMID) "; } } //1. Запрос параметров каналов SQL_CARDPARAMS = "Select CARDPARAMS.S0, CARDPARAMS.S100, CARDPARAMS.M, CARDPARAMS.PLC_VARNAME, CARDPARAMS.ED_IZM, CARDPARAMS.ARH_APP, CARDPARAMS.DISC, CARDPARAMS.KA, CARDPARAMS.KB, CARDPARAMS.OBJTYPEPARAMID, OBJTYPEPARAM.NAME, CARDPARAMS.CARDID from CARDPARAMS, OBJTYPEPARAM where " + Ch; ProgramConnect connect = new ProgramConnect(); connect.ConnectToBase(SQL_CARDPARAMS, BaseAddr); TmpDG = connect.dt1; for (int i = 0; i < TmpDG.Rows.Count; i++) { var objChnl = new SQL_TeconObjectChannel() { S0 = TmpDG.Rows[i][0].ToString(), S100 = TmpDG.Rows[i][1].ToString(), M = TmpDG.Rows[i][2].ToString(), PLC_VARNAME = TmpDG.Rows[i][3].ToString(), ED_IZM = TmpDG.Rows[i][4].ToString(), ARH_APP = TmpDG.Rows[i][5].ToString(), DISC = TmpDG.Rows[i][6].ToString(), KA = TmpDG.Rows[i][7].ToString(), KB = TmpDG.Rows[i][8].ToString(), ID = TmpDG.Rows[i][9].ToString(), //OBJPARAMID ChannelName = TmpDG.Rows[i][10].ToString(), LoadID = Convert.ToInt32(TmpDG.Rows[i][11]), //ID исходный }; //connect.ConnectToBase("Select OBJTYPEPARAM.NAME from OBJTYPEPARAM where OBJTYPEPARAM.ID = " + objChnl.ID, BaseAddr); //objChnl.ChannelName = connect.dt1.Rows[0][0].ToString(); SQL_Channels.Add(objChnl); } TmpDG.Clear(); //2. Запрос деф параметров каналов //На удивление, имеем аналогичную часть запроса как и в предыдущем шаге, поэтому ничего менять в ней не будем. SQL_CARDPARAMS = "select OBJTYPEPARAM.disc, OBJTYPEPARAM.isev, OBJTYPEPARAM.NAME, cardparams.cardid, OBJTYPEPARAM.id from OBJTYPEPARAM, cardparams where " + Ch; ProgramConnect connect1 = new ProgramConnect(); // не до экспериментов, создал новую переменную, можно проверить потом, прокатит с той же или нет connect1.ConnectToBase(SQL_CARDPARAMS, BaseAddr); TmpDG = connect1.dt1; for (int i = 0; i < TmpDG.Rows.Count; i++) { var DefobjChnl = new SQL_TeconObjectChannel() { S0 = "0", S100 = "100", M = "1", PLC_VARNAME = "", ED_IZM = "", ARH_APP = TmpDG.Rows[i][1].ToString(), DISC = TmpDG.Rows[i][0].ToString(), KA = "1", KB = "0", ID = TmpDG.Rows[i][4].ToString(), //OBJPARAMID ChannelName = TmpDG.Rows[i][2].ToString(), LoadID = Convert.ToInt32(TmpDG.Rows[i][3]), //ID исходный }; //connect.ConnectToBase("Select OBJTYPEPARAM.NAME from OBJTYPEPARAM where OBJTYPEPARAM.ID = " + objChnl.ID, BaseAddr); //objChnl.ChannelName = connect.dt1.Rows[0][0].ToString(); SQL_DefChannels.Add(DefobjChnl); } TmpDG.Clear(); //3. Запрос параметров тех объекта Ch = ""; firstIter = true; for (int i = 0; i < ObjID.Count; i++) // объединили все id в один запрос { if (firstIter) { Ch = Ch + " (CARDS.ID = " + ObjID[i].ToString() + " and CARDS.OBJTYPEID = OBJTYPE.ID and CARDS.EVKLID = EVKLASSIFIKATOR.ID and CARDS.TEMPLATEID = ISAOBJ.ID and CARDS.KLID = KLASSIFIKATOR.ID) "; firstIter = false; } // запросы проверены, таким образом мы не получим бесконечного цикла в ответе и ID каналов подменятся на имена else { Ch = Ch + " or (CARDS.ID = " + ObjID[i].ToString() + " and CARDS.OBJTYPEID = OBJTYPE.ID and CARDS.EVKLID = EVKLASSIFIKATOR.ID and CARDS.TEMPLATEID = ISAOBJ.ID and CARDS.KLID = KLASSIFIKATOR.ID) "; } } SQL_CARDS = "Select CARDS.MARKA, CARDS.NAME, CARDS.DISC, OBJTYPE.NAME, CARDS.ARH_PER, CARDS.OBJSIGN, CARDS.PLC_ID, CARDS.PLC_GR, EVKLASSIFIKATOR.NAME, CARDS.KKS, ISAOBJ.NAME, KLASSIFIKATOR.NAME, CARDS.PLC_VARNAME, CARDS.PLC_ADRESS, CARDS.OBJTYPEID, CARDS.ID from CARDS, OBJTYPE, KLASSIFIKATOR, EVKLASSIFIKATOR, ISAOBJ where " + Ch; //, RESOURCES ProgramConnect connect2 = new ProgramConnect(); // не до экспериментов, создал новую переменную, можно проверить потом, прокатит с той же или нет connect2.ConnectToBase(SQL_CARDS, BaseAddr); TmpDG = connect2.dt1; //---------------------------Заполняем параметры объекта--------------------------------------------------------------- for (int i = 0; i < TmpDG.Rows.Count; i++) { var obj = new SQL_TeconObject() { Marka = TmpDG.Rows[i][0].ToString(), Name = TmpDG.Rows[i][1].ToString(), Disc = TmpDG.Rows[i][2].ToString(), ObjTypeName = TmpDG.Rows[i][3].ToString(), Arc_Per = TmpDG.Rows[i][4].ToString(), ObjSign = TmpDG.Rows[i][5].ToString(), PLC_Name = TmpDG.Rows[i][6].ToString(), PLC_GR = TmpDG.Rows[i][7].ToString(), EVKLASSIFIKATORNAME = TmpDG.Rows[i][8].ToString(), KKS = TmpDG.Rows[i][9].ToString(), POUNAME = TmpDG.Rows[i][10].ToString(), KLASSIFIKATORNAME = TmpDG.Rows[i][11].ToString(), PLC_varname = TmpDG.Rows[i][12].ToString(), PLC_address = TmpDG.Rows[i][13].ToString(), ObjTypeID = Convert.ToInt16(TmpDG.Rows[i][14]), LoadID = Convert.ToInt16(TmpDG.Rows[i][15]) }; //MessageBox.Show(i.ToString()); SQL_Objects.Add(obj); } TmpDG.Clear(); //4. Запрос одного параметра с названием ПЛК(ОТДЕЛЬНО ПОДУМОЙ!) //ПОКА БЕЗ ЭТОГО ПРОБУЕМ, ПОТОМ ПРИКРУТИМ }