Sadržaj:

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

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

Video: EAL-Industri4.0-RFID prikupljanje podataka do baze podataka: 10 koraka (sa slikama)
Video: Стеки технологий – информатика для руководителей бизнеса 2016 2024, Juli
Anonim
EAL-Industri4.0-RFID prikupljanje podataka u bazu podataka
EAL-Industri4.0-RFID prikupljanje podataka u bazu podataka

Dette projekt omhandler opsamling o vašim podacima, registracija identiteta u vašoj. RFID, zaostajanje podataka u MySQL bazi podataka. node-RED, samo ažuriranje i ponašanje u skladu sa općenitim podacima u et C# programu i formiranom u aplikaciji Windows Form. Vi forestiller os følgende:

Vi proizvodite proizvode sa polugom od 200 g folije. Svi dodaci poluga s polugom nakon aficiranja s RFID oznakom u plastičnoj/etiketiranoj oznaci, kao neodržanog vlasnika i jedinstvenog ID -a (UID = Jedinstveni identifikator, imaju 32 bitova koda, 8 heksadecimalnih karaktera) za identifikaciju etikete na bilo kojoj od bakrenih poluga. 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 i specificira krav færdigvægten, bruges UID tagget do knytte hver enkelt leverresk tigr leverposter leverpostejer til én specifick kunde. Kunderne er supermarkedskæder:

1. Irma. Požurite na Irmas luksus leverpostej skal holde potpisanu za +/- 5%, minimalno 190 g ili maksimalno 210 g.

2. Brugsen. Uz Brugsens leverpostej skal holde potpisujte +/- 10%, minimalno 180g ili maksimalno 220g.

3. Aldi. Uzmite Aldis popust na polugu i držite ga 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: Općenito uzorkovanje podataka za registraciju prijavljenog korisnika UID -a

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

Za općenito prikupljanje podataka za snimanje, registraciju RFID oznaka na Arduinu MEGA2560 i čitaču/piscu RFID-RC522. Da vi ikke ne možete vidjeti, simulirajte podatke za izmjenu i mjerenje napona i analogni izvor na Arduinoenu.

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 je opremljen Arduino priključcima za SPI priključak 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 provjera, šalju na serijski port kao komma-razdvajaju tekstualni tekst do čvora-Crveni som za daljnju prezentaciju na nadzornoj ploči i u bazi podataka.

Korak 2: Arduino-program

Arduino program uključuje biblioteke SPI.h i MFRC522.h za najnovije RFID podatke. Započeo sam s inicijalizacijom programa varijable. Der laves in instans of MFRC522. I Postavke blokken Initialise in serielle forbindelse, SPI port and 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. Niti se ne nalazi skener i UID oznaka, učitava svaki nyUID i ne UOP. Ovaj nyUYYYY nyUID je forskellig iz oldUID -a koji je ispričan o ovom i novom UID -u koji se može poslati na serijski port. Ovaj nYUID i oldUID su sljedeći, jer su ta priča o istoj UID oznaci i UID -ovi zanemareni. Ovo je priča o ovom UID -u, koji šalje UID na portu sa serijskim portalom koji je postavljen na sljedeći port sa serijskim portom. Analogni skeletni skeleti do områdeta 150-250. Podaci se šalju kao komma-separeret tekstualni. Neko kotira na stranici oldUID = nyUID, nalazi se na kodeksu za kladiranje i na najnižoj RFID oznaci.. Omogućava upotrebu funkcija i programa sa dva niza. Funkcionen povratnik true hvis array'ne er ens, og false hvis array'ne er forskellige.

#include

#include // Ovaj program skenira RFID kartice koristeći RDIF-RC522 čitač/ploču za pisanje. // UID se čita, čita se analogni pin. Analogna vrijednost 0-1023 je skalirana na 150-250. // UID i analogna vrijednost se šalju kao tekst odvojen zarezima na serijskom portu koristeći 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 može ponovo poslati. // Ova funkcija se 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); // Kreiranje 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 sa 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) {Vrednost = 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 kašnjenja od 1 sekunde (1000); }

// uporedi 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 (bajt 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: Node-RED, baza podataka baze podataka koja kasni

Node-RED, Baza podataka Data I koja zaostaje
Node-RED, Baza podataka Data I koja zaostaje
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 dostupan za ažuriranje podataka o promjenama podataka s Arduino boardeta. Funkcionalni "Split and Get value" i "Split and Get UID" razdjelnik teksiraju i vraćaju i vraćaju hvv podatke i UID. Započnite bruges do fremvisning na dashboardet i et linechart i razmjera. UID fremvises i tekstfelt. Funkcionalni test_glas napredni verbalni sa "Out of range", viši od 170g ili preko 230g, DV i raspon 0.

Podijeli i ostvari vrijednost:

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

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

Podijelite i dobijte UID:

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

temp = {korisna vrijednost: izlaz [0]}; return 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 "," unesena vremenska oznaka, UID i provjeri u bazi podataka patedb.patelog.

var output = msg.payload.split (","); // podijeli msg.payload zarezima u niz

UIDTag = izlaz [0]; // prvi dio na prvu poziciju [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+"');" }; return m;

patelog je en MySQL baza podataka za ažuriranje ako je postavljen sa sljedećim parametrima:

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 node-RED i C# programu

narudžbenica je na tablici ili kao indeholder podaci o generičkoj naredbi, tilskriveni podaci u C# programu

kupac može se registrirati i registrirati

tablica raspona je en tablica kao neodržavatelj grènseværdierne za de i C# programske opsege benyttede raspona.

Korak 5: Patelog

Patelog
Patelog

Tabellen patelog indeholder folgende 6 kolonner:

pateID (int) je primarni ključ i automatski je uključen automatski ključ.

Vremenska oznaka, UID i provjera tipa tipke (sa maksimalnom dužinom skeniranja)

rangeNr er typen tinyint (bereg and tffjeje af C# programmet)

orderID je tip tipa int (redoslijed naloga je C# programmet)

Node-RED za promjenu do kolonnerNe domete i ID-a narudžbe. rangeNr i orderID tillader NULL pregled, det bruges i C# program za otkrivanje detektora i skeniranje tilkriptera za rangeNr i orderID

Korak 6: Mogućnost naručivanja

Tabela za naručivanje
Tabela za naručivanje

narudžbeni indeholder 5 kolonner:

orderID (int) je aktuelan redni broj

orderQuant (mediumint) er ordens pålydende antal

QuantProduced (mediumint) je antal der rent factisk er produceret på ordren. (Naslovi programa C#)

comment (tinytext) er en eventuel kommentar til ordren.

customerID (int) je aktuelan kundenummer na red.

Korak 7: Mogućnost kupca

Customertable
Customertable

Neobveznik vlasništva za kupca 6 kolonner:

customerID (int) primarni ključ i automatsko uključivanje

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

rangeNr (int)

Korak 8: Dometljiv

Rangetable
Rangetable

Indeholder za dohvat 3 kolonner:

rangeNr (int) je 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 i en eventuel komentar indtastes in C# programmet (ja praksis overføres det digitalt fra virksomhedens ordresystem. Produktionen startes nu ved tryk på 'start'- knappen. i prijevoz) Samhrende preglednik UID-a i aktuelnosti šalje serije do node-RED, tako da pregledaju podatke o obrisu na nadzornoj ploči i sl. Samtidig skrivenu vremensku oznaku, UID i nove i pakovane tabele. tidspunkt ikke tilskrives promjenjiv do rasponaNr i ID ID -a porijekla imaju nULL.

Intervalni interval i vremenski interval ispod C# programa patedb.patelogtabellen za najnovije izmjene sa NULL promjenama i opsegomNr kolona. Ner der er detekteret en række med NULL verdi, beregnes rangeNr and det tilføjes sammen med det aktuelne 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 ili probati na forskellige knapper -u i grupi Update DataGridview. narudžbine se mogu pregledati, ili se mogu izvršiti redovni podaci za pojedinačne UID -ove ili za kupljene podatke za pojedinačne naručioce.

koristeći System; koristeći 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; koristeći 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 reda = 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 skladištenje proizvedene količine int NumberOfRows = 0; // broj redova s nulama.. bool ProdRunning = false; // Varijabla koja pokazuje da li su tipke start & stop aktivirane 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 ()

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

privatna praznina SetRowOrder ()

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

private void GetData_Click (pošiljatelj objekta, EventArgs e) // Čita tablicu baze podataka i naredbe 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 = novi MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }}

private void btnRefreshValue_Click (pošiljalac 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 = novi MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }}

privatna praznina ChkNullBtn_Click (pošiljatelj objekta, EventArgs e)

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

private void CheckTableForNull ()

{// Provjera/postavljanje vremenskog intervala minimalno 100 ms int i; int. TryParse (textTimer1. Text, out 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 (); // Provjeravamo je li u tablici dostupan bilo koji redak s null, vraća broj redova 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); probajte {connection. Open (); NumberOfRows = Pretvori. ToInt32 (command. ExecuteScalar ()); connection. Close (); } 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 FROM patedb.patelog GDJE je rangeNR NULL ORDER BY pateID ASC LIMIT 1;"; MySqlCommand cmdID = novi MySqlCommand (readID, veza); {connection. Open (); Broj reda = (int) cmdID. ExecuteScalar (); // cijeli broj !! connection. Close (); } listPateID. Text = Broj redaka. ToString (); // očitava odabrani PateID broj // Odabire težinu iz odabranog broja redaka string row = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + red; MySqlCommand cmdweight = novi MySqlCommand (readweight, veza); {connection. Open (); weightStr = (string) cmdweight. ExecuteScalar (); // String !! connection. Close (); } 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šiljalac objekta, EventArgs e) {if (ProdRunning == false) {int valtest; probajte {CustomerID = int. Parse (txtCustomerNr. Text); // čitaj customerID} catch {MessageBox. Show ("Unesite proizvodne podatke i pritisnite dugme 'start'."); }

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

MySqlCommand cmdtestcustomer = novi MySqlCommand (test, veza); {connection. 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 = true; timer1. Start (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Izuzetak ex) {MessageBox. Show ("Unesite proizvodne podatke i pritisnite dugme 'start'."); }} else MessageBox. Show ("Klijent nije u bazi podataka, pokušajte ponovo"); } // ReadLimits (); }

private void ReadLimits ()

{// Očitava ograničenja iz tablice raspona, raspon 1 do 3 int brojač = 0; za (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = nova MySqlCommand (readmin, veza); {connection. Open (); granice [brojač] = (int) cmdmin. ExecuteScalar (); brojač = brojač + 1; connection. Close (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax IZ patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = novi MySqlCommand (readmax, veza); {connection. Open (); granice [brojač] = (int) cmdmax. ExecuteScalar (); brojač = brojač + 1; connection. Close (); }} // 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 je pateID ="+Broj reda; MySqlCommand updatecmd = novi MySqlCommand (ažuriranje, veza); probajte {connection. Open (); updatecmd. ExecuteNonQuery (); connection. Close (); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }}

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

{if (ProdRunning == true) {timer1. Stop (); ProdRunning = false; UpdateOrderTable (); } else {MessageBox. Show ("Još nije započela proizvodnja. Unesite podatke i pritisnite dugme" 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); probajte {connection. Open (); insertcmd. ExecuteNonQuery (); connection. Close (); QuantProduced = 0; } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }}

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

{CheckTableForNull (); load_table (); }

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

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

private void btnShowOrderDetails_Click (pošiljalac 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); probajte {connection. Open (); MySqlDataAdapter adapter = novi MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); } connection. Close (); } else {MessageBox. Show ("Pritisnite stop da vidite detalje narudžbe"); }}

private void btnShowCustomerDetails_Click (pošiljalac objekta, EventArgs e)

{if (ProdRunning == false) {string test = ("SELECT patedb.customertable.customerID, ime, adresa, telefon, e -pošta, rangeNr OD patedb.customertable INNER JOIN patedb.ordertable ON patedb.ordertable.customerID = patedb.customertable. customerID WHERE patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +"' "); Naredba MySqlCommand = nova MySqlCommand (test, veza); isprobajte {MySqlDataAdapter adapter = novi MySqlDataAdapter (); adapter. SelectCommand = naredba; DataTable dbdataset = nova DataTable (); adapter. Fill (dbdataset); BindingSource bsource = novi BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } catch (Izuzetak ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Pritisnite stop da vidite detalje o korisniku"); }}}

}

Preporučuje se: