Mundarija:

Ma'lumotlar bazasi EAL-Industri4.0-RFID: 10 qadam (rasmlar bilan)
Ma'lumotlar bazasi EAL-Industri4.0-RFID: 10 qadam (rasmlar bilan)

Video: Ma'lumotlar bazasi EAL-Industri4.0-RFID: 10 qadam (rasmlar bilan)

Video: Ma'lumotlar bazasi EAL-Industri4.0-RFID: 10 qadam (rasmlar bilan)
Video: Ma'lumotlar va ma'lumotlar bazasi nima? 2024, Iyul
Anonim
EAL-Industri4.0-RFID ma'lumotlar bazasi ma'lumotlar bazasi
EAL-Industri4.0-RFID ma'lumotlar bazasi ma'lumotlar bazasi

Shaxsiy ma'lumotlar ro'yxatga olinmoqda, ro'yxatga olinmoqda. MySQL ma'lumotlar bazasi va RFID ma'lumotlarini kechiktirish. tugunli-RED, Windows operatsion tizimidagi ilovalar va C# dasturlari bilan bir xilda ishlaydi. Qishloq xo'jaliklari:

Videoko'rsatuvlar ishlab chiqaruvchi tomonidan 200 grammdan oshadi. Ma'lumotni identifikatsiyalash uchun RFID yorlig'i va plastik identifikatori mavjud bo'lsa, identifikator identifikatori (UID = yagona identifikator, 32 bitli kod, 8 ta o'n oltilik belgi) identifikatsiya qilish uchun kerak bo'ladi. Shuni esda tutish kerakki, har bir narsa bir vaqtning o'zida, bir vaqtning o'zida, har birida aniqlanadi. leverpostejer til én specifik kunde. Qimmatli qog'ozlar:

1. Irma. Umumiy ma'lumotlarga ko'ra, +/- 5%gacha, kamida 190 g va maksimal 210 g.

2. Bryugsen. Brugsens-ning eng yuqori ko'rsatkichi +/- 10%, kamida 180 g va maksimal 220 g.

3. Aldi. Aldis chegirma +/- 15%gacha, kamida 170 g va maksimal 230 g.

Ertalabki savollar:

0 oralig'i: diapazondan tashqarida

1 -diapazon: minimal 190 g/maksimal 210 g

2 -diapazon: minimal 180 g/maksimal 220 g

3 -diapazon: minimal 170 g/maksimal 230 g

1 -qadam: UIDda ro'yxatdan o'tish uchun Af ma'lumotlarni yig'ish

VID Samtni UIDda ro'yxatdan o'tkazish uchun Af ma'lumotlarini opsamling
VID Samtni UIDda ro'yxatdan o'tkazish uchun Af ma'lumotlarini opsamling

RFID teglari va RFID-RC522 o'quvchi/yozuvchi uchun RFID teglarini ro'yxatdan o'tkazish uchun ma'lumotlarni yig'ish kerak. Ma'lumotlar taqqoslaganda, siz Arduino -ga o'xshash analog va ma'lumotlarni to'plashingiz mumkin.

Maqolani oching:

1 stk potmetr 25k liniyali. Yder-benene er tilsluttet hhv. GND og +5V, o'rta masofani bosib o'tuvchi AN0

RFID-RC522 Arduino kartalari SPI portlari uchun mo'ljallangan:

SDA -> pin 53

SCK -> pin52

MOSI -> pin 51

MISO-> pin50

IRQ -> NC

GND -> GND

RST -> pin5

3.3V -> 3.3V

Ma'lumotlar hhv uchun. Ma'lumotlar bazasi va ma'lumotlar panelida ma'lumotlar uzatish tugmachalari-qizil tugmacha-tugunni ajratib turadigan portlar mavjud.

2-qadam: Arduino dasturi

Men Arduino dasturini SPI.h va MFRC522.h bibliotekerlar ro'yxatiga kiritdim, chunki u RFID -ni o'chirib qo'ydi. Men o'zgarmaydigan dasturni boshladim. MFRC522 -dagi derazalar. Men o'rnatish blokken boshlang'ich versiyalari, SPI porten va MFRC522. Derefter RFID teglarini skanerlaydi. Ikke uchun sende det samme UID afsted flere gange efter hinanden, er der lavet en stump kode som tjekker for dette. UID yorlig'i yuklanmagan bo'lsa, uID -ni yuklaydi. Ma'lumotlar to'plami har bir narsani eslab qolganda, uUID -ni o'chirib qo'yishi mumkin. OldUID -ni eslay olmasligingiz kerak, lekin bu UID -ni bilmasligingiz kerak. Bu erda UID va UID portlari mavjud bo'lib, ular sizning portingiz orqali ulanadi. Hamma narsa 150-250 gacha bo'lishi mumkin. Ma'lumotlarni yuborish so'mni ajratib turadi. OldUID = nyUID -ni o'chirib qo'yish, RFID yorlig'i va boshqa ma'lumotlarni o'chirish uchun mo'ljallangan.. Ikki qatorli dasturlar funktsiyalarini bajaradi. Qayta tiklanadigan funktsiyalar haqiqatdan ham, noto'g'ri ma'lumotlardan ham farq qiladi.

#qo'shing

#include // Ushbu dastur RFID kartalarini RDIF-RC522 o'quvchi/yozuvchi taxtasi yordamida tekshiradi. // UID o'qiladi, analog pin o'qiladi. Analog qiymati 0-1023 150-250 gacha o'lchanadi. // UID va analog qiymati ketma-ket portda vergul bilan ajratilgan matn sifatida yuboriladi, 9600, N, 8, 1. bir xil UIDni qayta yuborishdan oldin mavjud. // Bu funksiya kodda massivlarni taqqoslash orqali amalga oshiriladi: oldUID nyUID array_cmp (oldUID , nyUID )

constexpr uint8_t RST_PIN = 5;

constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int qiymati = 0; String StringValue = "0000"; bayt oldUID [4] = {}; bayt nyUID [4] = {};

MFRC522 mfrc522 (SS_PIN, RST_PIN); // MFRC522 misolini yarating.

bo'sh o'rnatish ()

{Serial.begin (9600); // SPI.begin () ketma -ket aloqasini ishga tushirish; // SPI avtobusini ishga tushiring mfrc522. PCD_Init (); // MFRC522 -ni ishga tushiring

bo'sh halqa ()

{// Yangi kartalarni qidiring, agar (! Mfrc522. PICC_IsNewCardPresent ()) {return; } // Kartalardan birini tanlang, agar (! Mfrc522. PICC_ReadCardSerial ()) {return; } // nyUID -ni UID yorlig'i bilan yuklash (bayt i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // if oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// UID tegini ketma -ket portga yuborish (bayt i = 0; i 1000) {Value = 1000; } Qiymat = (Qiymat / 10) + 150; // Serial.print (Value) o'lchovli analog qiymatini yuborish; // yangi qatorni yuborish Serial.println (); // oldUID = nyUID ni belgilang (bayt z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // kuting 1 soniya kechikish (1000); }

// 2 qatorni solishtiring …

boolean array_cmp (bayt a , bayt b ) {bool test = rost; // har bir element bir xil bo'lishini tekshiring. agar bittasi bo'lmasa, (bayt n = 0; n <4; n ++) {if (a [n]! = b [n]) test = noto'g'ri; // agar bayt teng bo'lmasa, test = false} if (test == rost) rost qaytadi; aks holda noto'g'ri qaytaring; }

3-qadam: Node-RED, Lagring Af Data I ma'lumotlar bazasi

Node-RED, Lagring Af Data I ma'lumotlar bazasi
Node-RED, Lagring Af Data I ma'lumotlar bazasi
Node-RED, Lagring Af Data I ma'lumotlar bazasi
Node-RED, Lagring Af Data I ma'lumotlar bazasi

Tarmoqli tugun-RED oqimi:

MAQOMOTI 4dan boshlab, Arduino taxtasida ma'lumotlarni uzatishning barcha usullari mavjud. "Ajratish va qiymatni olish" funktsiyalari "UIDni ajratish va o'chirish" funktsiyasini bajaradi va UIDni qaytaradi. Boshqaruv panelida va jadvalda jadvallar va o'lchovlar aniqlanganda. UID birdaniga bir qatorda. Test_sound advokatlari "diapazondan tashqarida" so'zlarini ishlatadilar, ular 170 g dan oshmaydi va 230 g dan oshmaydi, dvs va diapazon 0 ga teng.

Ajratish va qiymatni olish:

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

temp = {yuk yuki: (chiqish [1])}; qaytish harorati;

Ajratish va UID olish:

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

temp = {yuk: yuk [0]}; qaytish harorati;

test_sound:

var number = parseInt (msg.payload);

if (son> 230 || raqami <170) {newMsg = {yuk: "Qatordan tashqarida"}; newMsg -ni qaytarish; } boshqa {newMsg = {yuk: ""}; newMsg -ni qaytarish; }

Bo'limni ajratish funktsiyalari "," va vaqt tamg'asi, UID va ma'lumotlar bazasi patedb.patelog.

var chiqish = msg.payload.split (","); // xabarlarni to'lash orqali vergul bilan massivga bo'lish

UIDTag = chiqish [0]; // birinchi qism birinchi o'ringa [0] ValueTag = chiqish [1]; // ikkinchi qism ikkinchi holatga [1]

var m = {

mavzu: "INSERT INTO patedb.patelog (vaqt tamg'asi, UID, vazn) VALUES ('"+yangi sana (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; qaytish m;

MySQL -ning ma'lumotlar bazasi har qanday parametr uchun javob beradi:

Xost: localhost

Port: 3306

Foydalanuvchi: root

Ma'lumotlar bazasi: patedb

4-qadam: ma'lumotlar bazasini loyihalash

Ma'lumotlar bazasi dizayni
Ma'lumotlar bazasi dizayni

Ma'lumotlar bazasi 4 ta sotuvchi

Ma'lumotlar to'plami, qizil tili va C# tugmachasi ma'lumotlari.

C# dasturidan foydalanib, buyurtma beriladigan ma'lumotlarning umumiy miqdori, buyurtma ma'lumotlari.

customertable er va kunderegister

rang -barang jadvallar bir vaqtning o'zida siz C# dasturini tanlashingiz mumkin.

5 -qadam: Patelog

Patelog
Patelog

Tableten patelog 6 kishidan iborat:

pateID (int) boshlang'ich kalit va avtomatik kalit.

Vaqt tamg'asi, UID va yozish varchar (med forskellig max længde)

intervalli yo'q (C# dasturlari bo'yicha)

orderID yozish int (C# dasturining buyurtma identifikatori)

Tugunli-RED tugmachalari va diapazonlariNR va buyurtma identifikatori. rangeNr og orderID ishlov beruvchini NULL rejimida, men C# dasturini o'chirib tashlayman va dasturni diapazonini o'chirish uchun buyurtma beraman.

6 -qadam: bajarilishi mumkin

Qabul qilish mumkin
Qabul qilish mumkin

tartibga soluvchi 5 ta kolonner:

buyurtma identifikatori (int) juda aniq

orderQuant (o'rta darajali) - bu sizning buyurtmangiz

ishlab chiqaruvchi tomonidan ishlab chiqarilgan (ishlab chiqarilgan) o'rtacha narx. (C# dasturidagi muammolar)

izoh (tintekst) er en eventuel kommentar til ordren.

mijoz identifikatori (int) sizning buyurtmangizni bajarishga yordam beradi.

7 -qadam: buyurtma berish mumkin

Moslashuvchan
Moslashuvchan

Customertable indeholder 6 kolonner:

customerID (int) birlamchi kalit og auto inc.

ism, manzil, telefon, elektron pochta (varchar) med forskellig max længde

qatorNr (int)

8 -qadam: o'zgaruvchan

Rangetable
Rangetable

3 ta kolonner:

rangeNr (int) boshlang'ich kalit va avtomatik kalit.

intervalli min (int)

rangeMax (int)

9 -qadam: C# dasturi

C# dasturi
C# dasturi

Ishlab chiqaruvchilar ishlab chiqaruvchi va ishlab chiqaruvchilar tomonidan ishlab chiqilgan:

Kundenummer, ordinummer, ordinantal va C# dasturlaridagi ma'lumotlarni sinab ko'rsating (dasturni ishga tushirish uchun raqamli dasturlarni ishga tushiring. Ishlab chiqarish tugmachalarini ishga tushiring va ishga tushiring). pd va transport) UHD-ni tugma-RED-da, boshqaruv panelida va boshqalarda ma'lumotlarni uzatish vaqtini belgilaydi, vaqt belgisini, UID-ni o'chirib tashlaydi. tildspunkt ikke tilskrives diapazonni NR va buyurtma ID ni o'chirib yuborish kerak.

Vaqt va vaqt oralig'ida C# dasturlari plybb.patelogtabellen uchun NULL va diapazonli dasturlar uchun mo'ljallangan. Bu erda NULL tugmachalari aniqlanmagan bo'lsa ham, ular sizning buyurtmangizni bajarishga yordam beradi. Ishlab chiqaruvchiga hech qanday ma'lumot yo'q, "to'xtatish" tugmachasini bosing. Yo'q. Ma'lumotlar, ma'lumotlar bazasi va boshqa ma'lumotlar saqlansa, ular DataGridview -ni yangilash va o'chirish uchun mo'ljallangan. buyurtma berilishi mumkin bo'lgan har bir kishi uchun individual buyurtma mavjud.

System. Collections. Generic yordamida; System. ComponentModel -dan foydalanish; System. Data -dan foydalanish; System. Drawing -dan foydalanish; System. Linq -dan foydalanish; System. Text -dan foydalanish; System. Threading. Tasks -dan foydalanish; System. Windows. Forms -dan foydalanish; MySql. Data. MySqlClient -dan foydalanish;

ma'lumotlar maydoni show_data_from_database

{umumiy qismli sinf Form1: Form {MySqlConnection ulanishi = yangi MySqlConnection ("ma'lumotlar manbasi = localhost; foydalanuvchi nomi = ildiz; parol = ''")); int RowNumber = 0; // pateID qiymatini saqlash uchun o'zgaruvchi int RangeNumber = 0; // Raqamli int vaznini saqlash uchun o'zgaruvchi = 0; // Og'irlikni saqlash uchun o'zgaruvchi int OrderNr = 0; // OrderNR int QuantProduced saqlash uchun o'zgaruvchi = 0; // Ishlab chiqarilgan miqdorni saqlash uchun o'zgaruvchi int NumberOfRows = 0; // null bo'lgan qatorlar soni.. bool ProdRunning = false; // Ishga tushirish va to'xtatish tugmalarining faollashtirilganligini ko'rsatuvchi o'zgaruvchi int limits = new int [6]; // int CustomerID qatorini ishga tushirish; // CustomID umumiy formasini saqlash uchun o'zgaruvchi1 () {InitializeComponent (); load_table (); // qo'ng'iroq load_table}

void load_table ()

{MySqlCommand buyrug'i = yangi MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", ulanish); harakat qilib ko'ring {MySqlDataAdapter adapteri = yangi MySqlDataAdapter (); adapter. SelectCommand = buyrug'i; DataTable dbdataset = yangi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = yangi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

shaxsiy bo'shliq SetRowOrder ()

{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Ma'lumotlar ma'lumotlari GridView1. Columns ["vaqt tamg'asi"] ni o'z ichiga oladi. DisplayIndex = 1; // Ma'lumotlar ma'lumotlari GridView1. Columns ["UID"]. In DisplayIndex = 2; // Ma'lumotlar yig'indisining ma'lumotlari GridView1. Columns ["vazn"]. DisplayIndex = 3; // Ma'lumotlar ma'lumotlari GridView1. Columns ["rangeNr"]. // Ma'lumotlar ma'lumotlari GridView1. Columns ["orderID"]. In DisplayIndex = 5; // Uning kolonnerlari endres}

shaxsiy bo'shliq GetData_Click (ob'ektni jo'natuvchi, EventArgs e) // Ma'lumotlar bazasi jadvalini va vaqt tamg'asi bo'yicha buyurtmalarni o'qiydi

{yuk_table (); }

shaxsiy bo'shliq btnRefreshUID_Click (ob'ekt yuboruvchi, EventArgs e) //

{string timeStr = "SELECT * FROM patedb.patelog ORDER BY UID;"; MySqlCommand buyrug'i = yangi MySqlCommand (timeStr, ulanish); harakat qilib ko'ring {MySqlDataAdapter adapteri = yangi MySqlDataAdapter (); adapter. SelectCommand = buyrug'i; DataTable dbdataset = yangi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = yangi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

shaxsiy bo'shliq btnRefreshValue_Click (ob'ekt yuboruvchi, EventArgs e)

{string weightSort = "SELECT * FROM patedb.patelog ORTINI BOSHQARISH BILAN (Og'irligi BUNDAYGA QO'LLANILGAN);"; MySqlCommand buyrug'i = yangi MySqlCommand (weightSort, ulanish); harakat qilib ko'ring {MySqlDataAdapter adapteri = yangi MySqlDataAdapter (); adapter. SelectCommand = buyrug'i; DataTable dbdataset = yangi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = yangi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

shaxsiy bo'shliq ChkNullBtn_Click (ob'ekt yuboruvchi, EventArgs e)

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

shaxsiy bo'shliq CheckTableForNull ()

{// Vaqt oralig'ini tekshirish/o'rnatish kamida 100 ms int i; int. TryParse (textTimer1. Text, i tashqarida); if (i <100) {taymer1. Stop (); i = 100; taymer 1. Interval = i; MessageBox. Show ("Minimal qiymat i 100mS"); taymer 1. Boshlash (); } boshqa {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Jadvalda null bo'lgan qatorlar mavjudligini tekshiring, o'zgarmaydigan qatorlar sonini qaytaradi: NumberOfRows string weightStr = ""; string chkNull = "PATEID LIMIT 1 BILAN NNL NULL ORDN QAYTGAN patedb.patelog FROM SAYTINI (*) SELECT;"; MySqlCommand buyrug'i = yangi MySqlCommand (chkNull, ulanish); {connection. Open () ni sinab ko'ring; NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); ulanish. Close (); } catch (Exception ex) {MessageBox. Show (ex. Message); } nihoyat {if (NumberOfRows! = 0) {try {// rangeNr NULL string bo'lgan eng past pateID raqamini tanlaydi readID = "SEAT pateID FROM patedb.patelog WHERE rangeNR IS NULL ORDER BY pateID ASC LIMIT 1;"; MySqlCommand cmdID = yangi MySqlCommand (readID, ulanish); {ulanish. Open (); RowNumber = (int) cmdID. ExecuteScalar (); // butun son !! ulanish. Close (); } listPateID. Text = RowNumber. ToString (); // tanlangan PateID raqamini o'qish // Tanlangan qator sonidan og'irlikni tanlaydi = RowNumber. ToString (); string readweight = "Og'irlikni FROM dan tanlang patedb.patelog WHERE pateID =" + qator; MySqlCommand cmdweight = yangi MySqlCommand (o'qish og'irligi, ulanish); {ulanish. Open (); weightStr = (string) cmdweight. ExecuteScalar (); // String !! ulanish. Close (); } vazn = int. Parse (weightStr); // int txtWeight. Text = weight. ToString () ga aylantirish; // print int RangeNumber = 0; if (vazn> = chegaralar [0] && vazn = chegaralar [2] && vazn = chegaralar [4] && vazn <= chegaralar [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } catch (Exception ex) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} shaxsiy bo'shliq btnStart_Click (ob'ekt yuboruvchi, EventArgs e) {if (ProdRunning == false) {int valtest; harakat qilib ko'ring {CustomerID = int. Parse (txtCustomerNr. Text); // read customerID} catch {MessageBox. Show ("Ishlab chiqarish ma'lumotlarini kiriting va" boshlash "tugmasini bosing."); }

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

MySqlCommand cmdtestcustomer = yangi MySqlCommand (test, ulanish); {ulanish. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // mijozda aloqa bo'lmasa, 0 qaytaradi. Close (); } if (valtest == 1) // agar mijoz ma'lumotlar bazasida bo'lsa - ishlab chiqarishni boshlang {try {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = rost; taymer 1. Boshlash (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Exception ex) {MessageBox. Show ("Ishlab chiqarish ma'lumotlarini kiriting va" boshlash "tugmasini bosing."); }} else MessageBox. Show ("Xaridor ma'lumotlar bazasida emas, qaytadan urinib ko'ring"); } // ReadLimits (); }

shaxsiy bo'shliq ReadLimits ()

{// Cheklovlarni o'qish mumkin, 1 dan 3 gacha int counter = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = yangi MySqlCommand (readmin, ulanish); {ulanish. Open (); chegaralar [taymer] = (int) cmdmin. ExecuteScalar (); hisoblagich = hisoblagich + 1; ulanish. Close (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = yangi MySqlCommand (readmax, ulanish); {ulanish. Open (); chegaralar [taymer] = (int) cmdmax. ExecuteScalar (); hisoblagich = hisoblagich + 1; ulanish. Close (); }} // loop uchun oxiri}

shaxsiy bo'shliq UpdateLog ()

{// UPDATE rangeNR & orderID qatori Range = RangeNumber. ToString (); string Buyurtma = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+RowNumber; MySqlCommand updatecmd = yangi MySqlCommand (yangilanish, ulanish); {connection. Open () ni sinab ko'ring; updatecmd. ExecuteNonQuery (); ulanish. Close (); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

btnStop_Click xususiy void (ob'ekt yuboruvchi, EventArgs e)

{if (ProdRunning == true) {timer1. Stop (); ProdRunning = noto'g'ri; UpdateOrderTable (); } else {MessageBox. Show ("Hali ishlab chiqarish boshlanmadi. Ma'lumotlarni kiriting va" ishga tushirish "tugmasini bosing)); }}

shaxsiy bo'shliq 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 = yangi MySqlCommand (qo'shish, ulanish); {connection. Open () ni sinab ko'ring; insertcmd. ExecuteNonQuery (); ulanish. Close (); QuantProduced = 0; } catch (Exception ex) {MessageBox. Show (ex. Message); }}

private void timer1_Tick (ob'ekt yuboruvchi, EventArgs e)

{CheckTableForNull (); load_table (); }

btnShowOrderTable_Click xususiy void (ob'ekt yuboruvchi, EventArgs e)

{if (ProdRunning == false) {MySqlCommand buyrug'i = yangi MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", ulanish); harakat qilib ko'ring {MySqlDataAdapter adapteri = yangi MySqlDataAdapter (); adapter. SelectCommand = buyrug'i; DataTable dbdataset = yangi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = yangi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Buyurtma jadvali uchun to'xtatish tugmasini bosing"); }}

btnShowOrderDetails_Click xususiy void (ob'ekt yuboruvchi, 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 Qaerda? patedb.patelog. UID = '" + txtShowOrderDetails. Text +"' "); MySqlCommand buyrug'i = yangi MySqlCommand (test, ulanish); {connection. Open () ni sinab ko'ring; MySqlDataAdapter adapteri = yangi MySqlDataAdapter (); adapter. SelectCommand = buyrug'i; DataTable dbdataset = yangi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = yangi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); } ulanish. Close (); } else {MessageBox. Show ("Buyurtma tafsilotlarini ko'rish uchun to'xtatish tugmasini bosing"); }}

btnShowCustomerDetails_Click xususiy void (ob'ekt yuboruvchi, 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 buyrug'i = yangi MySqlCommand (test, ulanish); harakat qilib ko'ring {MySqlDataAdapter adapteri = yangi MySqlDataAdapter (); adapter. SelectCommand = buyrug'i; DataTable dbdataset = yangi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = yangi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Xaridor haqida ma'lumot olish uchun to'xtatish tugmasini bosing"); }}}

}

Tavsiya: