İçindekiler:

EAL-Industri4.0-RFID Dataopsamling Til Veritabanı: 10 Adım (Resimlerle)
EAL-Industri4.0-RFID Dataopsamling Til Veritabanı: 10 Adım (Resimlerle)

Video: EAL-Industri4.0-RFID Dataopsamling Til Veritabanı: 10 Adım (Resimlerle)

Video: EAL-Industri4.0-RFID Dataopsamling Til Veritabanı: 10 Adım (Resimlerle)
Video: In line with Industry 4.0 using integrated Tool Data Management Solutions 2024, Temmuz
Anonim
EAL-Industri4.0-RFID Dataopsamling Til Veritabanı
EAL-Industri4.0-RFID Dataopsamling Til Veritabanı

Dette projekt omhandler opsamling af vægtdata, identiteter vha kaydı. RFID, MySQL veritabanı vha'da veri gecikmesi. node-RED, Windows Form Uygulamasında veri i ve C# programlarının işlenmesi ve işlenmesi için samt fremvisning. Forestiller os følgende:

Üretim ve üretim için bir üretici kaldıraç i 200g foliebakker. Enkelt enkelt'te enkelt tanımlaması için tüm etiketler ve RFID etiketleri, plastik/etiketleme, som indeholder ve unikt ID (UID = Benzersiz Tanımlayıcı, 32 bit kod, 8 onaltılık karakter oluşturucu) sonrasında. Daha fazla bilgi için bkz. kaldıraç til én specifik kunde. Kunderne er supermarkedskæder:

1. Irma. Irmas luksus luksus skal holde sig inden +/- 5% için, altså minimum 190g ve maksimum 210g.

2. Brugsen. Vægten på Brugsens, +/- %10, altså minimum 180g ve maksimum 220g için kaldıraç işareti.

3. Aldi. % +/- %15, altså minimum 170g ve maksimum 230g için Aldis indirimli kaldıraç skal holde inden.

Der er således følgende sıralayıcı:

Range0: aralık dışında

Aralık1: minimum 190g/maksimum210g

Range2: minimum 180g/maksimum220g

Range3: minimum 170g/maksimum230g

Adım 1: Vægt Samt için Af UID Kaydı için Opsamling Af Verileri

Vægt Samt için Opsamling Af Verileri, Af UID Kaydı
Vægt Samt için Opsamling Af Verileri, Af UID Kaydı

Arduino MEGA2560 med en RFID-RC522 okuyucu/yazıcı ve RFID etiketlerinin kaydedilmesi için vægt için verilerin opsamling'i. Da vi ikke har nogen vægt, simulerer vægten med et potmeter tilsluttet en analog indgang på Arduinoen için veriler.

Følgende opstilling ve anvendt:

1 stk potmetre 25k lineært. Yder-benene er tilsluttet hhv. GND ve +5V, ara bağlantı er tilsluttet AN0

RFID-RC522 Arduino boardet'leri için SPI bağlantı noktası için uygun:

SDA -> pim 53

SCK -> pin52

MOSI -> pin51

MISO->pin50

IRQ ->NC

GND ->GND

RST -> pin5

3.3V -> 3.3V

De opsamlede verileri, hhv için. UID ve güncellemeler, veri tabanını kontrol etmek ve kontrol etmek için veri tabanını kontrol etmek için bir bağlantı noktası gönderir.

Adım 2: Arduino programı

I Arduino, kunne bruge RFID læseren'de biblioteker SPI.h ve MFRC522.h'ye ek olarak programladım. Değişkenin program başlatıcılarını başlatıyorum. MFRC522'nin anlarında der laves. I MFRC522 ve SPI portları için blokken başlatıcılar için kurulum. Derefter, RFID etiketlerinden sonra tarar. ikke için gönder det samme UID afsted flere gange efter hinanden, dette için er der lavet en güdük kode som tjekker. Scannet ve UID etiketinin dışında, sıralı nyUID ve netop læste UID'yi yükler. Hvis dizisi nyUID er forskellig için eskiUID er der der derlenmiş hikaye ve nyt UID bir dizi bağlantı noktası gönderir. Hvis nyUID ve eskiUID erler, samme UID etiketi ve UID'et skal görmezden gelinen hikayeler. Hvis der er er om et nyt UID, UID'et på den serielle port sammen med en læst værdi fra den serielle port gönderir. Området 150-250'ye kadar olan analoglar. Veri bazı en komma-separeret tekststreng gönderir. Som det sidste sættes oldUID = nyUID, læse et nyt RFID etiketinde koden klart'ta således.. Den sidste funktion ve programlayıcı den funktion bazı sammenligner 2 dizi. Funktionen geri döndürücü, gerçek veri dizisi'ne erler, ve yanlış veri dizisi'ne er forskellige.

#Dahil etmek

#include // Bu program, RDIF-RC522 okuyucu/yazıcı kartını kullanarak RFID kartlarını tarar. // UID okunur, bir analog pin okunur. 0-1023 analog değeri 150-250'ye ölçeklenir. // UID ve analog değer, 9600, N, 8, 1 kullanılarak seri port üzerinde virgülle ayrılmış metin olarak gönderilir. // Her UID'nin arka arkaya yalnızca bir kez gönderilmesine özen gösterilmiştir, // yeni bir UID olması gerekir. aynı UID tekrar gönderilmeden önce mevcut. // Bu işlev, dizileri karşılaştırarak kodda uygulanır: dizi_cmp(oldUID, nyUID) işlevinde oldUIDnyUID

constexpr uint8_t RST_PIN = 5;

constexpr uint8_t SS_PIN = 53; int sensörPin = A0; int Değer = 0; String StringValue = "0000"; bayt oldUID[4] = {}; bayt nyUID[4] = {};

MFRC522 mfrc522(SS_PIN, RST_PIN); // MFRC522 örneği oluştur.

geçersiz kurulum()

{ Serial.başlangıç(9600); // Seri iletişim başlat SPI.begin(); // SPI veri yolunu başlat mfrc522. PCD_Init(); // MFRC522'yi başlatın }

boşluk döngüsü()

{ // Yeni kartlar arayın if (! mfrc522. PICC_IsNewCardPresent()) { return; } // Kartlardan birini seçin if (! mfrc522. PICC_ReadCardSerial()) { return; } // nyUID'yi UID etiketi ile yükle (byte i = 0; i < mfrc522.uid.size; i++) { nyUID = mfrc522.uid.uidByte; } // if oldUIDnyUID if (!array_cmp(oldUID, nyUID)) { // (byte i = 0; i 1000) için seri bağlantı noktasına UID etiketi gönder { Value = 1000; } Değer = (Değer / 10) + 150; // ölçekli analog değer gönder Serial.print(Value); // yeni satır gönder Serial.println(); // (byte z = 0; z < 4; z++) için oldUID = nyUID ayarla oldUID[z] = nyUID[z]; } // 1 saniye bekle gecikme(1000); }

// 2 diziyi karşılaştır…

boolean array_cmp(bayt a, bayt b) { bool testi = doğru; //her elemanın aynı olup olmadığını test edin. yalnızca biri değilse, false döndür for (byte n = 0; n < 4; n++) { if (a[n] != b[n]) test = false; // eğer bayt eşit değilse, test = false } if (test == true) return true; aksi takdirde false döndürür; }

Adı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ı

Følgende çiçek er lavet i düğüm-KIRMIZI:

Arduino boardet için COM4 er den serielle veri modtages forbindelse. Funktionerne "Split and Get value" ve "Split and Get UID" ayırıcı teksstrengen ved kommaet ve geri dönüşü hhv vægten ve UID. Vægten bruges, kontrol paneli ve çizgi çizelgeleri arasında güncellendi. UID fremvises i et tekstfelt. Funktionen test_sound advarer sözel med sætningen "Menzil dışı", hvis vægten er 170g'nin altında veya 230g'nin üzerinde, dvs i aralığı 0.

Böl ve Değer Al:

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

temp = {yük:(çıktı[1])}; dönüş sıcaklığı;

Böl ve UID Al:

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

temp = {yük:çıktı[0]}; dönüş sıcaklığı;

test_sound:

var sayı = parseInt(msg.payload);

if (sayı >230 || sayı<170) { newMsg = {yük:"Aralık dışı"}; yeniMsg'yi döndür; } else { newMsg = {yük:""}; yeniMsg'yi döndür; }

Funktionen Bölünmüş dize ", " indsætter ve zaman damgası, UID ve vægten i en veritabanı patedb.patelog.

var çıktı = msg.payload.split(", "); // msg.payload'ı virgülle diziye böl

UIDTag = çıktı[0]; //ilk pozisyona ilk parça [0] ValueTag = çıkış[1]; //ikinci kısım ikinci pozisyona [1]

var m = {

konu: "INSERT INTO patedb.patelog (zaman damgası, UID, ağırlık) DEĞERLER('"+new Date().toISOString()+"', '"+ UIDTag +"', '"+ValueTag+"');" }; dönüş m;

patelog er tr MySQL veritabanı forbindelse som er sat op med følgende parametresi:

Ev sahibi: localhost

Liman: 3306

kullanıcı: kök

Veritabanı: patedb

Adım 4: Veritabanı tasarımı

Veri tabanı tasarımı
Veri tabanı tasarımı

Databasen patedb indeholder 4 tabeller

patelog er dataopsamlingstabellen, tilskrives data af node-RED ve C# programt

ordertable er en tabel bazı bağımsız veriler om de genemførte ordrer, tilskrives C# program verileri

müşteri tablosu er et kunderregister

rangetable er en tabel som indeholder grænseværdierne için de i C# programt benyttede aralıkları.

Adım 5: Patelog

patelog
patelog

Tabellen patelog indeholder folgende 6 kolonner:

pateID (int) ve birincil anahtar ve inkrementeres automatisk.

Zaman damgası, UID & vægt er af typen varchar (med forskellig max længde)

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

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

Düğüm-KIRMIZI, kolonner aralığına göre sıralama Sıra No. rangeNr og orderID sıyırıcı NULL værdier, det bruges i C# program til at detektere de rækker som skal tilskrives værdier for rangeNr og orderID

Adım 6: Sipariş edilebilir

sipariş edilebilir
sipariş edilebilir

sipariş edilebilir indeholder 5 kolonner:

orderID (int) er det aktuelle ordrenummer

orderQuant (orta) er ordens pålydende antal

quantProduced (orta) ve antal der kiralama faktisk er prodüktör på ordren. (Tælles af C# programı)

yorum (tinytext) en sonunda kommentar til ordren.

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

Adım 7: Müşteri Tablosu

müşteri tablosu
müşteri tablosu

müşteri tablosu indeholder 6 kolonner:

müşteri kimliği (int) veya birincil anahtar ve otomatik inc.

isim, adres, telefon, e-posta (varchar) med forskellig max længde

aralıkNr (int)

Adım 8: Menzilli

menzilli
menzilli

rangetable indeholder 3 kolonner:

rangeNr (int) ve birincil anahtar ve otomatik inc.

aralıkMin (int)

aralıkMax (int)

Adım 9: C# Programı

C# Programı
C# Programı

Üreticiler en ordre kaldıraç, er prosedürn følgende:

Kundenummer, ordrenummer, ordreantal og en eventuel kommentar indtastes i C# programt (virksomhedens ordresystem'i temel alır. På ve transportbånd) Samhørende værdier af UID ve aktuelle vægt, node-RED, som viser de opsamlede veri panosu 'et. tidspunkt ikke tilskrives aralığıNr til tilskrives ve orderID vil de værdien NULL var.

Orta ve zaman aralığı altında C# programı patedb.patelogtabellen için 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 ve det tilføjes sammen med det aktuelle orderID. Når en ordre er yapımcı, afsluttes ordren ved tryk på”stop”- knappen. Når ordren afsluttes, tilføjes en række til patedb.ordertable med de aktuelle ordredata. Verileri kontrol etme, veri toplama ve güncelleme tabloları, daha fazla bilgi için trykke på de forskellige knapper ve gruppen DataGridview'de güncellendi. Bireysel siparişler için özel siparişler, bireysel siparişler için UID'ler ve bireysel siparişler için sipariş verilebilir.

System'i kullanma;System. Collections. Generic'i kullanma; System. ComponentModel kullanarak; System. Data kullanarak; System. Drawing'i kullanarak; System. Linq kullanarak; System. Text'i kullanarak; System. Threading. Tasks kullanarak; System. Windows. Forms'u kullanarak; MySql. Data. MySqlClient'i kullanarak;

ad alanı show_data_from_database

{ genel kısmi sınıf Form1: Form { MySqlConnection bağlantısı = new MySqlConnection("datasource=localhost; kullanıcı adı=kök; parola=''"); int SatırSayısı = 0; // pateID değerini saklamak için değişken int RangeNumber = 0; //aralık numarası depolamak için değişken int ağırlık =0; // Ağırlığı saklamak için değişken int OrderNr = 0; // OrderNR int QuantProduced = 0; // Üretilen miktarı depolamak için değişken int NumberOfRows = 0; //sıfırlı satır sayısı.. bool ProdRunning = false; //Başlat ve durdur düğmelerinin etkinleştirilip etkinleştirilmediğini gösteren değişken int sınırlar = yeni int[6];// diziyi başlat int MüşteriKimliği; // müşteri kimliğini depolamak için değişken public Form1() { InitializeComponent(); yük_tablo(); // load_table'ı çağır }

geçersiz load_table()

{ MySqlCommand command = new MySqlCommand("SELECT * FROM patedb.patelog ORDER BY zaman damgası DESC;", bağlantı); deneyin { MySqlDataAdapter bağdaştırıcısı = yeni MySqlDataAdapter(); adaptör. SelectCommand = komut; DataTable dbdataset = new DataTable(); adaptör. Fill(dbdataset); BindingSource bsource = new BindingSource(); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder(); adaptör. Güncelleme(dbdataset); } catch (ex. istisna) { MessageBox. Show(ex. Message); } }

özel geçersiz SetRowOrder()

{ dataGridView1. Columns["pateID"]. DisplayIndex = 0; // Kolonner ændres dataGridView1. Columns["timestamp"]. DisplayIndex = 1; // Kolonner ændres dataGridView1. Columns["UID"]. DisplayIndex = 2; // Kolonner ændres dataGridView1. Columns["ağırlık"]. DisplayIndex = 3; // Kolonner ændres dataGridView1. Columns["rangeNr"]. DisplayIndex = 4; // Kolonner ændres dataGridView1. Columns["orderID"]. DisplayIndex = 5; // Onun kan rækkefølgen af kolonner ændres }

private void GetData_Click(nesne gönderici, EventArgs e) // Zaman damgasına göre veritabanı tablosunu ve siparişleri okur

{ load_table(); }

özel void btnRefreshUID_Click(nesne gönderici, EventArgs e) //

{ string timeStr = "SELECT * FROM patedb.patelog UID TARAFINDAN SİPARİŞ;"; MySqlCommand komutu = new MySqlCommand(timeStr, bağlantı); deneyin { MySqlDataAdapter bağdaştırıcısı = yeni MySqlDataAdapter(); adaptör. SelectCommand = komut; DataTable dbdataset = new DataTable(); adaptör. Fill(dbdataset); BindingSource bsource = new BindingSource(); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder(); adaptör. Güncelleme(dbdataset); } catch (ex. istisna) { MessageBox. Show(ex. Message); } }

özel void btnRefreshValue_Click(nesne gönderici, EventArgs e)

{ string WeightSort = "SELECT * FROM patedb.patelog CAST ORDER BY (IŞARETLİ TAM SAYI OLARAK ağırlık);"; MySqlCommand komutu = new MySqlCommand(weightSort, bağlantı); deneyin { MySqlDataAdapter bağdaştırıcısı = yeni MySqlDataAdapter(); adaptör. SelectCommand = komut; DataTable dbdataset = new DataTable(); adaptör. Fill(dbdataset); BindingSource bsource = new BindingSource(); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder(); adaptör. Güncelleme(dbdataset); } catch (ex. istisna) { MessageBox. Show(ex. Message); } }

özel geçersiz ChkNullBtn_Click(nesne gönderici, EventArgs e)

{ if (ProdRunning) { CheckTableForNull(); yük_tablo(); } }

özel boşluk CheckTableForNull()

{ //Zaman aralığını kontrol et/ayarla minimum 100 ms int i; int. TryParse(textTimer1. Text, çıkış i); if (i <100) { timer1. Stop(); ben = 100; timer1. Interval = ben; MessageBox. Show("Minimum değer i 100mS"); timer1. Start(); } başka { timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString(); //Tabloda boş satır olup olmadığını kontrol edin,:NumberOfRows değişkenindeki satır sayısını döndürür string ağırlıkStr = ""; string chkNull = "rangeNR NULL NEREDE patedb.patelog'dan SAYI SEÇ(*) pateID LIMIT 1'E GÖRE SİPARİŞ;"; MySqlCommand komutu = new MySqlCommand(chkNull, bağlantı); {bağlantıyı deneyin. Open(); NumberOfRows = Convert. ToInt32(command. ExecuteScalar()); bağlantı. Kapat(); } catch (ex. istisna) { MessageBox. Show(ex. Message); } son olarak { if (NumberOfRows != 0) { try { //rangeNr NULL olduğunda en düşük pateID numarasını seçer string readID = "patedb.patelog'dan pateID SEÇİN WHERE rangeNR NULL ORDER BY pateID ASC LIMIT 1;"; MySqlCommand cmdID = new MySqlCommand(readID, bağlantı); { bağlantı. Aç(); RowNumber = (int)cmdID. ExecuteScalar(); //tamsayı!! bağlantı. Kapat(); } listPateID. Text = RowNumber. ToString(); // seçilen PateID numarasını oku // Seçilen satır numarasından ağırlığı seçer string satır = RowNumber. ToString(); string readweight = "patedb.patelog WHERE pateID=" + satırdan ağırlık SEÇİN; MySqlCommand cmdweight = new MySqlCommand(okuma ağırlığı, bağlantı); { bağlantı. Aç(); ağırlıkStr = (string)cmdweight. ExecuteScalar(); //Sicim !! bağlantı. Kapat(); } ağırlık = int. Parse(ağırlıkStr); // int txtWeight. Text'e dönüştür = ağırlık. ToString(); // print int RangeNumber = 0; if (ağırlık>= sınırlar[0] && ağırlık = sınırlar[2] && ağırlık = sınırlar[4] && ağırlık <= sınırlar[5]) { RangeNumber = 3; } } txtRange. Text = RangeNumber. ToString(); UpdateLog(); } catch (ex. istisna) { MessageBox. Show(ex. Message); } QuantProduced = QuantProduced + 1; } } } private void btnStart_Click(nesne gönderici, EventArgs e) { if (ProdRunning == false) { int valtest; deneyin { CustomerID = int. Parse(txtCustomerNr. Text); //müşteri kimliğini oku } catch { MessageBox. Show("Üretim verilerini girin ve 'başlat' düğmesine basın."); }

string test = "patedb.customertable'dan SAYI SEÇ(*) WHERE customerID ="+CustomerID;

MySqlCommand cmdtestcustomer = new MySqlCommand(test, bağlantı); { bağlantı. Aç(); valtest = Convert. ToInt32(cmdtestcustomer. ExecuteScalar()); // müşteri bağlantısı yoksa 0 döndürür. Close(); } if (valtest==1) // veritabanında müşteri varsa - üretimi başlat { try { OrderNr = int. Parse(txtOrderNumber. Text); ProdRunning = doğru; timer1. Start(); textTimer1. Text = timer1. Interval. ToString(); ReadLimits(); } catch (Örn. İstisna) { MessageBox. Show("Üretim verilerini girin ve 'başlat' düğmesine basın."); } } else MessageBox. Show("Müşteri veritabanında değil, tekrar deneyiniz"); } //Limitleri Oku(); }

özel geçersiz ReadLimits()

{ // Aralık tablosundan limitleri okur, aralık 1 ila 3 int sayaç = 0; for (int rangeNr = 1; rangeNr < 4; rangeNr++) { string readmin = "rangeMin FROM patedb.rangetable WHERE rangeNr=" + rangeNr; MySqlCommand cmdmin = new MySqlCommand(readmin, bağlantı); { bağlantı. Aç(); limitler[sayaç] = (int)cmdmin. ExecuteScalar(); sayaç = sayaç + 1; bağlantı. Kapat(); } // MessageBox. Show(counter. ToString()); string readmax = "rangeMax FROM patedb.rangetable WHERE rangeNr=" + rangeNr; MySqlCommand cmdmax = new MySqlCommand(readmax, bağlantı); { bağlantı. Aç(); limitler[sayaç] = (int)cmdmax. ExecuteScalar(); sayaç = sayaç + 1; bağlantı. Kapat(); } } // döngü sonu }

özel boşluk UpdateLog()

{ // UPDATE rangeNR & orderID string Range = RangeNumber. ToString(); string Sıra = OrderNr. ToString(); string update = "UPDATE patedb.patelog SET rangeNr= "+Range+', ' + "orderID= "+OrderNr+" WHERE pateID="+RowNumber; MySqlCommand updatecmd = new MySqlCommand(güncelleme, bağlantı); {bağlantıyı deneyin. Open(); updatecmd. ExecuteNonQuery(); bağlantı. Kapat(); } catch (ex. istisna) { MessageBox. Show(ex. Message); } }

özel void btnStop_Click(nesne gönderici, EventArgs e)

{ if (ProdRunning == true) { timer1. Stop(); ProdRunning = yanlış; UpdateOrderTable(); } else { MessageBox. Show("Henüz üretim başlamadı. Verileri girin ve 'başlat' düğmesine basın"); } }

özel geçersiz UpdateOrderTable()

{ string insert = "INSERT INTO patedb.ordertable (orderID, orderQuant, quantProduced, yorum, müşteri kimliği) DEĞERLER ('" + this.txtOrderNumber. Text + "', '" + this.txtOrderQuant. Text + "', '"+ QuantProduced. ToString()+"', '"+this.txtComment. Text+"', '"+this.txtCustomerNr. Text+"');"; MySqlCommand insertcmd = new MySqlCommand(ekleme, bağlantı); {bağlantıyı deneyin. Open(); insertcmd. ExecuteNonQuery(); bağlantı. Kapat(); QuantProduced = 0; } catch (ex. istisna) { MessageBox. Show(ex. Message); } }

private void timer1_Tick(nesne gönderici, EventArgs e)

{ CheckTableForNull(); yük_tablo(); }

özel void btnShowOrderTable_Click(nesne gönderici, EventArgs e)

{ if (ProdRunning == false) { MySqlCommand command = new MySqlCommand("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", bağlantı); deneyin { MySqlDataAdapter bağdaştırıcısı = yeni MySqlDataAdapter(); adaptör. SelectCommand = komut; DataTable dbdataset = new DataTable(); adaptör. Fill(dbdataset); BindingSource bsource = new BindingSource(); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adaptör. Güncelleme(dbdataset); } catch (ex. istisna) { MessageBox. Show(ex. Message); } } else { MessageBox. Show("Sipariş Tablosunu görüntülemek için durdur tuşuna basın"); } }

özel void btnShowOrderDetails_Click(nesne gönderici, EventArgs e)

{ if (ProdRunning == false) { string test = ("patedb.ordertable.orderID SEÇİN, orderQuant, quantProduced, yorum, patedb.ordertable FROM müşteri kimliği patedb.patelog ON patedb.patelog.orderID= patedb.ordertable.orderID NEREDE patedb.patelog. UID = '" + txtShowOrderDetails. Text + "'"); MySqlCommand komutu = new MySqlCommand(test, bağlantı); {bağlantıyı deneyin. Open(); MySqlDataAdapter bağdaştırıcısı = yeni MySqlDataAdapter(); adaptör. SelectCommand = komut; DataTable dbdataset = new DataTable(); adaptör. Fill(dbdataset); BindingSource bsource = new BindingSource(); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adaptör. Güncelleme(dbdataset); } catch (ex. istisna) { MessageBox. Show(ex. Message); } bağlantı. Kapat(); } else { MessageBox. Show("Sipariş detaylarını görmek için dur tuşuna basın"); } }

özel void btnShowCustomerDetails_Click(nesne gönderici, EventArgs e)

{ if (ProdRunning == false) { string test = ("SEÇ patedb.customertable.customerID, ad, adres, telefon, e-posta, aralıkNr patedb.customertable INNER JOIN patedb.ordertable ON patedb.ordertable.customerID= patedb.customertable. clientID WHERE patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text + "'"); MySqlCommand komutu = new MySqlCommand(test, bağlantı); deneyin { MySqlDataAdapter bağdaştırıcısı = yeni MySqlDataAdapter(); adaptör. SelectCommand = komut; DataTable dbdataset = new DataTable(); adaptör. Fill(dbdataset); BindingSource bsource = new BindingSource(); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adaptör. Güncelleme(dbdataset); } catch (ex. istisna) { MessageBox. Show(ex. Message); } } else { MessageBox. Show("Müşteri detaylarını görmek için dur tuşuna basın"); } } }

}

Önerilen: