Tartalomjegyzék:

EAL-Industri4.0-RFID adatmintavételezési adatbázis: 10 lépés (képekkel)
EAL-Industri4.0-RFID adatmintavételezési adatbázis: 10 lépés (képekkel)

Videó: EAL-Industri4.0-RFID adatmintavételezési adatbázis: 10 lépés (képekkel)

Videó: EAL-Industri4.0-RFID adatmintavételezési adatbázis: 10 lépés (képekkel)
Videó: Sudahkah anda bersedia untuk menuju era Revolusi Industri 4.0?? 2024, November
Anonim
EAL-Industri4.0-RFID adatmintavételezési adatbázis
EAL-Industri4.0-RFID adatmintavételezési adatbázis

Dette projekt omhandler opsamling af vægtdata, registrationring af identiteter vha. RFID, nyomasztó adatok i en MySQL adatbázis vha. node-RED, samt fremvisning og behandling af de opsamlede data i et C# program i form af en Windows Form Application. A Forestiller és a Følgende:

Vi har en produktionslinje som producerer leverpostej i 200g foliebakker. Alle færdigbagte leverpostejer udstyres efter afkø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) for entydig identifikation 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 specific krav færdigvægten, bruges UID tagget til at knytte hver enkelt leverpostej til en lar lag, leverpostejer til én specifik kunde. Kunderne er supermarkedskæder:

1. Irma. Vægten på Irmas luksus leverpostej skal holde sig inden +/- 5%, legalább 190g és maximum 210g.

2. Brugsen. Vægten på Brugsens leverpostej skal holde sig inden +/- 10%, minimum 180g és maximum 220g.

3. Aldi. Vægten på Aldis kedvezményes leverpostej skal holde sig inden +/- 15%, legalább 170 g és maximum 230 g.

Der er således følgende sorteringer:

Tartomány0: tartományon kívül

Tartomány1: minimum 190g/maximum210g

Tartomány2: minimum 180 g/maximum 220 g

Tartomány3: minimum 170g/maximum230g

1. lépés: Af adatok ellenõrzése a Vægt Samt regisztráló Af UID számára

Af adatok ellenőrzése az U UID regisztrálásához
Af adatok ellenőrzése az U UID regisztrálásához

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

Legjobb opstilling er anvendt:

1 stk potmeter 25k lineært. Yder-benene er tilsluttet hhv. GND og +5V, midterbenet er tilsluttet AN0

RFID-RC522 az Arduino deszkák SPI portja a következőképpen:

SDA -> 53. tű

SCK -> pin52

MOSI -> pin51

MISO-> pin50

IRQ -> NC

GND -> GND

RST -> pin5

3.3V -> 3.3V

De opsamlede adatok, hhv. UID és felismerés, küldés a soros porthoz, és komma-külön szöveges szöveg, amely a csomópont-Red som står for den efterfølgende præsentation på et műszerfal és az adatbázisban található.

2. lépés: Arduino program

Az Arduino programozhatja a tintát a könyvtári SPI.h -hez és az MFRC522.h -hoz az RFID -hez. Elindítom a program inicializáló változóit. Der laves en instans af MFRC522. I Setup blokken initialiseres den serielle tiltás, SPI porten og MFRC522. Derefter szkennelés és RFID -címkék után. For ikke at sende det samme UID afsted flere gange efter hinanden, er der lavet en stump kode som tjekker for dette. A szkenneléshez és az UID -címkéhez a nyUID betöltheti az UID -t. Hvis array nyUID er forskellig from oldUID er der tale om et now UID som kan sendes på den serielle port. Hvis nyUID og oldUID er ens, er derlele om samme UID tag and UID'et skal ignore. Hvis der er tale om et now UID, UID'et på den serielle port sammen med en en læst værdi fra den serielle port. Analóg værdi skaleres til området 150-250. Az adatok som en komma-separeret tekststreng. Nézze meg az oldUID = nyUID, a kódokat és a kódokat, majd az RFID -címkéket. Funktionen returnerer true hvis array'ne er ens, og false hvis array'ne er forskellige.

#befoglalni

#include // Ez a program RDIF-RC522 olvasó/író tábla segítségével ellenőrzi az RFID kártyákat. // UID olvasásra, analóg pin olvasásra. A 0-1023 analóg érték 150-250-re van méretezve. // Az UID és az analóg érték vesszővel elválasztott szövegként kerül elküldésre a soros porton 9600, N, 8, 1. használatával. jelen, mielőtt ugyanaz az UID újra elküldhető. // Ezt a függvényt a kódban implementálják tömbök összehasonlításával: oldUID nyUID a array_cmp függvényben (oldUID , nyUID )

constexpr uint8_t RST_PIN = 5;

constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int Érték = 0; Karakterlánc StringValue = "0000"; bájt oldUID [4] = {}; bájt nyUID [4] = {};

MFRC522 mfrc522 (SS_PIN, RST_PIN); // Hozzon létre MFRC522 példányt.

üres beállítás ()

{Serial.begin (9600); // Soros kommunikáció kezdeményezése SPI.begin (); // SPI busz kezdeményezése mfrc522. PCD_Init (); // Az MFRC522 kezdeményezése}

üres hurok ()

{// Keressen új kártyákat, ha (! Mfrc522. PICC_IsNewCardPresent ()) {return; } // Válassza ki az egyik kártyát, ha (! Mfrc522. PICC_ReadCardSerial ()) {return; } // a nyUID betöltése UID -címkével a következőhöz (byte i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // if oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// UID -címke küldése a soros portra (bájt i = 0; i 1000) {Érték = 1000; } Érték = (Érték / 10) + 150; // skálázott analóg érték küldése Serial.print (Value); // új sor küldése Serial.println (); // oldUID = nyUID beállítása (byte z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // várjon 1 másodperc késleltetés (1000); }

// 2 tömb összehasonlítása …

logikai tömb_cmp (bájt a , bájt b ) {bool teszt = igaz; // tesztelje, hogy minden elem azonos. ha csak az egyik nem, akkor hamisat adjon vissza (bájt n = 0; n <4; n ++) {if (a [n]! = b [n]) teszt = hamis; // ha a bájt nem egyenlő, teszt = hamis} if (teszt == igaz) visszatér igaz; else hamis; }

3. lépés: Node-RED, Lagring Af Data I adatbázis

Node-RED, Lagring Af Data I adatbázis
Node-RED, Lagring Af Data I adatbázis
Node-RED, Lagring Af Data I adatbázis
Node-RED, Lagring Af Data I adatbázis

Folyamatos áramlás a vörös-csomópontban:

A COM4 az adott sorozatban tiltja az adatmódokat az Arduino panelről. Funkció "Split and Get value" és "Split and Get UID" felosztó szövegek, amelyek kompatibilisek és visszatérnek, és megkapják az UID -t. Vægten bruges til fremvisning på dashboardet et linechart og en scale. UID fremvises és textfelt. Funktionen test_sound advarer verbalt med sætningen "Out of range", hvis vægten er 170g alatt vagy 230g felett, dvs i range 0.

Osztás és érték:

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

temp = {hasznos teher: (output [1])}}; visszatérési hőmérséklet;

Osztás és UID megszerzése:

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

temp = {hasznos teher: output [0]}; visszatérési hőmérséklet;

teszt_hang:

var szám = parseInt (msg.payload);

if (szám> 230 || szám <170) {newMsg = {hasznos terhelés: "Tartományon kívül"}; return newMsg; } else {newMsg = {payload: ""}; return newMsg; }

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

var output = msg.payload.split (","); // az msg.payload vesszővel tömbbe osztása

UIDTag = kimenet [0]; // első rész az első pozícióba [0] ValueTag = output [1]; // második rész a második pozícióba [1]

var m = {

topic: "INSERT INTO patedb.patelog (időbélyeg, UID, súly) VALUES ('"+new Date (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; return m;

patelog er en A MySQL adatbázis tiltja a som er sat op med følgende paramétert:

Házigazda: localhost

Port: 3306

Felhasználó: root

Adatbázis: patedb

4. lépés: Adatbázis-tervezés

Adatbázis-tervezés
Adatbázis-tervezés

Databasen patedb indeholder 4 tabeller

patelog er dataopsamlingstabellen, tárolja az adatokat a node-RED og C# programmet

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

testreszabható er et kunderegister

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

5. lépés: Patelog

Patelog
Patelog

Tabellen patelog indeholder folgende 6 kolonner:

pateID (int) elsődleges kulcs és inkrementeres automatisk.

Időbélyeg, UID és a tip er varchar (med forskellig max længde)

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

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

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

6. lépés: Rendelhető

Rendelhető
Rendelhető

rendelhető indholder 5 kolonner:

orderID (int) er det aktuale ordrenummer

orderQuant (mediumint) er ordens pålydende antal

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

comment (tinytext) er en eventuel kommentar til ordren.

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

7. lépés: Testreszabható

Testreszabható
Testreszabható

customertable indeholder 6 kolonner:

customerID (int) er elsődleges kulcs és auto inc.

név, cím, telefon, e -mail (varchar) med forskellig max længde

tartományNr (int)

8. lépés: Hatótávolság

Hatótávolság
Hatótávolság

rangetable indeholder 3 kolonner:

rangeNr (int) er primer key og auto inc.

rangeMin (int)

rangeMax (int)

9. lépés: C# program

C# Program
C# Program

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

Kundenummer, ordrenummer, ordreantal og en eventuel kommentar indtastes i C# programmet (i praxis overføres det digitalt fra virksomhedens ordresystem. Produktionen startes nu ved tryk på 'start'- knappen. Når en leverpostej er færdigproduceret og lågeter den monte, på et transportbånd) Samhørende værdier af UID og den aktuelle vægt sendes serielt till node-RED, som viser de opsamlede data på 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 et timerinterval underøger 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 produyt, afsluttes ordren ved tryk på”stop”- knappen. Når ordren afsluttes, tilføjes en række til patedb.ordertable med de aktuelle ordredata. Ha meg szeretné rendelni az afsluttetet, akkor az opsamlede adatokat és a patelog tabellen fremvises ved at try try på de forskellige knapper i gruppen Update DataGridview frissíti. ordertable kan også vises, og der kan søges ordredata på individueller UID'er eller kundedata på individuelle ordrer.

a System használatával; a System. Collections. Generic használatával; a System. ComponentModel használatával; a System. Data használatával; a System. Drawing használatával; a System. Linq használatával; a System. Text használatával; a System. Threading. Tasks használatával; a System. Windows. Forms használatával; a MySql. Data. MySqlClient használatával;

névtér show_data_from_database

{nyilvános részosztály Form1: Form {MySqlConnection connection = new MySqlConnection ("datasource = localhost; username = root; password = ''"); int Sor szám = 0; // Változó a pateID érték tárolására int RangeNumber = 0; // Változó a rangenumber tárolására int weight = 0; // Változó a súly tárolására int OrderNr = 0; // Változó a OrderNR tárolásához int QuantProduced = 0; // Változó a termelt mennyiség tárolására int NumberOfRows = 0; // nullákkal rendelkező sorok száma.. bool ProdRunning = false; // Változó, amely jelzi, hogy a start & stop gomb aktiválva van -e int limits = new int [6]; // tömb inicializálása int CustomerID; // Változó az ügyfél -azonosító nyilvános Form1 tárolására () {InitializeComponent (); load_table (); // call_table} hívás

void load_table ()

{MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.patelog ORDER BEST timestamp DESC;", kapcsolat); try {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = parancs; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Frissítés (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

private void SetRowOrder ()

{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Her kan rækkefølgen af kolonner ændres 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; // Her kan rækkefølgen af kolonner ændres}

private void GetData_Click (objektumküldő, EventArgs e) // Olvassa el az adatbázistáblát és a rendeléseket időbélyeg szerint

{load_table (); }

private void btnRefreshUID_Click (objektumküldő, EventArgs e) //

{string timeStr = "SELECT * FROM patedb.patelog ORDER BY UID;"; MySqlCommand parancs = new MySqlCommand (timeStr, kapcsolat); try {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = parancs; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Frissítés (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

private void btnRefreshValue_Click (objektumküldő, EventArgs e)

{string weightSort = "SELECT * FROM patedb.patelog ORDER BY CAST (súly ALKALMAZOTT INTEGER);"; MySqlCommand parancs = new MySqlCommand (súlySort, kapcsolat); try {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = parancs; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Frissítés (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

private void ChkNullBtn_Click (objektumküldő, EventArgs e)

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

private void CheckTableForNull ()

{// Minimális időzítés ellenőrzése/beállítása 100 ms int i; int. TryParse (textTimer1. Text, out i); if (i <100) {timer1. Stop (); i = 100; időzítő1. Időköz = i; MessageBox. Show ("Minimális érték i 100mS"); időzítő1. Start (); } else {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Ellenőrizze, hogy vannak -e null értékű sorok a táblázatban, és visszaadja a sorok számát a változóban: NumberOfRows string weightStr = ""; string chkNull = "SELECT COUNT (*) FROM patedb.patelog WHERE rangeNR NULL ORDER BET pateid LIMIT 1;"; MySqlCommand parancs = new MySqlCommand (chkNull, connection); próbáld meg {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); connection. Close (); } catch (Exception ex) {MessageBox. Show (ex. Message); } végül {if (NumberOfRows! = 0) {try {// Kiválasztja a legalacsonyabb pateID számot, ahol a tartományNr NULL karakterlánc readID = "SELECT pateID FROM patedb.patelog WHERE rangeNR NULL ORDER BY pateid ASC LIMIT 1;"; MySqlCommand cmdID = új MySqlCommand (olvasási azonosító, kapcsolat); {connection. Open (); Sor szám = (int) cmdID. ExecuteScalar (); //egész szám!! connection. Close (); } listPateID. Text = Sor sorszáma. ToString (); // a kiválasztott PateID szám kiolvasása // Súly kiválasztása a kiválasztott rownumber karaktersorból = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + sor; MySqlCommand cmdweight = új MySqlCommand (olvasási súly, kapcsolat); {connection. Open (); weightStr = (karakterlánc) cmdweight. ExecuteScalar (); //Húr !! connection. Close (); } súly = int. Parse (weightStr); // konvertálás int txtWeight. Text = súly. ToString (); // print int RangeNumber = 0; if (súly> = korlátok [0] && súly = korlátok [2] && súly = korlátok [4] && súly <= korlátok [5]) {Tartományszám = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } catch (Exception ex) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} private void btnStart_Click (objektumküldő, EventArgs e) {if (ProdRunning == false) {int valtest; try {CustomerID = int. Parse (txtCustomerNr. Text); // olvassa a customerID} catch {MessageBox. Show ("Adja meg a termelési adatokat, és nyomja meg a" start "gombot."); }

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

MySqlCommand cmdtestcustomer = új MySqlCommand (teszt, kapcsolat); {connection. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // 0 -t ad vissza, ha az ügyfél nem létezik connection. Close (); } if (valtest == 1) // ha az ügyfél létezik az adatbázisban - indítsa el a termelést {try {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = igaz; időzítő1. Start (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Exception ex) {MessageBox. Show ("Adja meg a termelési adatokat, és nyomja meg a" start "gombot."); }} else MessageBox. Show ("Az ügyfél nincs az adatbázisban, próbálja újra"); } // ReadLimits (); }

private void ReadLimits ()

{// Korlátozások beolvasása a tartománytáblából, 1–3 tartomány int számláló = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = új MySqlCommand (readmin, kapcsolat); {connection. Open (); korlátok [számláló] = (int) cmdmin. ExecuteScalar (); számláló = számláló + 1; connection. Close (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = új MySqlCommand (readmax, kapcsolat); {connection. Open (); korlátok [számláló] = (int) cmdmax. ExecuteScalar (); számláló = számláló + 1; connection. Close (); }} // end for loop}

private void UpdateLog ()

{// UPDATE rangeNR & orderID string Range = RangeNumber. ToString (); string Sorrend = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+RowNumber; MySqlCommand updatecmd = új MySqlCommand (frissítés, kapcsolat); próbáld meg {connection. Open (); updatecmd. ExecuteNonQuery (); connection. Close (); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

private void btnStop_Click (objektumküldő, EventArgs e)

{if (ProdRunning == true) {timer1. Stop (); ProdRunning = hamis; UpdateOrderTable (); } else {MessageBox. Show ("Még nem kezdődött el a gyártás. Adja meg az adatokat, és nyomja meg a" start "gombot"); }}

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 (beillesztés, csatlakozás); próbáld meg {connection. Open (); insertcmd. ExecuteNonQuery (); connection. Close (); QuantProduced = 0; } catch (Exception ex) {MessageBox. Show (ex. Message); }}

private void timer1_Tick (objektumküldő, EventArgs e)

{CheckTableForNull (); load_table (); }

private void btnShowOrderTable_Click (objektumküldő, EventArgs e)

{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", kapcsolat); try {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = parancs; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Frissítés (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Nyomja meg a stop gombot a rendelési táblázat felkutatásához"); }}

private void btnShowOrderDetails_Click (objektumküldő, 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 parancs = new MySqlCommand (teszt, kapcsolat); próbáld meg {connection. Open (); MySqlDataAdapter adapter = új MySqlDataAdapter (); adapter. SelectCommand = parancs; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Frissítés (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); } connection. Close (); } else {MessageBox. Show ("Nyomja meg a stop gombot a rendelés részleteinek megtekintéséhez"); }}

private void btnShowCustomerDetails_Click (objektumküldő, 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 parancs = new MySqlCommand (teszt, kapcsolat); try {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = parancs; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Frissítés (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Nyomja meg a stop gombot az ügyfél adatainak megtekintéséhez"); }}}

}

Ajánlott: