Sisällysluettelo:

EAL-Industri4.0-RFID Dataopsamling Til-tietokanta: 10 vaihetta (kuvilla)
EAL-Industri4.0-RFID Dataopsamling Til-tietokanta: 10 vaihetta (kuvilla)

Video: EAL-Industri4.0-RFID Dataopsamling Til-tietokanta: 10 vaihetta (kuvilla)

Video: EAL-Industri4.0-RFID Dataopsamling Til-tietokanta: 10 vaihetta (kuvilla)
Video: Sudahkah anda bersedia untuk menuju era Revolusi Industri 4.0?? 2024, Marraskuu
Anonim
EAL-Industri4.0-RFID Dataopsamling Til Database
EAL-Industri4.0-RFID Dataopsamling Til Database

Dette projekt omhandler opsamling af vægtdata, registration of af identiteter vha. RFID, valtava tieto i en MySQL -tietokanta vha. node-RED, samt fremvisning og behandling af de opsamlede data i et C# program i form af en Windows Form Application. Viisi metsämiestä:

Vi har en produktionslinje som produrer leverpostej i 200g foliebakker. Alle færdigbagte leverpostejer udstyres efter afføling med et RFID tag in plasticlåget/labelen, som indeholder et unikt ID (UID = Unique Identifier, er en 32 bits kode, 8 hexadecimale karakterer) tunnistetietojen saamiseksi 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 specific krav færdigvægten, bruges UID tagget til at knytte hver enkelt leverpostej til en sper lager leverpostejer til én specificik kunde. Kunderne supermarketskæder:

1. Irma. Vægten på Irmas luksus leverpostej skal holde sig inden +/- 5%, vähintään 190 g ja enintään 210 g.

2. Brugsen. Vægten på Brugsens leverpostej skal holde sig inden +/- 10%, vähintään 180 g ja enintään 220 g.

3. Aldi. Vægten på Aldis alennus leverpostej skal holde sig inden +/- 15%, vähintään 170g ja maksimi 230g.

Der er således følgende sorteringer:

Alue0: alueen ulkopuolella

Alue 1: vähintään 190 g/enintään 210 g

Alue2: vähintään 180 g/enintään 220 g

Alue 3: vähintään 170 g/enintään 230 g

Vaihe 1: Af -tietojen tarkistaminen Vægt Samt -rekisteröintiä varten

Af -tietojen tarkistaminen Vægt Samt -rekisteröintiin U UID
Af -tietojen tarkistaminen Vægt Samt -rekisteröintiin U UID

Til opsamling af data for vægt, same registering af RFID tags er anvendt fi Arduino MEGA2560 med en RFID-RC522 reader/write. Da vi ikke har nogen vægt, simulerer vi data for vægten med et potmeter tilsluttet en analog indgang på Arduinoen.

Følgende opstilling er anvendt:

1 tk potterimittari 25k lineart. Yder-benene er tilsluttet hhv. GND og +5V, puolivälissä tai tilsluttet AN0

RFID-RC522 tai trdluttet Arduino-levyt SPI-portti, jossa on seuraava legenda:

SDA -> nasta 53

SCK -> nasta52

MOSI -> pin51

MISO-> nasta50

IRQ -> NC

GND -> GND

RST -> nasta 5

3.3V -> 3.3V

De opsamlede data, hhv. UID ja tiedot, lähetetään serielle port som en komma-separeret tekststreng videre to node node-Red som står for den efterfølgende præsentation on dashboard and lagring in en database.

Vaihe 2: Arduino-ohjelma

I Arduino -ohjelmoitava mustesovellus kirjastolle SPI.h og MFRC522.h ja kun RFID -tekniikka. Käynnistän ohjelmoidun alustavan muuttujan. Der laves in instans af MFRC522. I Setup blokken initialiseres den serielle draindelse, SPI porten og MFRC522. Derefter -skannaus ja RFID -tunnisteet. Ike at sende det samme UID afsted flere gange efter hinanden, er der lavet en stump kode som tjekker for dette. Jos se on skannausverkko ja UID -tunniste, se sisältää jokaisen nyUID -tunnuksen, joka sisältää UID -verkon. Hvis array nyUID er forskellig from oldUID er der tarle om et now UID som can sendes in på den serielle port. Hvis nyUID og oldUID er ens, er der tarle omme Ume tag and UID'et skal ignore. Hvis der er tarle om et now UID, lähettää UID'et på den serielle port sammen med en læst værdi fra den serielle port. Vertaile skaalareita vertaamalla området 150-250. Data lähettää som en komma-separeret tekststreng. Jos haluat käyttää vanhaa UID = nyUID -tunnusta, voit käyttää koodia ja käyttää sitä RFID -tunnisteella. Funktionen returnerer true hvis array'ne er ens, og false hvis array'ne er forskellige.

#sisältää

#include // Tämä ohjelma skannaa RFID-kortit RDIF-RC522-lukija-/kirjoitustaululla. // UID luetaan, analoginen pin luetaan. Analoginen arvo 0-1023 skaalataan arvoon 150-250. // UID ja analoginen arvo lähetetään pilkuilla erotettuna tekstinä sarjaportissa käyttäen 9600, N, 8, 1. // On huolehdittu siitä, että jokainen UID lähetetään vain kerran peräkkäin, // uusi UID on lähetettävä ennen kuin sama UID voidaan lähettää uudelleen. // Tämä toiminto on toteutettu koodissa vertaamalla matriiseja: oldUID nyUID funktiossa array_cmp (oldUID , nyUID )

constexpr uint8_t RST_PIN = 5;

constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int Arvo = 0; Merkkijono StringValue = "0000"; tavu oldUID [4] = {}; tavu nyUID [4] = {};

MFRC522 mfrc522 (SS_PIN, RST_PIN); // Luo MFRC522 -ilmentymä.

mitätön asennus ()

{Serial.begin (9600); // Sarjaliikenteen aloittaminen SPI.begin (); // Käynnistä SPI -väylä mfrc522. PCD_Init (); // Aloita MFRC522}

tyhjä silmukka ()

{// Etsi uusia kortteja, jos (! Mfrc522. PICC_IsNewCardPresent ()) {return; } // Valitse yksi korteista, jos (! Mfrc522. PICC_ReadCardSerial ()) {return; } // lataa nyUID UID -tunnisteella (tavu i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // jos oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// lähetä UID -tunniste sarjaporttiin (tavu i = 0; i 1000) {Arvo = 1000; } Arvo = (Arvo / 10) + 150; // lähetä skaalattu analoginen arvo Serial.print (Arvo); // lähetä uusi rivi Serial.println (); // aseta oldUID = nyUID (tavu z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // odota 1 sekunnin viive (1000); }

// vertaa kahta taulukkoa…

boolean array_cmp (tavu a , tavu b ) {bool -testi = true; // testaa jokaisen elementin olevan sama. jos vain yksi ei ole, palauta false (tavu n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // jos tavu ei ole sama, test = false} if (test == true) return true; muuten palauta epätosi; }

Vaihe 3: Solmu-PUNAINEN, Lagring Af Data I -tietokanta

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

Følgende flow er lavet i node-RED:

COM4 tai serielle kieltää hvor -datamuodot Arduino -piirilevystä. Toiminnot "Split and Get value" ja "Split and Get UID" -jakajan tekstit, jotka on kirjoitettu ja palautettu hhv vægten og UID. Vægten bruges til fremvisning på dashboardet et linechart og en scale. UID -taajuudet ja tekstit. Funktionen test_sound advarer verbalt med sætningen "Out of range", hvis vægten er under 170g eller over 230g, dvs i range 0.

Jaa ja hanki arvo:

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

temp = {hyötykuorma: (tuotos [1])}; paluulämpötila;

Jaa ja hanki UID:

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

lämpötila = {hyötykuorma: lähtö [0]}; paluulämpötila;

testi_ääni:

var numero = parseInt (msg.payload);

if (luku> 230 || luku <170) {newMsg = {hyötykuorma: "Alueen ulkopuolella"}; palauta uusi viesti; } else {newMsg = {hyötykuorma: ""}; palauta uusi viesti; }

Funktionen Split string "," indsætter et timestamp, UID og vægten and en database patedb.patelog.

var output = msg.payload.split (","); // jakaa viesti.payload pilkulla taulukkoon

UIDTag = lähtö [0]; // ensimmäinen osa ensimmäiseen asemaan [0] ValueTag = output [1]; // toinen osa toiseen asentoon [1]

var m = {

topic: "INSERT INTO patedb.patelog (aikaleima, UID, paino) ARVOT ('"+uusi päivämäärä (). toISOString ()+"",' "+UIDTag+" "," "+ValueTag+" '); " }; paluu m;

patelog er fi MySQL -tietokanta kielsi som er sat op med følgende -parametrin:

Isäntä: localhost

Portti: 3306

Käyttäjä: root

Tietokanta: patedb

Vaihe 4: Tietokannan suunnittelu

Tietokannan suunnittelu
Tietokannan suunnittelu

Tietokanta patedb indeholder 4 tabeller

patelog er dataopsamlingstabellen, siirtää tietoja solmun-RED og C# ohjelmalla

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

asiakassuunnitelma ja rekisteröinti

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

Vaihe 5: Patelog

Patelog
Patelog

Tabellen patelog indeholder folgende 6 kolonner:

pateID (int) er ensisijainen avain ja tulostusautomaatti.

Aikaleima, käyttäjätunnus ja erikoisluvut (med forskellig max længde)

alue Nr er af typen tinyint (beregnes og tilføjes af C# programmet)

orderID er af typen int (orderID tilføjes af C# programmet)

Solmu-PUNAINEN tilkkutila ikke værdier til kolonnerne rangeNr og orderID. rangeNr og orderID tillader NULL værdier, det bruges i C# programmet til at detektere de rækker som skal tilskrives værdier for rangeNr og orderID

Vaihe 6: Tilattavissa

Tilattavissa
Tilattavissa

tilattava indeholder 5 kolonner:

orderID (int) er detele aktuelle ordrenummer

orderQuant (mediumint) er ordens pålydende antal

quantProduced (mediumint) er antal der rent faktisk er produret på ordren. (Tælles af C# programmet)

kommentoi (tinytext) er entuletuel kommentar til ordren.

customerID (int) er aktuelle kundenummer på ordren.

Vaihe 7: Muokattava

Mukautettava
Mukautettava

customertable indeholder 6 kolonner:

customerID (int) er ensisijainen avain ja auto inc.

nimi, osoite, puhelin, sähköposti (varchar) med forskellig max længde

alueNr (int)

Vaihe 8: Mittausalue

Rangetable
Rangetable

vaihteluväli indeholder 3 kolonner:

rangeNr (int) er ensisijainen avain ja auto inc.

rangeMin (int)

rangeMax (int)

Vaihe 9: C# -ohjelma

C# Ohjelma
C# Ohjelma

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

Kundenummer, orderrenummer, ordreantal og en eventuel kommentar indtastes i C# programmet (i praksis overføres det digitalt from virksomhedens ordresystem. Produktionen startes nu ved tryk på 'start'- knappen. Når en leverpostej er færdigproduceret og låget er den monte) på et transportbånd) Samhørende Værdier af UID og den aktuelle vægt lähettää serielt till node-RED, som viser de opsamlede data in då dashboard 'et. Samtidig skrives timestamp, UID og vægt i en ny række i patedb.patelog tabellen. Da der på nuv tidspunkt ikke tilskrives værdier til rangeNr og orderID vil de have værdien NULL.

Med ja timerinterval undergersger C# ohjelmoitu 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 produret, afsluttes ordren ved tryk på”stop”- knappen. Når ordren afsluttes, tilføjes en række til patedb.ordertable med de aktuelle ordredata. Når en ordre er afsluttet, can can de opsamlede data and patelog tabellen fremvises ved at trykke på de forskellige knapper i gruppen Update DataGridview. ordertable kan også vises, og der kan søges ordredata på yksilöeller UID'er eller kundedata på individualelle ordrer.

käyttämällä järjestelmää, käyttämällä System. Collections. Generic; käyttämällä System. ComponentModel; käyttämällä System. Dataa; käyttäen System. Drawing; käyttämällä System. Linq; käyttämällä System. Text; käyttämällä System. Threading. Tasks; käyttämällä System. Windows. Forms; käyttämällä MySql. Data. MySqlClient;

nimitila show_data_from_database

{public partial class Form1: Lomake {MySqlConnection connection = new MySqlConnection ("datasource = localhost; käyttäjätunnus = root; password = ''"); int Rivinumero = 0; // Muuttuja pateID -arvon tallentamiseen int RangeNumber = 0; // Muuttuja rangenumeron tallentamiseen int paino = 0; // Muuttuja painon tallentamiseen int OrderNr = 0; // Muuttuja OrderNR: n tallentamiseen int QuantProduced = 0; // Muuttuja tuotetun määrän tallentamiseen int NumberOfRows = 0; // rivien lukumäärä, jossa on nolla.. bool ProdRunning = false; // Muuttuja, joka ilmaisee, onko käynnistys- ja pysäytyspainikkeet aktivoitu int limits = new int [6]; // formatize array int CustomerID; // Muuttuja asiakastunnuksen julkisen lomakkeen tallentamiseen Form1 () {InitializeComponent (); load_table (); // call load_table}

void load_table ()

{MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}

yksityinen mitätön SetRowOrder ()

{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Hänen kanavansa on kolonnerin data dataGridView1. Columns ["UID"]. DisplayIndex = 2; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["weight"]. DisplayIndex = 3; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["orderID"]. DisplayIndex = 5; // Hänen kan rækkefølgen af kolonner ændres}

private void GetData_Click (objektin lähettäjä, EventArgs e) // lukee tietokantataulukon ja tilaukset aikaleiman mukaan

{load_table (); }

private void btnRefreshUID_Click (objektin lähettäjä, EventArgs e) //

{string timeStr = "SELECT * FROM patedb.patelog ORDER BY UID;"; MySqlCommand -komento = uusi MySqlCommand (timeStr, yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}

private void btnRefreshValue_Click (objektin lähettäjä, EventArgs e)

{string weightSort = "SELECT * FROM patedb.patelog ORDER BY CAST (paino ALKUPERÄISEKSI);"; MySqlCommand -komento = uusi MySqlCommand (weightSort, yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}

private void ChkNullBtn_Click (objektin lähettäjä, EventArgs e)

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

yksityinen mitätön CheckTableForNull ()

{// Tarkista/aseta ajastimen väli vähintään 100 ms int i; int. TryParse (textTimer1. Text, out i); jos (i <100) {timer1. Stop (); i = 100; ajastin 1. väli = i; MessageBox. Show ("Vähimmäisarvo i 100mS"); ajastin 1. Käynnistä (); } else {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Tarkista, onko taulukossa tyhjiä rivejä, ja palauttaa rivien määrän muuttujassa: NumberOfRows merkkijono weightStr = ""; string chkNull = "SELECT COUNT (*) FROM patedb.patelog WHERE rangeNR ON NULL ORDER pateyd LIMIT 1;"; MySqlCommand -komento = uusi MySqlCommand (chkNull, yhteys); kokeile {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); Sulje (); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); } lopuksi {if (NumberOfRows! = 0) {try {// Valitsee pienimmän pateID -numeron, jossa alueNr on NULL -merkkijono readID = "SELECT pateID FROM patedb.patelog WHERE rangeNR ON NULL ORDER BET pateid ASC LIMIT 1;"; MySqlCommand cmdID = uusi MySqlCommand (readID, yhteys); {connection. Open (); Rivinumero = (int) cmdID. ExecuteScalar (); //kokonaisluku!! Sulje (); } listPateID. Text = Rivinumero. ToString (); // lukee valitun PateID -numeron // Valitsee valitun rownumber -merkkijonon rivin = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + rivi; MySqlCommand cmdweight = uusi MySqlCommand (lukupaino, yhteys); {connection. Open (); weightStr = (merkkijono) cmdweight. ExecuteScalar (); // Jono !! Sulje (); } paino = int. Parse (weightStr); // muuntaa int txtWeight. Text = paino. ToString (); // tulosta int RangeNumber = 0; if (paino> = rajat [0] && paino = rajat [2] && paino = rajat [4] && paino <= rajat [5]) {AlueNumero = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); } QuantProduced = QuantProduced + 1; }}} private void btnStart_Click (objektin lähettäjä, EventArgs e) {if (ProdRunning == false) {int valtest; try {CustomerID = int. Parse (txtCustomerNr. Text); // read customerID} catch {MessageBox. Show ("Syötä tuotantotiedot ja paina käynnistyspainiketta."); }

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

MySqlCommand cmdtestcustomer = uusi MySqlCommand (testi, yhteys); {connection. Open (); valtest = Muunna. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // palauttaa 0, jos asiakasta ei ole yhteys. Close (); } if (valtest == 1) // jos asiakas on tietokannassa - aloita tuotanto {try {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = tosi; ajastin1. Käynnistä (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Poikkeus esim.) {MessageBox. Show ("Syötä tuotantotiedot ja paina käynnistyspainiketta."); }} else MessageBox. Show ("Asiakas ei ole tietokannassa, yritä uudelleen"); } // Lukurajat (); }

private void ReadLimits ()

{// Lukee rajat taulukosta, alue 1–3 int counter = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = uusi MySqlCommand (readmin, yhteys); {connection. Open (); limits [laskuri] = (int) cmdmin. ExecuteScalar (); laskuri = laskuri + 1; Sulje (); } // MessageBox. Show (counter. ToString ()); merkkijono readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = uusi MySqlCommand (readmax, yhteys); {connection. Open (); limits [laskuri] = (int) cmdmax. ExecuteScalar (); laskuri = laskuri + 1; Sulje (); }} // silmukan loppu}

yksityinen mitätön UpdateLog ()

{// UPDATE rangeNR & orderID string Range = RangeNumber. ToString (); merkkijono Järjestys = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+Rivinumero; MySqlCommand updatecmd = uusi MySqlCommand (päivitys, yhteys); kokeile {connection. Open (); updatecmd. ExecuteNonQuery (); Sulje (); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}

private void btnStop_Click (objektin lähettäjä, EventArgs e)

{if (ProdRunning == true) {timer1. Stop (); ProdRunning = epätosi; UpdateOrderTable (); } else {MessageBox. Show ("Tuotantoa ei ole vielä aloitettu. Anna tiedot ja paina käynnistyspainiketta"); }}

private void 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 = new MySqlCommand (insert, connection); kokeile {connection. Open (); insertcmd. ExecuteNonQuery (); Sulje (); QuantProduced = 0; } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}

private void timer1_Tick (objektin lähettäjä, EventArgs e)

{CheckTableForNull (); load_table (); }

private void btnShowOrderTable_Click (objektin lähettäjä, EventArgs e)

{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }} else {MessageBox. Show ("Paina stop to wiev orderTable"); }}

private void btnShowOrderDetails_Click (objektin lähettäjä, 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 -komento = uusi MySqlCommand (testi, yhteys); kokeile {connection. Open (); MySqlDataAdapter -sovitin = uusi MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); } yhteys. Sulje (); } else {MessageBox. Show ("Paina stop -painiketta nähdäksesi tilaustiedot"); }}

private void btnShowCustomerDetails_Click (objektin lähettäjä, 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. clientID WHERE patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +" ""); MySqlCommand -komento = uusi MySqlCommand (testi, yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }} else {MessageBox. Show ("Paina stop -näppäintä saadaksesi asiakastiedot"); }}}

}

Suositeltava: