Mündəricat:

EAL-Industri4.0-RFID Dataopsamling Til Veritabanı: 10 Addım (Şəkillərlə)
EAL-Industri4.0-RFID Dataopsamling Til Veritabanı: 10 Addım (Şəkillərlə)

Video: EAL-Industri4.0-RFID Dataopsamling Til Veritabanı: 10 Addım (Şəkillərlə)

Video: EAL-Industri4.0-RFID Dataopsamling Til Veritabanı: 10 Addım (Şəkillərlə)
Video: GTU Research Week Workshop by Dr. S Nickolas : Data Mining & its Applications 2024, Iyul
Anonim
EAL-Industri4.0-RFID Dataopsamling Til Veritabanı
EAL-Industri4.0-RFID Dataopsamling Til Veritabanı

Şəxsi məlumatların qeydiyyatdan keçməsi, qeydiyyatdan keçmələri ilə bağlı bir layihə var. RFID, MySQL verilənlər bazası ilə əlaqəli məlumatları gecikdirir. node-QIRMIZI, Windows Məlumat Proqramı və C# proqramı ilə əlaqəli məlumatların işlənməsi. Meşə işçisi:

İstehsalçıya 200 qramlıq məhsullar istehsal olunur. Əlavə məlumatları əldə etmək üçün RFID etiketi və nömrələri, indeks və identifikator ID (UID = Unikal Identifier, 32 bitlik kod, 8 hexadecimale karakter) üçün e -poçtdan istifadə etmək daha asandır. Hər hansı bir məlumatı əldə etmək mümkün olmadıqda, hər kəs öz xüsusiyyətlərini və xüsusiyyətlərini nəzərə alır. spesifikasiyalara əlavə olunmalıdır. Ətraflı məlumat:

1. İrma. Ən çox +/- 5%, ən azı 190 qr və maksimum 210 qr.

2. Brugsen. Brugsens-in ən böyük dəyəri +/- 10%, ən az 180 qram və maksimum 220 qr.

3. Aldi. Aldis endirimləri +/- 15%, ən az 170 qr və maksimum 230 qr təşkil edir.

Ətraflı sorğular:

0 aralığı: sıra xaricində

Aralığı1: minimum 190g/maksimum210g

Aralığı2: minimum 180g/maksimum220g

Aralığı3: minimum 170g/maksimum230g

Addım 1: VUgt Samt Qeydiyyatında Af UID üçün Af Məlumatlarının Alınması

VID Samt Qeydiyyatı Af UID üçün Af Məlumatlarını Opsamling
VID Samt Qeydiyyatı Af UID üçün Af Məlumatlarını Opsamling

RFID etiketləri və RFID-RC522 oxucu/yazıçı üçün RFID etiketlərinin qeydiyyatı üçün bütün məlumatları toplamaq lazımdır. Hər hansı bir məlumat əldə etmək mümkün olmadıqda, Arduino üçün analoq və analitik məlumatları əldə edə bilərsiniz.

Fəaliyyət göstərin:

1 stk potmetr 25k line. Əlbəttə ki, hhv. GND və +5V, AN0 -un orta hissəsi

RFID-RC522, Arduino kartları üçün SPI portlarını təqdim edir:

SDA -> pin 53

SCK -> pin52

MOSI -> pin51

MISO-> pin50

IRQ -> NC

GND -> GND

RST -> pin5

3.3V -> 3.3V

Məlumat, hhv üçün. UID və ya məlumat bazasında məlumat panosunda məlumatların göstərilməsini təmin etmək üçün düymələri ayırmaq üçün düymələri ayırın.

Addım 2: Arduino proqramı

Mən Arduino proqramını SPI.h və MFRC522.h bibliotekerinə RFID -dən istifadə edərək daxil etdim. Proqramı dəyişəndən sonra işə salmağa başladım. Dərin lövhələr MFRC522 -də mövcuddur. Mən qurduqdan sonra, MFRC522 və SPI -ni işə sala bilərsiniz. Derefter RFID etiketlərini daha yaxşı tarar. UID -dən istifadə etmək üçün bir çox məlumat əldə etmək lazımdırsa, ən çox məlumat əldə edə bilərsiniz. Skaner və UID etiketi yoxlanılır, UID -in bütün məlumatları yüklənir. Hədiyyələr haqqında məlumatların köhnə məlumatların verilməsi ilə əlaqədar olaraq, UID istifadə edə bilərsiniz. OldUID və ya nUUd etiketləri, UID etiketləri və cahil insanlardır. UID və ya UID ilə əlaqəli bütün məlumatlar, UID -in ən böyük portu kimi xidmət göstərir. 150-250 aralığında oxşar məlumat əldə edə bilərsiniz. Verilənlər bir neçə aydan çoxdur. OldUID = nUUID, RFID etiketlərinin və şifrələrin açılması ilə bağlı bütün məlumatları əldə edə bilərsiniz.. Bu proqramlar 2 funksiyanı yerinə yetirir. Funktionen qayıtmaq üçün həqiqi məlumatların aranjımanı və yanlış məlumatların sıralanması lazımdır.

#daxil edin

#include // Bu proqram RDIF-RC522 oxucu/yazıçı lövhəsindən istifadə edərək RFID kartlarını tarar. // UID oxunur, analoq pin oxunur. Analog dəyər 0-1023 150-250-ə qədər ölçülür. // UID və analog dəyəri 9600, N, 8, 1 istifadə edərək seriyalı portda vergüllə ayrılmış mətn olaraq göndərilir. eyni UID yenidən göndərilməzdən əvvəl mövcuddur. // Bu funksiya, serialları müqayisə edərək kodda tətbiq olunur: oldUID nyUID array_cmp (oldUID , nyUID )

constexpr uint8_t RST_PIN = 5;

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

MFRC522 mfrc522 (SS_PIN, RST_PIN); // MFRC522 nümunəsi yaradın.

boş quraşdırma ()

{Serial.begin (9600); // SPI.begin () seriyalı ünsiyyətə başlayın; // SPI avtobusunu başlat mfrc522. PCD_Init (); // MFRC522 başlatın}

boşluq döngəsi ()

{// (! Mfrc522. PICC_IsNewCardPresent ()) {return; əgər yeni kartlar axtarın; } // Kartlardan birini seçin, əgər (! Mfrc522. PICC_ReadCardSerial ()) {return; } // nyUID -ni UID etiketi ilə yükləyin (bayt i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // if oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// (bayt i = 0; i 1000) üçün serial porta UID etiketi göndərin {Value = 1000; } Dəyər = (Dəyər / 10) + 150; // Serial.print (Qiymət) miqyaslı analoq dəyəri göndərin; // yeni xətt göndər Serial.println (); // oldUID = nyUID üçün (bayt z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // 1 saniyə gecikmə gözləyin (1000); }

// 2 massivi müqayisə edin …

boolean array_cmp (bayt a , bayt b ) {bool testi = doğru; // hər bir elementin eyni olmasını yoxlayın. yalnız biri deyilsə, (byte n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // bayt bərabər deyilsə, test = false} if (test == doğru) doğruya dönərsə; əks halda yalan; }

Addım 3: Node-RED, Lagring Af Data I Veritabanı

Node-RED, Lagring Af Data I Veritabanı
Node-RED, Lagring Af Data I Veritabanı
Node-RED, Lagring Af Data I Veritabanı
Node-RED, Lagring Af Data I Veritabanı

Node-QIRMIZI axın:

COM4, Arduino lövhəsi ilə əlaqəli bütün məlumatların dəyişdirilməsini təmin edir. "Bölün və Dəyər Alın" funksiyası və "Bölün və UID Alın" bölüşdürülməsi və geri qaytarılması və UID -in istifadəsi. İdarəetmə panelində və planşetinizdə hər hansı bir məlumat əldə edə bilərsiniz. UID ilə əlaqəli məlumatlar mövcuddur. Test_sound avareri "Aralığın xaricində", 230g -dən çox 170g -dən çox, dvs və 0 aralığında.

Bölün və dəyər alın:

var çıxış = msg.payload.split (',');

temp = {faydalı yük: (çıxış [1])}; qaytarılma temperaturu;

Bölün və UID əldə edin:

var çıxış = msg.payload.split (",");

temp = {yük: yük [0]}; qaytarılma temperaturu;

test_səsi:

var sayı = parseInt (msg.payload);

if (sayı> 230 || sayı <170) {newMsg = {faydalı yük: "Aralığın xaricində"}; newMsg qaytarın; } başqa {newMsg = {yük: ""}; newMsg qaytarın; }

Bölünmüş funksiyalar "," işarələri və zaman damgası, UID və verilənlər bazası patedb.patelogda.

var çıxış = msg.payload.split (","); // msg.payload vergüllə seriala bölün

UIDTag = çıxış [0]; // birinci hissə birinci mövqeyə [0] ValueTag = çıxış [1]; // ikinci hissə ikinci mövqeyə [1]

var m = {

mövzu: "INSERT INTO patedb.patelog (zaman damgası, UID, çəki) VALUES ('"+yeni Tarix (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; qayıt m;

MySQL verilənlər bazası ilə bağlı bütün məlumatları əldə edə bilərsiniz:

Ev sahibi: localhost

Liman: 3306

İstifadəçi: kök

Verilənlər bazası: patedb

Addım 4: Verilənlər bazasının dizaynı

Verilənlər bazası dizaynı
Verilənlər bazası dizaynı

Verilənlər bazası 4 nəfərə aiddir

node-QIRMIZI və C# proqramları ilə əlaqəli məlumatlar

c# proqramlaşdırma məlumatlarını sifariş etmək, məlumatların sıralanması, məlumatların təhlili

customertable er və kunderegister

menyu C# proqramlaşdırılmış proqramlar üçün nəzərdə tutulmuş proqramlar.

Addım 5: Patelog

Patelog
Patelog

Tabellen patelog 6 nəfərdən ibarətdir:

pateID (int) avtomatlaşdırılmış əsas açar.

Zaman damgası, UID & yazın varchar (med forskellig max længde)

aralığını yazın (C# proqramını öyrənin)

orderID yazın int (C# proqramının sifariş nömrəsi)

Node-QIRMIZI düymələr sıralanır və sıralanır. sıraNr və sifariş KIMLIĞINI NULL rejimində, C# proqramını müəyyən etmək üçün proqram nömrəsi və digərləri üçün sifariş verin.

Addım 6: Təyin edilə bilən

Təmin edilə bilən
Təmin edilə bilən

Sifarişçi 5 kolonner:

orderID (int) sifarişi yerinə yetirin

orderQuant (orta qiymət) əvvəlcədən sifariş verə bilərsiniz

QuantProduct (orta qiymət) istehsalçıları tərəfindən satın alınır. (C# proqramına aiddir)

şərh (kiçik mətn) yazmaq üçün hadisə ilə əlaqədar şərhlər yazın.

müştəri ID (int) hər hansı bir məlumat əldə edə bilərsiniz.

Addım 7: Xüsusi qəbul edilə bilən

Xüsusi qəbul edilə bilən
Xüsusi qəbul edilə bilən

customertable indeholder 6 kolonner:

customerID (int) birincil açar və avtomatik inc.

ad, ünvan, telefon, e -poçt (varchar) med forskellig max længde

sıraNr (int)

Addım 8: Rangetable

Rangetable
Rangetable

rangetable indeholder 3 kolonner:

rangeNr (int) əsas açar və avtomatik inc.

aralıkMin (int)

sıraMax (int)

Addım 9: C# Proqramı

C# proqramı
C# proqramı

İstehsalçıların hazırladıqları əməliyyatlar:

Gündəlik, yazılı, cari proqramlar, C# proqramının sınanması ilə əlaqədardır (bu proqramlar rəqəmsal sistemlərin işlənməsi üçün bir başlanğıcdır. Başlanğıcda heç bir problem yoxdur). pd et transportbånd), UID və ya düymələri QIRMIZI sistemə daxil olduqda, paneldəki məlumatların göstərildiyi və göstərildiyi zaman göstərilir, vaxt damgası, UID və digər sənədlər də daxil edilir. bir sıra hallarda, NULL və SİFARİŞLƏR üçün NULL yazın.

Nömrələr və zaman aralığında C# proqramının hazırlanması NULL və ya silsiləsi üçün nəzərdə tutulmuşdur. NULL məlumatların silinməməsi üçün məlumatların silinməməsi üçün bir sıra məlumatların sıralanması tələb olunur. İstehsalçıya heç bir şey verilmir və "dayan" düyməsini basın. Müvafiq qaydalar yoxlanılmadığı təqdirdə, hər hansı bir aktuallaşdırıla bilər. Məlumat əldə etmək mümkün olmadıqda, məlumatların təhlili və məlumatların toplanması, DataGridview -un yenilənməsi ilə əlaqədardır. Şəxsi sifarişlər və ya sənədlər UID istifadəçilər tərəfindən fərdi olaraq sifariş edilə bilər.

System. Collections. Generic istifadə edərək; System. ComponentModel istifadə edərək; System. Data istifadə edərək; System. Drawing istifadə edərək; System. Linq istifadə edərək; System. Text istifadə edərək; System. Threading. Tasks istifadə edərək; System. Windows. Forms istifadə edərək; MySql. Data. MySqlClient istifadə edərək;

ad sahəsi show_data_from_database

{ictimai qismən sinif Form1: Form {MySqlConnection bağlantısı = yeni MySqlConnection ("data source = localhost; istifadəçi adı = kök; parol = ''"); int RowNumber = 0; // pateID dəyərini saxlamaq üçün dəyişən int RangeNumber = 0; // int int weight = 0 rəqəmini saxlamaq üçün dəyişən; // Ağırlığın saxlanılması üçün dəyişən int OrderNr = 0; // OrderNR int QuantProduced saxlamaq üçün dəyişən = 0; // İstehsal olunan miqdarın saxlanması üçün dəyişən int NumberOfRows = 0; // sıfır olan satır sayı.. bool ProdRunning = false; // Başlat və dayandır düymələrinin aktiv olub olmadığını göstərən dəyişən int limits = new int [6]; // int CustomerID massivini başlatmaq; // customerID ictimai Form1 () {InitializeComponent (); load_table (); // zəng load_table}

void load_table ()

{MySqlCommand əmri = yeni MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", əlaqə); cəhd edin {MySqlDataAdapter adapteri = yeni MySqlDataAdapter (); adapter. SelectCommand = əmr; DataTable dbdataset = yeni DataTable (); adapter doldurun (dbdataset); BindingSource bsource = yeni BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter Yeniləmə (dbdataset); } catch (Exception ex) {MessageBox. Show (məs. Mesaj); }}

şəxsi boşluq SetRowOrder ()

{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Bütün məlumatları əldə etmək üçün dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Məlumat məlumatlarıGridView1. Columns ["UID"] ilə əlaqəli bütün məlumatları göstərir. DisplayIndex = 2; // Bütün məlumatları əldə etmək üçün dataGridView1. Columns ["weight"]. DisplayIndex = 3; // Bütün məlumatları əldə etmək üçün dataGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // Bütün məlumatları əldə etmək üçün dataGridView1. Columns ["orderID"]. DisplayIndex = 5; // Kolonner Andres} haqqında məlumat

şəxsi boşluq GetData_Click (obyekt göndərən, EventArgs e) // Verilənlər bazası cədvəlini və Zaman damgası ilə sifarişləri oxuyur

{load_table (); }

şəxsi boşluq btnRefreshUID_Click (obyekt göndərən, EventArgs e) //

{string timeStr = "UID ÜZRƏ SİFARİŞ patedb.patelog SELECT * FROM;"; MySqlCommand əmri = yeni MySqlCommand (timeStr, əlaqə); cəhd edin {MySqlDataAdapter adapteri = yeni MySqlDataAdapter (); adapter. SelectCommand = əmr; DataTable dbdataset = yeni DataTable (); adapter doldurun (dbdataset); BindingSource bsource = yeni BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter Yeniləmə (dbdataset); } catch (Exception ex) {MessageBox. Show (məs. Mesaj); }}

şəxsi boşluq btnRefreshValue_Click (obyekt göndərən, EventArgs e)

{string weightSort = "SELECT * FROM patedb.patelog SİFARİŞDƏ SİFARİŞ EDİN (çəki BÜTÜN İMZƏ EDİLDİ);"; MySqlCommand əmri = yeni MySqlCommand (weightSort, əlaqə); cəhd edin {MySqlDataAdapter adapteri = yeni MySqlDataAdapter (); adapter. SelectCommand = əmr; DataTable dbdataset = yeni DataTable (); adapter doldurun (dbdataset); BindingSource bsource = yeni BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter Yeniləmə (dbdataset); } catch (Exception ex) {MessageBox. Show (məs. Mesaj); }}

xüsusi boşluq ChkNullBtn_Click (obyekt göndərən, EventArgs e)

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

şəxsi boşluq CheckTableForNull ()

{// Zaman aralığını yoxlayın/təyin edin minimum 100 ms int i; int. TryParse (textTimer1. Text, i xaricində); if (i <100) {timer1. Stop (); i = 100; taymer 1. Aralıq = i; MessageBox. Show ("Minimum dəyər i 100mS"); timer 1. Başlat (); } başqa {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Cədvəldə null olan hər hansı bir satırın olub olmadığını yoxlayın, dəyişən sətirlərin sayını qaytarır: NumberOfRows string weightStr = ""; string chkNull = "COUNT SELECT (*) FROM patedb.patelog WHERE rangeNR NULL ORDER PATEID LIMIT 1;"; MySqlCommand əmri = yeni MySqlCommand (chkNull, əlaqə); cəhd edin {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); əlaqə. Close (); } catch (Exception ex) {MessageBox. Show (məs. Mesaj); } nəhayət {if (NumberOfRows! = 0) {try {// rangeNr -nin NULL string olduğu ən aşağı pateID sayını seçir readID = "pateID FROM patedb.patelog WHERE rangeNR NULL ORDER BY pateID ASC LIMIT 1;"; MySqlCommand cmdID = yeni MySqlCommand (readID, əlaqə); {connection. Open (); RowNumber = (int) cmdID. ExecuteScalar (); //tam!! əlaqə. Close (); } listPateID. Text = RowNumber. ToString (); // seçilmiş PateID nömrəsini oxumaq // Seçilmiş rownumber string sətrindən çəki seçir = RowNumber. ToString (); string readweight = "SEÇİN çəkisini FROM patedb.patelog WHERE pateID =" + sıra; MySqlCommand cmdweight = yeni MySqlCommand (oxunan çəki, əlaqə); {connection. Open (); weightStr = (string) cmdweight. ExecuteScalar (); // String !! əlaqə. Close (); } çəki = int. Parse (weightStr); // int txtWeight. Text = weight. ToString () -ə çevirmək; // çap int RangeNumber = 0; if (çəki> = məhdudiyyətlər [0] && çəki = məhdudiyyətlər [2] && çəki = məhdudiyyətlər [4] && çəki <= məhdudiyyətlər [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } catch (Exception ex) {MessageBox. Show (məs. Mesaj); } QuantProduced = QuantProduced + 1; }}} şəxsi boşluq btnStart_Click (obyekt göndərən, EventArgs e) {if (ProdRunning == false) {int valtest; cəhd edin {CustomerID = int. Parse (txtCustomerNr. Text); // oxumaq customerID} catch {MessageBox. Show ("İstehsalat məlumatlarını daxil edin və 'start' düyməsinə basın."); }

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

MySqlCommand cmdtestcustomer = yeni MySqlCommand (test, əlaqə); {connection. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // müştəri əlaqəsi yoxdursa 0 qaytarır. Close (); } if (valtest == 1) // müştəri verilənlər bazasında varsa - istehsalata başlayın {cəhd edin {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = doğru; timer 1. Başlat (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Exception ex) {MessageBox. Show ("İstehsalat məlumatlarını daxil edin və 'start' düyməsinə basın."); }} başqa MessageBox. Show ("Müştəri verilənlər bazasında deyil, yenidən cəhd edin"); } // ReadLimits (); }

xüsusi boşluq ReadLimits ()

{// Sınırları dəyişəndən oxuyur, 1 -dən 3 -ə qədər int counter = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = yeni MySqlCommand (readmin, əlaqə); {connection. Open (); limitlər [sayğac] = (int) cmdmin. ExecuteScalar (); sayğac = sayaç + 1; əlaqə. Close (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = yeni MySqlCommand (readmax, əlaqə); {connection. Open (); limitlər [sayğac] = (int) cmdmax. ExecuteScalar (); sayğac = sayaç + 1; əlaqə. Close (); }} // döngə üçün son}

şəxsi boşluq UpdateLog ()

{// UPDATE rangeNR & orderID sətri Aralığı = RangeNumber. ToString (); string Sifariş = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+RowNumber; MySqlCommand updatecmd = yeni MySqlCommand (yeniləmə, əlaqə); cəhd edin {connection. Open (); updatecmd. ExecuteNonQuery (); əlaqə. Close (); } catch (Exception ex) {MessageBox. Show (məs. Mesaj); }}

xüsusi boşluq btnStop_Click (obyekt göndərən, EventArgs e)

{if (ProdRunning == true) {timer1. Stop (); ProdRunning = yalan; UpdateOrderTable (); } başqa {MessageBox. Show ("Hələ heç bir istehsal başlamadı. Məlumat daxil edin və 'start' düyməsinə basın"); }}

xüsusi boşluq 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 = yeni MySqlCommand (daxil edin, əlaqə); cəhd edin {connection. Open (); insertcmd. ExecuteNonQuery (); əlaqə. Close (); QuantProduced = 0; } catch (Exception ex) {MessageBox. Show (məs. Mesaj); }}

private void timer1_Tick (obyekt göndərən, EventArgs e)

{CheckTableForNull (); load_table (); }

şəxsi boşluq btnShowOrderTable_Click (obyekt göndərən, EventArgs e)

{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", bağlantı); cəhd edin {MySqlDataAdapter adapteri = yeni MySqlDataAdapter (); adapter. SelectCommand = əmr; DataTable dbdataset = yeni DataTable (); adapter doldurun (dbdataset); BindingSource bsource = yeni BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter Yeniləmə (dbdataset); } catch (Exception ex) {MessageBox. Show (məs. Mesaj); }} başqa {MessageBox. Show ("OrderTable üçün stop düyməsini basın"); }}

şəxsi boşluq btnShowOrderDetails_Click (obyekt göndərən, 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 əmri = yeni MySqlCommand (test, əlaqə); cəhd edin {connection. Open (); MySqlDataAdapter adapteri = yeni MySqlDataAdapter (); adapter. SelectCommand = əmr; DataTable dbdataset = yeni DataTable (); adapter doldurun (dbdataset); BindingSource bsource = yeni BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter Yeniləmə (dbdataset); } catch (Exception ex) {MessageBox. Show (məs. Mesaj); } əlaqə. Close (); } başqa {MessageBox. Show ("Sifariş təfərrüatlarını görmək üçün stop düyməsini basın"); }}

şəxsi boşluq btnShowCustomerDetails_Click (obyekt göndərən, 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 əmri = yeni MySqlCommand (test, əlaqə); cəhd edin {MySqlDataAdapter adapteri = yeni MySqlDataAdapter (); adapter. SelectCommand = əmr; DataTable dbdataset = yeni DataTable (); adapter doldurun (dbdataset); BindingSource bsource = yeni BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter Yeniləmə (dbdataset); } catch (Exception ex) {MessageBox. Show (məs. Mesaj); }} başqa {MessageBox. Show ("Müştəri məlumatlarını öyrənmək üçün dayanma düyməsini basın"); }}}

}

Tövsiyə: