Sadržaj:

EAL-Industri4.0-RFID skupljanje podataka do baze podataka: 10 koraka (sa slikama)
EAL-Industri4.0-RFID skupljanje podataka do baze podataka: 10 koraka (sa slikama)

Video: EAL-Industri4.0-RFID skupljanje podataka do baze podataka: 10 koraka (sa slikama)

Video: EAL-Industri4.0-RFID skupljanje podataka do baze podataka: 10 koraka (sa slikama)
Video: ЗЕМЛЯ В ИЛЛЮМИНАТОРЕ !| ЧТО НОВОГО В ОБНОВЛЕНИИ ► 1 (часть 1) Прохождение ASTRONEER 2024, Srpanj
Anonim
EAL-Industri4.0-RFID skupljanje podataka do baze podataka
EAL-Industri4.0-RFID skupljanje podataka do baze podataka

Dette projekt omhandler opsamling af vagtdata, registering identiteter vha. RFID, zaostajanje podataka u MySQL bazi podataka. node-RED, samo ažuriranje i ponašanje u skladu s opsamlede podacima u et C# programu koji se stvaraju u aplikaciji Windows Form. Vi forestiller os følgende:

Vi har en produktionslinje som proizvođač leverpostej i 200g foliebakker. Svi dodaci za poluge s polugom nakon afkølinga s RFID oznakom u plastičnoj ploči/oznaci, kao indeholder i jedinstveni ID (UID = Unique Identifier, er en 32 bits code, 8 hexadecimale karakterer) for entydig identification af hver enkelt bakke leverpostej. Da færdigvægten af hver enkelt bakke leverpostej kan svinge (afhængig af råvarer, fordampning i ovn mm), og da kunderne hver har et specikt krav færdigvægten, bruges UID tagget til at knytte hver enkelt leverresg leverposterj tigr leverpostejer til én specik kunde. Kunderne er supermarkedskæder:

1. Irma. Dopustite da Irmas luksus leverpostej skal holde sig inden za +/- 5%, minimalno 190 g ili maksimalno 210 g.

2. Brugsen. Povucite brugsens leverpostej skal holde za +/- 10%, minimalno 180 g ili maksimalno 220 g.

3. Aldi. Uzmite Aldis diskontni leverpostej skal holde za +/- 15%, minimalno 170 g ili maksimalno 230 g.

Der er således følgende sorteringer:

Raspon 0: izvan dometa

Raspon 1: minimalno 190 g/maksimalno 210 g

Raspon 2: minimalno 180 g/maksimalno 220 g

Raspon 3: minimalno 170 g/maksimalno 230 g

Korak 1: Opsamling Af podataka za Vægt Samt Registriranje UID

Opsamling Af Data for Vægt Samt Registerrring UID
Opsamling Af Data for Vægt Samt Registerrring UID

Za općenito prikupljanje podataka za učitavanje, učitavanje RFID oznaka na Arduino MEGA2560 i čitač/pisač RFID-RC522. Da vi ikke ne možete vidjeti, simulator vi podataka za provjeru med et potmeter tilsluttet i analogni izvor na Arduinoen.

Følgende opstilling er anvendt:

1 stk potmeter 25k lineært. Yder-benene er tilsluttet hhv. GND og +5V, međupojasni mrežni priključak AN0

RFID-RC522 nalazi se na Arduino ploči sa SPI priključkom na sljedećoj lokaciji:

SDA -> pin 53

SCK -> pin52

MOSI -> pin51

MISO-> pin50

IRQ -> NC

GND -> GND

RST -> pin5

3.3V -> 3.3V

De opsamlede podaci, za hhv. UID i provjerite, šaljite li ih na serijski port kao kom-separeret tekstualnog videa do čvora-Crveni som za daljnju prezentaciju na nadzornoj ploči i u bazi podataka.

Korak 2: Arduino-program

I Arduino programmet uključen u biblioteker SPI.h og MFRC522.h za najnovije RFID læseren. Počeo sam s inicijalizacijom programa varijable de anvendte. Der laves en instans af MFRC522. I Postavke blokiraju početne inicijale za serijsku prodaju, SPI portove i MFRC522. Derefter skenira efter RFID oznaka. Za ikke at sende det samme UID afsted flere gange efter hinanden, er der lavet en panj kode som tjekker for dette. Ner er er scannet et UID oznaka, učitava arary nyUID među netop neispravne UID -ove. Hvis niz nyUID je forskellig fra oldUID er der tale om et nyt UID tako da se može poslati na serijski port. Hvis nyUID og oldUID er ens, er der tale om samme UID tag og UID'et skal zanemaruje. Hvis der er tale om et nyt UID, šalje UID'et på den serielle port sammen med en læst værdi fra den serielle port. Den analoge værdi skaleres til området 150-250. Podaci se šalju kao komma-separeret tekststreng. Som det sidste sættes oldUID = nyUID, således and koden klart to at the lsese et nyt RFID tag.. De sidste functiontion and programmet er den funktion sommenmenner 2 arrays. Funktionen povratnik true hvis array'ne er ens, og false hvis array'ne er forskellige.

#uključi

#include // Ovaj program skenira RFID kartice koristeći čitač/ploču za pisanje RDIF-RC522. // UID se čita, čita se analogni pin. Analogna vrijednost 0-1023 skalirana je na 150-250. // UID i analogna vrijednost šalju se kao tekst odvojen zarezima na serijskom portu pomoću 9600, N, 8, 1. // Pazilo se na to da se svaki UID šalje samo jednom zaredom, // novi UID mora biti prisutne prije nego što se isti UID ponovno može poslati. // Ova se funkcija implementira u kôd usporedbom nizova: oldUID nyUID u funkciji array_cmp (oldUID , nyUID )

constexpr uint8_t RST_PIN = 5;

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

MFRC522 mfrc522 (SS_PIN, RST_PIN); // Stvaranje instance MFRC522.

void setup ()

{Serial.begin (9600); // Pokretanje serijske komunikacije SPI.begin (); // Pokretanje sabirnice SPI mfrc522. PCD_Init (); // Pokreni MFRC522}

void loop ()

{// Potražite nove kartice if (! Mfrc522. PICC_IsNewCardPresent ()) {return; } // Odaberite jednu od kartica if (! Mfrc522. PICC_ReadCardSerial ()) {return; } // učitati nyUID s UID oznakom za (bajt i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // ako oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// pošalje UID oznaku na serijski port za (bajt i = 0; i 1000) {Vrijednost = 1000; } Vrijednost = (Vrijednost / 10) + 150; // šalje skaliranu analognu vrijednost Serial.print (Value); // šalje novi red Serial.println (); // postavljamo oldUID = nyUID za (bajt z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // čekanje 1 sekunde odgode (1000); }

// usporedite 2 niza …

boolean array_cmp (bajt a , bajt b ) {bool test = true; // testiramo svaki element da bude isti. ako samo jedan nije, vratite false za (byte n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // ako bajt nije jednak, test = false} if (test == true) return true; else return false; }

Korak 3: Čvor-RED, baza podataka baze podataka koja kasni

Node-RED, Lagring Af Data I Database
Node-RED, Lagring Af Data I Database
Node-RED, Lagring Af Data I Database
Node-RED, Lagring Af Data I Database

Følgende flow er lavet i node-RED:

COM4 je serijski instaliran za ažuriranje podataka o podacima iz Arduina. Funkcionalni "Split and Get value" i "Split and Get UID" splitter teksstrengen ved kommaet and return hhv vægten and UID. Vægten bruges til fremvisning på dashboardet i et linechart og en scale. UID fremvises i et tekstfelt. Funkcionalni test_glas napredni verbalni s "Out of range", viši od 170g ili veći od 230g, DV i raspon 0.

Podijeli i ostvari vrijednost:

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

temp = {korisni teret: (izlaz [1])}; povratna temp;

Podijelite i dobijte UID:

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

temp = {korisna vrijednost: izlaz [0]}; povratna temp;

test_zvuk:

var number = parseInt (msg.payload);

if (broj> 230 || broj <170) {newMsg = {korisni teret: "Izvan dometa"}; return newMsg; } else {newMsg = {korisni teret: ""}; return newMsg; }

Funkcija Podijeli niz "," ubaci i vremensku oznaku, UID i provjeri u en bazi podataka patedb.patelog.

var output = msg.payload.split (","); // podijeli msg. učitavanje zarezom u polje

UIDTag = izlaz [0]; // prvi dio na prvo mjesto [0] ValueTag = output [1]; // drugi dio na drugu poziciju [1]

var m = {

topic: "INSERT INTO patedb.patelog (vremenska oznaka, UID, težina) VALUES ('"+novi datum (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; povrat m;

patelog je hr MySQL baza podataka forbindelse som er op with med følgende parametar:

Domaćin: localhost

Luka: 3306

Korisnik: root

Baza podataka: patedb

Korak 4: Dizajn baze podataka

Dizajn baze podataka
Dizajn baze podataka

Baza podataka patedb indeholder 4 tabeller

patelog je dataopsamlingstabellen, tilskrive podatke o čvoru-RED i C# programu

ordertable er en tabel som indeholder data om de genemførte ordrer, tilskrives data af C# programmet

ertable kunderegister

rangetable er en tabel som indeholder grænseværdierne for de i C# programmet benyttede range.

Korak 5: Patelog

Patelog
Patelog

Tabellen patelog indeholder folgende 6 kolonner:

pateID (int) je primarni ključ i inkrementeres automatisk.

Vremenska oznaka, UID i oznaka tipa type varchar (s maksimalno dopuštenom veličinom)

rangeNr er type type tinyint (bereg and tilføjes af C# programmet)

orderID je tip tipa int (red ID je postavljen u C# programmet)

Node-RED tilføjer ikke værdier til kolonnerne rangeNr og orderID. rangeNr i orderID tillader NULL pregled, det bruges i C# programmet do detekter de rækker som skal tilskrives værdier for rangeNr og orderID

Korak 6: Mogućnost naručivanja

Mogućnost naručivanja
Mogućnost naručivanja

neurednik 5 kolonner koji se može naručiti:

orderID (int) er det aktuelle ordrenummer

orderQuant (mediumint) er ordens pålydende antal

quantProduced (mediumint) er antal der rent faktisk er produceret på ordren. (Popis programa C#)

comment (tinytext) er en eventuel komentar til ordren.

customerID (int) er det aktuelle kundenummer på ordren.

Korak 7: Mogućnost kupca

Korisnički dostupan
Korisnički dostupan

neobveznik vlasništva za kupca 6 kolonner:

customerID (int) primarni ključ i auto inc.

ime, adresa, telefon, e -pošta (varchar) med forskellig max længde

rangeNr (int)

Korak 8: Dometljiv

Dometljiv
Dometljiv

Indeholder za raspon 3 kolonner:

rangeNr (int) er primarni ključ i auto inc.

rangeMin (int)

rangeMax (int)

Korak 9: Program C#

C# program
C# program

Når der productsres en ordre leverpostej, er proceduren følgende:

Kundenummer, ordrenummer, ordreantal og en eventuel komentar indtastes i C# programmet (i praksis overføres det digitalt fra virksomhedens ordresystem. Produktionen startes nu ved tryk på 'start'- knappen. Når en leverpostej er færdigcereng ar på et transportbånd) Samhørende værdier af UID og den aktuelle vægt sendes serielt til node-RED, som viser de opsamlede data na nadzornoj ploči 'et. Samtidig skrives timestamp, UID og næg i en ny række i patedb tabelarne tablice tidspunkt ikke tilskrives værdier til rangeNr og orderID vil de have værdien NULL.

Med et timerinterval underlder C# programmet patedb.patelogtabellen for nye tilkomne rækker med NULL værdier i rangeNr kolonnen. Når der er detekteret en række med NULL værdi, beregnes rangeNr og det tilføjes sammen med det aktuelle orderID. Når en ordre er produceret, afsluttes ordren ved tryk på”stop”- knappen. Når ordren afsluttes, tilføjes en række til patedb.ordertable med de aktuelle ordredata. Niti jedno ni drugo nije dostupno, ali možete opsamledirati podatke i patelog tabellen fremvises koji možete isprobati ako pokušate forskellige knapper i grupno ažurirati DataGridview. ordertable kan også vises, og der kan søges ordredata på individueller UID'er eller kundedata på individuelle ordrer.

pomoću System; pomoću System. Collections. Generic; pomoću System. ComponentModel; pomoću System. Data; pomoću System. Drawing; pomoću System. Linq; pomoću System. Text; pomoću System. Threading. Tasks; pomoću System. Windows. Forms; pomoću MySql. Data. MySqlClient;

imenski prostor show_data_f_database

{javna parcijalna klasa Form1: Obrazac {MySqlConnection connection = new MySqlConnection ("datasource = localhost; korisničko ime = root; lozinka = ''"); int Broj retka = 0; // Varijabla za spremanje pateID vrijednosti int RangeNumber = 0; // Varijabla za spremanje rangenumber int weight = 0; // Varijabla za spremanje težine int OrderNr = 0; // Varijabla za spremanje OrderNR int QuantProduced = 0; // Varijabla za pohranu proizvedene količine int NumberOfRows = 0; // broj redaka s nulama.. bool ProdRunning = false; // Varijabla koja pokazuje jesu li gumbi za pokretanje i zaustavljanje aktivirani int limits = new int [6]; // inicijalizira niz int CustomerID; // Varijabla za spremanje korisničkog ID -a Form1 () {InitializeComponent (); load_table (); // poziv load_table}

void load_table ()

{Naredba MySqlCommand = nova MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY vremenska oznaka DESC;", veza); isprobajte {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Ažuriranje (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }}

privatna praznina SetRowOrder ()

{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Njezino pretraživanje može biti prikazano na stranici dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Njezino pretraživanje može se unijeti u kolonner podatke dataGridView1. Columns ["UID"]. DisplayIndex = 2; // Njen kan rækkefølgen af kolonner ændres dataGridView1. Columns ["weight"]. DisplayIndex = 3; // Njen kan rækkefølgen af kolonner ændres dataGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // Njezino pretraživanje može se prikazati na stranici dataGridView1. Columns ["orderID"]. DisplayIndex = 5; // Njezin kan rækkefølgen af kolonner ændres}

private void GetData_Click (pošiljatelj objekta, EventArgs e) // Čita tablicu baze podataka i narudžbe prema vremenskoj oznaci

{load_table (); }

private void btnRefreshUID_Click (pošiljatelj objekta, EventArgs e) //

{string timeStr = "SELECT * FROM patedb.patelog ORDER BY UID;"; Naredba MySqlCommand = nova MySqlCommand (timeStr, veza); isprobajte {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Ažuriranje (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }}

private void btnRefreshValue_Click (pošiljatelj objekta, EventArgs e)

{string weightSort = "SELECT * FROM patedb.patelog ORDER BY CAST (weight AS SIGNIG INTEGER);"; Naredba MySqlCommand = nova MySqlCommand (weightSort, veza); isprobajte {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Ažuriranje (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }}

private void ChkNullBtn_Click (pošiljatelj objekta, EventArgs e)

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

private void CheckTableForNull ()

{// Provjerite/postavite vremenski interval minimalno 100 ms int i; int. TryParse (textTimer1. Text, van i); if (i <100) {timer1. Stop (); i = 100; timer1. Interval = i; MessageBox. Show ("Minimalna vrijednost i 100mS"); timer1. Start (); } else {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Provjerava jesu li u tablici dostupni retci s null, vraća broj redaka u varijabli: NumberOfRows string weightStr = ""; string chkNull = "SELECT COUNT (*) FROM patedb.patelog WHERE rangeNR IS NULL ORDER BY pateID LIMIT 1;"; Naredba MySqlCommand = nova MySqlCommand (chkNull, veza); pokušajte {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); veza. Zatvori (); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); } konačno {if (NumberOfRows! = 0) {try {// Odabire najniži broj pateID -a gdje je rangeNr NULL string readID = "ODABERI pateID IZ PATEDB.patelog GDJE je rangeNR NULL ORDER BY pateID ASC LIMIT 1;"; MySqlCommand cmdID = novi MySqlCommand (readID, veza); {veza. Open (); Broj retka = (int) cmdID. ExecuteScalar (); // cijeli broj !! veza. Zatvori (); } listPateID. Text = Broj redaka. ToString (); // očitavanje odabranog PateID broja // Odabire težinu iz odabranog niza redaka reda niz = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + red; MySqlCommand cmdweight = novi MySqlCommand (readweight, veza); {veza. Open (); weightStr = (niz) cmdweight. ExecuteScalar (); // Niz !! veza. Zatvori (); } težina = int. Parse (weightStr); // pretvara u int txtWeight. Text = weight. ToString (); // ispis int RangeNumber = 0; if (težina> = granice [0] && težina = granice [2] && težina = granice [4] && težina <= granice [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} private void btnStart_Click (pošiljatelj objekta, EventArgs e) {if (ProdRunning == false) {int valtest; pokušajte {CustomerID = int. Parse (txtCustomerNr. Text); // čitanje customerID} catch {MessageBox. Show ("Unesite proizvodne podatke i pritisnite gumb 'start'."); }

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

MySqlCommand cmdtestcustomer = novi MySqlCommand (test, veza); {veza. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // vraća 0 ako kupac ne postoji connection. Close (); } if (valtest == 1) // ako kupac postoji u bazi podataka - pokrenite proizvodnju {try {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = istina; timer1. Start (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Izuzetak ex) {MessageBox. Show ("Unesite proizvodne podatke i pritisnite gumb 'start'."); }} else MessageBox. Show ("Klijent nije u bazi podataka, pokušajte ponovno"); } // ReadLimits (); }

privatna praznina ReadLimits ()

{// Očitava ograničenja iz tablice raspona, raspon 1 do 3 int brojač = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = novi MySqlCommand (readmin, veza); {veza. Open (); granice [brojač] = (int) cmdmin. ExecuteScalar (); brojač = brojač + 1; veza. Zatvori (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = novi MySqlCommand (readmax, veza); {veza. Open (); granice [brojač] = (int) cmdmax. ExecuteScalar (); brojač = brojač + 1; veza. Zatvori (); }} // kraj za petlju}

privatna praznina UpdateLog ()

{// UPDATE rangeNR & orderID string Range = RangeNumber. ToString (); string Order = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Raspon+','+"orderID ="+OrderNr+"WHERE pateID ="+Broj redaka; MySqlCommand updatecmd = novi MySqlCommand (ažuriranje, veza); pokušajte {connection. Open (); updatecmd. ExecuteNonQuery (); veza. Zatvori (); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }}

private void btnStop_Click (pošiljatelj objekta, EventArgs e)

{if (ProdRunning == true) {timer1. Stop (); ProdRunning = netočno; UpdateOrderTable (); } else {MessageBox. Show ("Proizvodnja još nije započela. Unesite podatke i pritisnite tipku" start ""); }}

privatna praznina UpdateOrderTable ()

{string insert = "INSERT INTO patedb.ordertable (orderID, orderQuant, quantProduced, comment, customerID) VALUES ('" + this.txtOrderNumber. Text + "', '" + this.txtOrderQuant. Text + "', '" + {100} {101} QuantProduced. ToString ()+"','"+this.txtComment. Text+"','"+this.txtCustomerNr. Text+"');"; MySqlCommand insertcmd = novi MySqlCommand (umetanje, veza); pokušajte {connection. Open (); insertcmd. ExecuteNonQuery (); veza. Zatvori (); QuantProduced = 0; } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }}

private void timer1_Tick (pošiljatelj objekta, EventArgs e)

{CheckTableForNull (); load_table (); }

private void btnShowOrderTable_Click (pošiljatelj objekta, EventArgs e)

{if (ProdRunning == false) {MySqlCommand naredba = nova MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", veza); isprobajte {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Ažuriranje (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Pritisnite stop da biste pogledali orderTable"); }}

private void btnShowOrderDetails_Click (pošiljatelj objekta, 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 +"' "); Naredba MySqlCommand = nova MySqlCommand (test, veza); pokušajte {connection. Open (); Adapter MySqlDataAdapter = novi MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Ažuriranje (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); } veza. Zatvori (); } else {MessageBox. Show ("Pritisnite stop za pregled pojedinosti narudžbe"); }}

private void btnShowCustomerDetails_Click (pošiljatelj objekta, 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 je patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +"' "); Naredba MySqlCommand = nova MySqlCommand (test, veza); isprobajte {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Ažuriranje (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Pritisnite stop za pregled podataka o korisniku"); }}}

}

Preporučeni: