Мазмуну:

EAL-Industri4.0-RFID Dataopsamling Til Database: 10 Steps (Сүрөттөр менен)
EAL-Industri4.0-RFID Dataopsamling Til Database: 10 Steps (Сүрөттөр менен)

Video: EAL-Industri4.0-RFID Dataopsamling Til Database: 10 Steps (Сүрөттөр менен)

Video: EAL-Industri4.0-RFID Dataopsamling Til Database: 10 Steps (Сүрөттөр менен)
Video: Industry 4.0 Internet of Things, Technology Evolution & Big Data. How Technology Changes Our Lives 2024, Июль
Anonim
EAL-Industri4.0-RFID Dataopsamling Til Database
EAL-Industri4.0-RFID Dataopsamling Til Database

Долбоорду ишке ашыруу үчүн, каттоодон өтүңүз. RFID, MySQL маалымат базасы боюнча маалыматтын артында. түйүн-КЫЗЫЛ, ал эми Windows формадагы тиркемедеги C# программасынын жардамы менен берилиштерди сактоо. Vi Forestiller төмөнкүдөй:

Vi har en produktionslinje сом өндүрүүчү leverpostej и 200г фолиебаккер. Бардык стандарттар RFID тегдерин жана пластикалык карталарды өчүрүү үчүн, идентификаторлордун идентификаторлору (UID = Unique Identifier, 32 бит код, 8 он алтылык белгилер) идентификациялоо үчүн. Добуш берүүдөн баш тарткыла, буларды карап көргүлөчү (өчүрүүчү), ошондой эле ар кандай өзгөчөлүктөрдү аныктоо үчүн UID тегетин жазгыла. leverpostejer til én specifik kunde. Күндүн суперкөзөмөлү:

1. Ирма. +/- 5%дан кем эмес, эң аз дегенде 190г жана эң көп 210г.

2. Брюгсен. Brugsens leverpostej skal holde sig inden +/- 10%, эң аз дегенде 180г жана 220г.

3. Алди. Алдын ала эсептөөлөр +/- 15%га чейин арзандатуу менен, эң аз дегенде 170г жана 230г.

Суроо берүүчү:

0 диапазону: диапазондо жок

1 диапазону: минимум 190г/максимум 210г

2 диапазону: минималдуу 180г/максимум220г

3 диапазону: минималдуу 170г/максимум230г

1 -кадам: Африкалык маалыматтарды UPSке каттоодон өткөрүү үчүн

UPS менен каттоодон өтүү үчүн Af маалыматтар
UPS менен каттоодон өтүү үчүн Af маалыматтар

RFID тэгдерин каттоодон өткөрүп, RFID-RC522 окурманы/жазуучусу үчүн маалыматтарды каттап койсоңуз болот. Дагы бир нерсе жок болсо, анда сиз аналогдук маалыматка окшош маалыматтарды чогултууңуз керек.

Тапшырмаларды аткарыңыз:

1 стк potmeter 25k lineært. Yder-benene er tilsluttet hhv. GND og +5V, орточо тилке AN0

RFID-RC522 Arduino панелдеринин SPI портуна киргизилген:

SDA -> пин 53

SCK -> pin52

MOSI -> pin51

MISO-> pin50

IRQ -> NC

GND -> GND

RST -> pin5

3.3V -> 3.3V

Hhv үчүн маалыматтар, opsamlede. UID жана веб-портко киргизилгенден кийин, бул маалымат түйүнүнүн кызыл тилкеси-бул маалымат базасы жана маалымат тактасындагы маалымат тактасы.

2-кадам: Arduino программасы

Мен Arduino программасын SPI.h жана MFRC522.h библиотекасына кошуу үчүн RFIDдин тизмесин киргизем. Мен өзгөрмөлөрдү программалык камсыздоону баштайм. Der laves en instans af MFRC522. I Setup blokken initialiseres denielle forbindelse, SPI porten og MFRC522. Derefter RFID тегдерин сканерлейт. Уикипедиянын маалыматы боюнча, бул UIDде эң чоң жоготуу болуп саналат. Сканер жана UID теги жок, UID жүктөлөт жана UID жүктөлөт. Эски тилкелердин эски жыштыктары UUD үчүн эң ыңгайлуу порт болуп саналат. Эски NUID'дин мурунку тарыхы, бул жерде UID теги жана UID'et жокко эсе. Бул жерде UID, бул UID'et портунун бардык порттары менен байланышкан, бул жерде сиз порттун портуна кире аласыз. Аналогдор 150-250 чейин. Берилиштер суммаларды комментарийлөөдө. OldUID = nyUID, коддору жана коддору RFID тегдерине жазылгыла.. Дисциплинанын функциясы мен программаланган функцияларынын 2 массиви. Funktionen returnerer true hvis arrayüne er ens, og false false hvis array'e er forskellige.

#кошуу

#include // Бул программа RDIF-RC522 окурман/жазуучу тактасын колдонуу менен RFID карталарын сканерлейт. // UID окулат, аналогдук пин окулат. 0-1023 аналогдук мааниси 150-250гө чейин масштабдуу. // UID жана аналогдук маани 9600, N, 8, 1 аркылуу сериялык портко үтүр менен бөлүнгөн текст катары жөнөтүлөт. ошол эле UID кайра жөнөтүлө электе. // Бул функция массивдерди салыштыруу аркылуу кодго киргизилет: oldUID nyUID array_cmp (oldUID , nyUID )

constexpr uint8_t RST_PIN = 5;

constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int Value = 0; StringValue = "0000"; байт oldUID [4] = {}; байт nyUID [4] = {};

MFRC522 mfrc522 (SS_PIN, RST_PIN); // MFRC522 экземплярын түзүү.

жараксыз орнотуу ()

{Serial.begin (9600); // Сериялык байланышты баштоо SPI.begin (); // SPI автобусун баштоо mfrc522. PCD_Init (); // MFRC522 баштоо}

боштук цикл ()

{// Эгерде жаңы карталарды издеңиз (! Mfrc522. PICC_IsNewCardPresent ()) {return; } // Карталардын бирин тандаңыз, эгерде (! Mfrc522. PICC_ReadCardSerial ()) {return; } // nyUIDти UID теги менен жүктөө (байт i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // if oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// UID тегин сериялык портко жөнөтүү (байт i = 0; i 1000) {Value = 1000; } Мааниси = (Мааниси / 10) + 150; // масштабдуу аналогдук маанини жөнөтүү Serial.print (Value); // newline Serial.println () жөнөтүү; // oldUID = nyUID үчүн (байт z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // күтүү 1 сек. кечигүү (1000); }

// 2 массивди салыштыруу…

логикалык array_cmp (байт a , байт b ) {bool test = true; // ар бир элементтин бирдей болушун текшериңиз. эгерде бирөө жок болсо, false үчүн (false n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // эгерде байт бирдей эмес болсо, test = false} if (test == true) true; башка жалган кайтаруу; }

3-кадам: Node-RED, Lagring Af Data I маалымат базасы

Node-RED, Lagring Af Data I маалымат базасы
Node-RED, Lagring Af Data I маалымат базасы
Node-RED, Lagring Af Data I маалымат базасы
Node-RED, Lagring Af Data I маалымат базасы

Følgende flow er lavet i node-RED:

COM4 маалыматы Arduino панелинде берилиштерди модернизациялоону токтотот. "Бөлүү жана Баалоо" функциялары "UPL жана Get UID" сплиттери текстти кайтаруу жана кайра кайтаруу жана UID. Тапшырмалар тактасында жана графикте жана масштабда эң чоң көрсөткүч. UID фреймвизирлейт. Funktionen test_sound advarer verbalt med "Sugteningen", "170g" ден төмөн, 230g ашуун, dvs i 0 диапазону.

Бөлүү жана баалуулукту алуу:

var output = msg.payload.split (',');

temp = {пайдалуу жүк: (чыгаруу [1])}; кайтарым темп;

Бөлүү жана UID алуу:

var output = msg.payload.split (",");

temp = {payload: output [0]}; кайтарым темп;

test_sound:

var number = parseInt (msg.payload);

if (number> 230 || number <170) {newMsg = {payload: "Out of range"}; newMsg кайтаруу; } else {newMsg = {payload: ""}; newMsg кайтаруу; }

Бөлүнгөн сап "," жана убакыт белгиси, UID жана маалымат базасы patedb.patelog.

var output = msg.payload.split (","); // msg.payloadды үтүр менен массивге бөлүү

UIDTag = чыгаруу [0]; // биринчи бөлүк биринчи позицияга [0] ValueTag = чыгаруу [1]; // экинчи бөлүк экинчи позицияга [1]

var m = {

тема: "INSERT INTO patedb.patelog (убакыт белгиси, UID, салмагы) VALUES ('"+new Date (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; кайтуу м;

MySQL маалымат базасы төмөнкү параметрлерди камтыйт:

Алып баруучу: localhost

Порт: 3306

Колдонуучу: root

Маалыматтар базасы: patedb

4-кадам: Маалыматтар базасын түзүү

Маалыматтар базасынын дизайны
Маалыматтар базасынын дизайны

Databasen patedb indeholder 4 tabeller

patelog er dataopsamlingstabellen, tilskrives data af node-RED og C# programmet

C# программасы боюнча дайындар, таблицанын маалыматтары

customertable er et kunderegister

rangetable er en tabel som indeholder grænseværdierne for de i C# programmet benyttede диапазондору.

5 -кадам: Пателог

Patelog
Patelog

Табулатура индекси 6 колдонуучудан турат:

pateID (int) автоматтык негизги ачкыч.

Убакыт белгиси, UID & жазууну өчүрүү (med forskellig max længde)

диапазон жок

orderID кат жазуу int (C# программасынын буйругу ID)

Түйүн-КЫЗЫЛ тилкенин чоңдугу менен катарNN жана orderID. rangeNr og orderID иштетүүчү NULL режиминде, мен C# программасын иштеп чыгууну сунуштайм.

6 -кадам: Ордотабелдүү

Ordertable
Ordertable

ordertable indeholder 5 kolonner:

orderID (int) эң маанилүү буйрук

orderQuant (mediumint) er ordens pålydende antal

QuantProduced (mediumint) продюсерлердин арендага алуу мүмкүнчүлүгү. (C# программасы боюнча суроолор)

комментарий (tinytext) er en eventuel kommentar til ordren.

customerID (int) эң маанилүү болуп саналат.

7 -кадам: Customertable

Ыңгайлаштырылуучу
Ыңгайлаштырылуучу

customertable indeholder 6 kolonner:

customerID (int) er key key og auto inc.

аты, дареги, телефону, электрондук почтасы (varchar) med forskellig max længde

диапазонNr (int)

8 -кадам: Rangetable

Rangetable
Rangetable

3 колонер:

rangeNr (int) er key key og auto inc.

rangeMin (int)

rangeMax (int)

9 -кадам: C# программасы

C# программасы
C# программасы

Негизги продюсерлер төмөнкү эрежелерди аткарышат:

Кундер, буйруктар, буйруктар жана сунуштар C# программасы боюнча сыналгы (программалар менен иштөө. Бул өндүрүштүн башталышын камсыз кылуу үчүн башталат). på et transportbånd) UID жана VID коддору түйүн-КЫЗЫЛга чейин берилиштерди, панелдин маалымат панелинде жана башка маалымат панелдеринде көрсөтүлөт. tidspunkt ikke tilskrives диапазонуNR жана orderID вил де have værdien NULL.

Убакыт аралык интерфейс C# программасы plateb.patelogtabellen үчүн, NULL жана башка тармактар үчүн программаланган. NULL даректери жокко чыгарылганда, бир катар диапазондорNr жана башка тилкелерде тартипти орнотуу керек. Продукцияны өндүрүү үчүн, "токтотуу" керек болсо- токтотуу. Төмөнкү буйруктарды аткарсаңыз болот: катталган убакыттын өтүшү менен. Жөнөкөй маалымат жок болгондо, дайындар дагы, каталогдор да берилиштерди жаңыртууда DataGridview жаңыртууну талап кылат. заказ кылуу мүмкүнчүлүктөрү, жана жеке буйрутмалар UID'лердин жеке маалыматтары.

колдонуу System. Collections. Generic; System. ComponentModel колдонуу; System. Data колдонуу; System. Drawing колдонуу; System. Linq колдонуу; System. Text колдонуу; System. Threading. Tasks колдонуу; System. Windows. Forms колдонуу; MySql. Data. MySqlClient колдонуу;

аттар мейкиндиги show_data_from_database

{коомдук жарым -жартылай класс Form1: Форма {MySqlConnection байланыш = жаңы MySqlConnection ("маалымат булагы = localhost; колдонуучу аты = тамыр; пароль = ''"); int RowNumber = 0; // pateID маанисин сактоо үчүн өзгөрмө int RangeNumber = 0; // Rangenumber int салмагын сактоо үчүн өзгөрмө = 0; // Int OrderNr = 0 салмагын сактоо үчүн өзгөрмө; // OrderNR int QuantProduced сактоо үчүн өзгөрмө = 0; // өндүрүлгөн санды сактоо үчүн өзгөрмө int NumberOfRows = 0; // нөлдөр менен катар саны.. bool ProdRunning = false; // Баштоо жана токтотуу баскычтары иштетилгенин көрсөтүүчү өзгөрмө int limits = new int [6]; // int CustomerID массивин инициализациялоо; // customerID коомдук формасын сактоо үчүн өзгөрмө1 () {InitializeComponent (); load_table (); // чалуу load_table}

void load_table ()

{MySqlCommand буйругу = жаңы MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", байланыш); аракет {MySqlDataAdapter адаптер = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }}

жеке боштук SetRowOrder ()

{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Колдонуучулардын тизмеси dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Колдонуучунун дайындары dataGridView1. Columns ["UID"]. DisplayIndex = 2; // Колдонуучунун дайындары dataGridView1. Columns ["weight"]. DisplayIndex = 3; // Колдонуучулардын тизмеси dataGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // Ал каттар менен иштөөдө dataGridView1. Columns ["orderID"]. DisplayIndex = 5; // Her kan rækkefølgen in kolonner ændres}

жеке боштук GetData_Click (объект жөнөтүүчү, EventArgs e) // Убакыт белгиси боюнча маалымат базасынын таблицасын жана заказдарын окуйт

{load_table (); }

жеке боштук btnRefreshUID_Click (объект жөнөтүүчү, EventArgs e) //

{string timeStr = "SELECT * FROM patedb.patelog ORDER by UID;"; MySqlCommand буйругу = жаңы MySqlCommand (timeStr, байланыш); аракет {MySqlDataAdapter адаптер = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }}

жеке боштук btnRefreshValue_Click (объект жөнөтүүчү, EventArgs e)

{string weightSort = "SELECT * FROM patedb.patelog ORDER by CAST (салмагы КОЛ КОЮЛГАН КЕЗДЕ);"; MySqlCommand буйругу = жаңы MySqlCommand (weightSort, байланыш); аракет {MySqlDataAdapter адаптер = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }}

жеке боштук ChkNullBtn_Click (объект жөнөтүүчү, EventArgs e)

{if (ProdRunning) {CheckTableForNull (); load_table (); }}

жеке боштук CheckTableForNull ()

{// Таймер аралыкты текшерүү/коюу минималдуу 100 мс int i; int. TryParse (textTimer1. Text, i чыгып); if (i <100) {timer1. Stop (); i = 100; таймер1. Аралык = i; MessageBox. Show ("Минималдуу мааниси i 100mS"); таймер1. Start (); } else {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Таблицада нөлгө ээ болгон саптар бар экенин текшериңиз, өзгөрмөдөгү саптардын санын кайтарат: NumberOfRows string weightStr = ""; string chkNull = "COUNT (*) ТАНДОО patedb.patelog WHERE rangeNR NULL ЗАКАЗЫ pateID LIMIT 1 БОЛОТ;"; MySqlCommand буйругу = жаңы MySqlCommand (chkNull, туташуу); аракет {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); connection. Close (); } кармоо (Exception ex) {MessageBox. Show (ex. Message); } акыры {if (NumberOfRows! = 0) {try {// диапазондогу NULL сап болгон эң төмөнкү pateID номерин тандайт readID = "SEAT pateID FROM patedb.patelog WHERE rangeNR IS NULL ORDER BY pateID ASC LIMIT 1;"; MySqlCommand cmdID = жаңы MySqlCommand (readID, туташуу); {connection. Open (); RowNumber = (int) cmdID. ExecuteScalar (); // бүтүн сан !! connection. Close (); } listPateID. Text = RowNumber. ToString (); // тандалган PateID номерин окуу // Тандалган катардан сапты тандоо = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + катар; MySqlCommand cmdweight = жаңы MySqlCommand (окуу салмагы, байланыш); {connection. Open (); weightStr = (сап) cmdweight. ExecuteScalar (); // String !! connection. Close (); } салмагы = int. Parse (weightStr); // int txtWeight. Text = weight. ToString () ге айландыруу; // print int RangeNumber = 0; if (weight> = limits [0] && weight = limits [2] && weight = limits [4] && weight <= limits [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } кармоо (Exception ex) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} жеке боштук btnStart_Click (объект жөнөтүүчү, EventArgs e) {if (ProdRunning == false) {int valtest; аракет {CustomerID = int. Parse (txtCustomerNr. Text); // read customerID} кармоо {MessageBox. Show ("Өндүрүш маалыматтарын киргизип," баштоо "баскычын басыңыз."); }

string test = "SELECT COUNT (*) FROM patedb.customertable WHERE customerID ="+CustomerID;

MySqlCommand cmdtestcustomer = жаңы MySqlCommand (тест, туташуу); {connection. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // кардар байланыш жок болсо 0 кайтарат. Close (); } if (valtest == 1) // эгерде кардар базада бар болсо - өндүрүштү баштаңыз {try {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = true; таймер1. Start (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Exception ex) {MessageBox. Show ("Өндүрүш маалыматын киргизип," баштоо "баскычын басыңыз."); }} else MessageBox. Show ("Кардар базада жок, кайра аракет кыл"); } // ReadLimits (); }

жеке боштук ReadLimits ()

{// Чектөөлөрдү окуйт, 1ден 3кө чейин int counter = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = жаңы MySqlCommand (readmin, туташуу); {connection. Open (); чектер [counter] = (int) cmdmin. ExecuteScalar (); counter = counter + 1; connection. Close (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = жаңы MySqlCommand (readmax, туташуу); {connection. Open (); чектер [counter] = (int) cmdmax. ExecuteScalar (); counter = counter + 1; connection. Close (); }} // циклдин аягы}

жеке боштук UpdateLog ()

{// UPDATE rangeNR & orderID сабы Range = RangeNumber. ToString (); сап Order = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+RowNumber; MySqlCommand updatecmd = жаңы MySqlCommand (жаңыртуу, туташуу); аракет {connection. Open (); updatecmd. ExecuteNonQuery (); connection. Close (); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }}

жеке боштук btnStop_Click (объект жөнөтүүчү, EventArgs e)

{if (ProdRunning == true) {timer1. Stop (); ProdRunning = false; UpdateOrderTable (); } else {MessageBox. Show ("Азырынча өндүрүш баштала элек. Дайындарды киргизип," баштоо "баскычын басыңыз"); }}

жеке боштук UpdateOrderTable ()

{string insert = "INSERT INTO patedb.ordertable (orderID, orderQuant, quantProduced, comment, customerID) VALUES ('" + this.txtOrderNumber. Text + "', '" + this.txtOrderQuant. Text + "', '" + QuantProduced. ToString ()+"','"+this.txtComment. Text+"','"+this.txtCustomerNr. Text+"');"; MySqlCommand insertcmd = жаңы MySqlCommand (кыстаруу, туташуу); аракет {connection. Open (); insertcmd. ExecuteNonQuery (); connection. Close (); QuantProduced = 0; } кармоо (Exception ex) {MessageBox. Show (ex. Message); }}

private void timer1_Tick (объект жөнөтүүчү, EventArgs e)

{CheckTableForNull (); load_table (); }

жеке боштук btnShowOrderTable_Click (объект жөнөтүүчү, EventArgs e)

{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", байланыш); аракет {MySqlDataAdapter адаптер = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Stop to wie orderTable"); }}

жеке боштук btnShowOrderDetails_Click (объект жөнөтүүчү, EventArgs e)

{if (ProdRunning == false) {string test = ("SELECT patedb.ordertable.orderID, orderQuant, quantProduced, comment, customerID FROM patedb.ordertable INNER JOIN patedb.patelog ON patedb.patelog.orderID = patedb.ordertable.orderID WHERE patedb.patelog. UID = '" + txtShowOrderDetails. Text +"' "); MySqlCommand буйругу = жаңы MySqlCommand (тест, туташуу); аракет {connection. Open (); MySqlDataAdapter адаптери = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); } connection. Close (); } else {MessageBox. Show ("Заказдын чоо -жайын көрүү үчүн токтоону басыңыз"); }}

жеке боштук btnShowCustomerDetails_Click (объект жөнөтүүчү, EventArgs e)

{if (ProdRunning == false) {string test = ("SELECT patedb.customertable.customerID, name, address, phone, email, rangeNr FROM patedb.customertable INNER JOIN patedb.ordertable ON patedb.ordertable.customerID = patedb.customertable. customerID WHERE patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +"' "); MySqlCommand буйругу = жаңы MySqlCommand (тест, туташуу); аракет {MySqlDataAdapter адаптер = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Кардардын чоо -жайын билүү үчүн аялдаманы басыңыз"); }}}

}

Сунушталууда: