RE: ماهي الطريقة الصحيحة والسريعة لجلب بيانات من قاعدة البيانات داخل Private Sub - العتيق - 07-06-24
شكرا لك اخ Taha Okla
لم تكتب اي كلمة الا و كنت مصيبا بها ولكن بالنسبة لي من منطلق محبتي لهذا المنتدى و اعضائه الاكارم الذين لا يؤلون جهدا في مساعدة السائل ومن منطلق اما السائل فلا تنهر
قررت تقديم المساعدة و قدمت الكثير من الطروحات على كل حال اقدم لاي سائل قد يكون لديه نفس هذا الهاجس لربما يساعد
بانسبة للفورم الثاني و هو الرئيسي او فورم تسجيل الدخول نكتب الآتي
PHP كود : Public Class Form2 Private frm1 As Form1
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load frm1 = New Form1() frm1.Hide() ' إخفاء الفورم الأولى عند تحميل الفورم الثانية frm1.LoadNotes() End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click frm1.Show() ' إظهار الفورم الأولى عند الضغط على الزر
End Sub End Class
اما بالنسبة للفورم الذي سيعرض المعلومات الثقيلة او العبوات الثقيلة يصبح بهذا الشكل
PHP كود : Imports System.Data.OleDb Imports System.Threading.Tasks
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'Try ' ' فتح الاتصال بقاعدة البيانات ' conn.Open() ' MessageBox.Show("Connection opened successfully!") 'Catch ex As Exception ' MessageBox.Show("Error: " & ex.Message) 'Finally ' ' التأكد من إغلاق الاتصال حتى في حالة وجود استثناء ' conn.Close() ' MessageBox.Show("Connection closed.") 'End Try
' تشغيل المهام بشكل غير متزامن لتحميل البيانات Me.WindowState = FormWindowState.Maximized 'LoadNotes() End Sub
'Private Async Function LoadAllData() As Task ' Await Task.WhenAll( ' Task.Run(Sub() LoadNotes()), ' Task.Run(Sub() LoadLaundryInfo()), ' Task.Run(Sub() LoadAllCustomers()), ' Task.Run(Sub() LoadSubUser()), ' Task.Run(Sub() LoadCategory()), ' Task.Run(Sub() LoadData()) ' ) 'End Function
Public Sub LoadNotes() Using dp As New OleDbDataAdapter("SELECT ID, notee FROM notess", conn) Dim dt As New DataTable() dp.Fill(dt) CheckedListBox1.DataSource = dt CheckedListBox1.DisplayMember = "notee" CheckedListBox1.ValueMember = "ID" End Using LoadLaundryInfo() End Sub
Private Sub LoadLaundryInfo() Using dp As New OleDbDataAdapter("SELECT Status_vat, Value_VAT, type, Type_VAT FROM landryInfo WHERE ID = 5", conn) Dim ds As New DataSet() dp.Fill(ds) If ds.Tables(0).Rows.Count <> 0 Then statusvat = ds.Tables(0).Rows(0).Item("Status_vat").ToString() valuvat = ds.Tables(0).Rows(0).Item("Value_VAT").ToString() paytype = ds.Tables(0).Rows(0).Item("type").ToString() typevat = ds.Tables(0).Rows(0).Item("Type_VAT").ToString() End If End Using LoadAllCustomers() End Sub
Private Sub LoadAllCustomers() Using Cmmd As New OleDbCommand("SELECT mobilenumber, customername FROM Customers1", conn) Using da As New OleDbDataAdapter(Cmmd) Dim dt As New DataSet() da.Fill(dt) Dim cloumn1 As New AutoCompleteStringCollection() For Each row As DataRow In dt.Tables(0).Rows cloumn1.Add(row("mobilenumber").ToString()) Next TextBox11.AutoCompleteSource = AutoCompleteSource.CustomSource TextBox11.AutoCompleteMode = AutoCompleteMode.SuggestAppend TextBox11.AutoCompleteCustomSource = cloumn1 End Using End Using LoadSubUser() End Sub
Private Sub LoadSubUser() 'Using dp As New OleDbDataAdapter("SELECT Sub_Customer, Tailor, Laundery FROM Sub WHERE ID = 1", conn) ' Dim ds As New DataSet() ' dp.Fill(ds) ' If ds.Tables(0).Rows.Count <> 0 Then ' subscription = ds.Tables(0).Rows(0).Item("Sub_Customer").ToString() ' Tailor = ds.Tables(0).Rows(0).Item("Tailor").ToString() ' Laundery = ds.Tables(0).Rows(0).Item("Laundery").ToString() ' End If 'End Using
Using dp1 As New OleDbDataAdapter("SELECT ID, user_name FROM login", conn) Dim dt As New DataTable() dp1.Fill(dt) ComboBox1.DataSource = dt ComboBox1.DisplayMember = "user_name" ComboBox1.ValueMember = "user_name" ComboBox2.DataSource = dt ComboBox2.DisplayMember = "ID" ComboBox2.ValueMember = "ID" End Using LoadCategory() End Sub
Private Sub LoadCategory() FlowLayoutPanel3.Controls.Clear() Using Cmd As New OleDbCommand("SELECT ID, item_NameA FROM Proudect_items", conn) conn.Open() Using rdr = Cmd.ExecuteReader() While rdr.Read() Dim button = New Button() With { .Font = New Font("Tahoma", 10, FontStyle.Bold), .Width = 125, .Height = 60, .Text = rdr("item_NameA").ToString(), .Tag = rdr("ID").ToString(), .FlatStyle = FlatStyle.Flat, .BackColor = Color.FromArgb(72, 4, 156), .ForeColor = Color.White } FlowLayoutPanel3.Controls.Add(button) button.Cursor = Cursors.Hand AddHandler button.Click, AddressOf button_Click End While End Using conn.Close() End Using FlowLayoutPanel3.AutoScroll = True LoadData() End Sub
Private Sub LoadData() FlowLayoutPanel1.Controls.Clear() Dim query As String If _action = "StartUp" Then query = "SELECT pic, ID, ProductNameA, ProductNameE FROM Proudect WHERE ProductNameA LIKE @searchText" ElseIf _action = "Search1" Then query = "SELECT pic, ID, ProductNameA, ProductNameE FROM Proudect WHERE id_Proudect_items = @query" End If
Using Cmd As New OleDbCommand(query, conn) If _action = "StartUp" Then Cmd.Parameters.AddWithValue("@searchText", "%" & TextSerch.Text & "%") ElseIf _action = "Search1" Then Cmd.Parameters.AddWithValue("@query", _query1) End If
conn.Open() Using rdr = Cmd.ExecuteReader(CommandBehavior.CloseConnection) While rdr.Read() Dim len As Long = rdr.GetBytes(0, 0, Nothing, 0, 0) Dim array(CInt(len)) As Byte rdr.GetBytes(0, 0, array, 0, CInt(len)) pic = New PictureBox() With { .Width = 150, .Height = 150, .BackgroundImageLayout = ImageLayout.Stretch, .Tag = rdr("ID").ToString() } AddHandler pic.Click, AddressOf lblD_Click lblD1 = New Label() With { .Font = New Font("Tahoma", 10, FontStyle.Bold), .ForeColor = Color.FromArgb(72, 4, 156), .BackColor = Color.GhostWhite, .Dock = DockStyle.Top, .Tag = rdr("ID").ToString(), .Text = rdr("ID").ToString() } lblD = New Label() With { .Font = New Font("Tahoma", 9, FontStyle.Bold), .ForeColor = Color.FromArgb(72, 4, 156), .BackColor = Color.GhostWhite, .Dock = DockStyle.Bottom, .Tag = rdr("ID").ToString(), .Text = rdr("ProductNameE").ToString() & "-" & rdr("ProductNameA").ToString() } AddHandler lblD.Click, AddressOf lblD_Click
Dim ms As New System.IO.MemoryStream(array) Dim bitmap As New System.Drawing.Bitmap(ms) pic.BackgroundImage = bitmap
pic.Controls.Add(lblD) pic.Controls.Add(lblD1) FlowLayoutPanel1.Controls.Add(pic) End While End Using conn.Close() End Using 'FlowLayoutPanel1.AutoScroll = True End Sub
Private Sub lblD_Click(sender As Object, e As EventArgs) ' Implement price display logic here End Sub
Private Sub button_Click(sender As Object, e As EventArgs) _action = "Search1" _query1 = sender.Tag.ToString() LoadData() End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' You can call LoadAllData or specific methods here End Sub End Class
RE: ماهي الطريقة الصحيحة والسريعة لجلب بيانات من قاعدة البيانات داخل Private Sub - Taha Okla - 07-06-24
(07-06-24, 07:42 PM)العتيق كتب : شكرا لك اخ Taha Okla
لم تكتب اي كلمة الا و كنت مصيبا بها ولكن بالنسبة لي من منطلق محبتي لهذا المنتدى و اعضائه الاكارم الذين لا يؤلون جهدا في مساعدة السائل ومن منطلق اما السائل فلا تنهر
قررت تقديم المساعدة و قدمت الكثير من الطروحات على كل حال اقدم لاي سائل قد يكون لديه نفس هذا الهاجس لربما يساعد
بانسبة للفورم الثاني و هو الرئيسي او فورم تسجيل الدخول نكتب الآتي
ردي لم يكن تقليلا من شأن أحد ولكن
للكمبيوتر إمكانيات ويجب مراعاتها في تنفيذ طلباتك من برامجك (عندما أٌول منطق في التعليقات البرمجية : أقصد به المنطق الذي يتناسب مع إمكانيات اللغة وإمكانيات جهاز الكمبيوتر المنفذ عليه العملية)
لأن أي تحدي مقابل إمكانيات الكمبيوتر فهو تحدي خاسر حتى لو تم تنفيذ المطلوب فيها (لأن هناك برامج أخرى تحتاج أيضاً جزء من إمكانيات الكمبيوتر لتنفذ عملياتها جنباً إلى جنب مع برامجك)..
هناك حلولاً كثيرة مفيدة وعملية .. لا تحتاج أن تضغط على إمكانيات جهازك : من أجل سرعة التنفيذ أو توفير حجم في التخزين ..
فليس كل توفير بالتخزين في قاعدة البيانات هو توفير حقيقي.. هناك عمليات التوفير فيها تسبب على المدى البعيد إنهاك لجهاز الكمبيوتر..
والحلول تتنوع بحسب خبرتك وحسب معرفتك لبرنامجك ..
جزاك الله خيراً ..
RE: ماهي الطريقة الصحيحة والسريعة لجلب بيانات من قاعدة البيانات داخل Private Sub - mohamedgadain61 - 08-06-24
(07-06-24, 07:42 PM)العتيق كتب : شكرا لك اخ Taha Okla
لم تكتب اي كلمة الا و كنت مصيبا بها ولكن بالنسبة لي من منطلق محبتي لهذا المنتدى و اعضائه الاكارم الذين لا يؤلون جهدا في مساعدة السائل ومن منطلق اما السائل فلا تنهر
قررت تقديم المساعدة و قدمت الكثير من الطروحات على كل حال اقدم لاي سائل قد يكون لديه نفس هذا الهاجس لربما يساعد
بانسبة للفورم الثاني و هو الرئيسي او فورم تسجيل الدخول نكتب الآتي
PHP كود : Public Class Form2 Private frm1 As Form1
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load frm1 = New Form1() frm1.Hide() ' إخفاء الفورم الأولى عند تحميل الفورم الثانية frm1.LoadNotes() End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click frm1.Show() ' إظهار الفورم الأولى عند الضغط على الزر
End Sub End Class
اما بالنسبة للفورم الذي سيعرض المعلومات الثقيلة او العبوات الثقيلة يصبح بهذا الشكل
PHP كود : Imports System.Data.OleDb Imports System.Threading.Tasks
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'Try ' ' فتح الاتصال بقاعدة البيانات ' conn.Open() ' MessageBox.Show("Connection opened successfully!") 'Catch ex As Exception ' MessageBox.Show("Error: " & ex.Message) 'Finally ' ' التأكد من إغلاق الاتصال حتى في حالة وجود استثناء ' conn.Close() ' MessageBox.Show("Connection closed.") 'End Try
' تشغيل المهام بشكل غير متزامن لتحميل البيانات Me.WindowState = FormWindowState.Maximized 'LoadNotes() End Sub
'Private Async Function LoadAllData() As Task ' Await Task.WhenAll( ' Task.Run(Sub() LoadNotes()), ' Task.Run(Sub() LoadLaundryInfo()), ' Task.Run(Sub() LoadAllCustomers()), ' Task.Run(Sub() LoadSubUser()), ' Task.Run(Sub() LoadCategory()), ' Task.Run(Sub() LoadData()) ' ) 'End Function
Public Sub LoadNotes() Using dp As New OleDbDataAdapter("SELECT ID, notee FROM notess", conn) Dim dt As New DataTable() dp.Fill(dt) CheckedListBox1.DataSource = dt CheckedListBox1.DisplayMember = "notee" CheckedListBox1.ValueMember = "ID" End Using LoadLaundryInfo() End Sub
Private Sub LoadLaundryInfo() Using dp As New OleDbDataAdapter("SELECT Status_vat, Value_VAT, type, Type_VAT FROM landryInfo WHERE ID = 5", conn) Dim ds As New DataSet() dp.Fill(ds) If ds.Tables(0).Rows.Count <> 0 Then statusvat = ds.Tables(0).Rows(0).Item("Status_vat").ToString() valuvat = ds.Tables(0).Rows(0).Item("Value_VAT").ToString() paytype = ds.Tables(0).Rows(0).Item("type").ToString() typevat = ds.Tables(0).Rows(0).Item("Type_VAT").ToString() End If End Using LoadAllCustomers() End Sub
Private Sub LoadAllCustomers() Using Cmmd As New OleDbCommand("SELECT mobilenumber, customername FROM Customers1", conn) Using da As New OleDbDataAdapter(Cmmd) Dim dt As New DataSet() da.Fill(dt) Dim cloumn1 As New AutoCompleteStringCollection() For Each row As DataRow In dt.Tables(0).Rows cloumn1.Add(row("mobilenumber").ToString()) Next TextBox11.AutoCompleteSource = AutoCompleteSource.CustomSource TextBox11.AutoCompleteMode = AutoCompleteMode.SuggestAppend TextBox11.AutoCompleteCustomSource = cloumn1 End Using End Using LoadSubUser() End Sub
Private Sub LoadSubUser() 'Using dp As New OleDbDataAdapter("SELECT Sub_Customer, Tailor, Laundery FROM Sub WHERE ID = 1", conn) ' Dim ds As New DataSet() ' dp.Fill(ds) ' If ds.Tables(0).Rows.Count <> 0 Then ' subscription = ds.Tables(0).Rows(0).Item("Sub_Customer").ToString() ' Tailor = ds.Tables(0).Rows(0).Item("Tailor").ToString() ' Laundery = ds.Tables(0).Rows(0).Item("Laundery").ToString() ' End If 'End Using
Using dp1 As New OleDbDataAdapter("SELECT ID, user_name FROM login", conn) Dim dt As New DataTable() dp1.Fill(dt) ComboBox1.DataSource = dt ComboBox1.DisplayMember = "user_name" ComboBox1.ValueMember = "user_name" ComboBox2.DataSource = dt ComboBox2.DisplayMember = "ID" ComboBox2.ValueMember = "ID" End Using LoadCategory() End Sub
Private Sub LoadCategory() FlowLayoutPanel3.Controls.Clear() Using Cmd As New OleDbCommand("SELECT ID, item_NameA FROM Proudect_items", conn) conn.Open() Using rdr = Cmd.ExecuteReader() While rdr.Read() Dim button = New Button() With { .Font = New Font("Tahoma", 10, FontStyle.Bold), .Width = 125, .Height = 60, .Text = rdr("item_NameA").ToString(), .Tag = rdr("ID").ToString(), .FlatStyle = FlatStyle.Flat, .BackColor = Color.FromArgb(72, 4, 156), .ForeColor = Color.White } FlowLayoutPanel3.Controls.Add(button) button.Cursor = Cursors.Hand AddHandler button.Click, AddressOf button_Click End While End Using conn.Close() End Using FlowLayoutPanel3.AutoScroll = True LoadData() End Sub
Private Sub LoadData() FlowLayoutPanel1.Controls.Clear() Dim query As String If _action = "StartUp" Then query = "SELECT pic, ID, ProductNameA, ProductNameE FROM Proudect WHERE ProductNameA LIKE @searchText" ElseIf _action = "Search1" Then query = "SELECT pic, ID, ProductNameA, ProductNameE FROM Proudect WHERE id_Proudect_items = @query" End If
Using Cmd As New OleDbCommand(query, conn) If _action = "StartUp" Then Cmd.Parameters.AddWithValue("@searchText", "%" & TextSerch.Text & "%") ElseIf _action = "Search1" Then Cmd.Parameters.AddWithValue("@query", _query1) End If
conn.Open() Using rdr = Cmd.ExecuteReader(CommandBehavior.CloseConnection) While rdr.Read() Dim len As Long = rdr.GetBytes(0, 0, Nothing, 0, 0) Dim array(CInt(len)) As Byte rdr.GetBytes(0, 0, array, 0, CInt(len)) pic = New PictureBox() With { .Width = 150, .Height = 150, .BackgroundImageLayout = ImageLayout.Stretch, .Tag = rdr("ID").ToString() } AddHandler pic.Click, AddressOf lblD_Click lblD1 = New Label() With { .Font = New Font("Tahoma", 10, FontStyle.Bold), .ForeColor = Color.FromArgb(72, 4, 156), .BackColor = Color.GhostWhite, .Dock = DockStyle.Top, .Tag = rdr("ID").ToString(), .Text = rdr("ID").ToString() } lblD = New Label() With { .Font = New Font("Tahoma", 9, FontStyle.Bold), .ForeColor = Color.FromArgb(72, 4, 156), .BackColor = Color.GhostWhite, .Dock = DockStyle.Bottom, .Tag = rdr("ID").ToString(), .Text = rdr("ProductNameE").ToString() & "-" & rdr("ProductNameA").ToString() } AddHandler lblD.Click, AddressOf lblD_Click
Dim ms As New System.IO.MemoryStream(array) Dim bitmap As New System.Drawing.Bitmap(ms) pic.BackgroundImage = bitmap
pic.Controls.Add(lblD) pic.Controls.Add(lblD1) FlowLayoutPanel1.Controls.Add(pic) End While End Using conn.Close() End Using 'FlowLayoutPanel1.AutoScroll = True End Sub
Private Sub lblD_Click(sender As Object, e As EventArgs) ' Implement price display logic here End Sub
Private Sub button_Click(sender As Object, e As EventArgs) _action = "Search1" _query1 = sender.Tag.ToString() LoadData() End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' You can call LoadAllData or specific methods here End Sub End Class
جزاك الله خيرا ووفقك الله وسدد خطاك يارب .... سوف اطلع على الكود ...
اخير واخرا ان شاء الله كيف يمكنني عمل جملة تاكد اذا كانت ال Task تعمل لا يقوم بتكرار الامر مرة اخرى
هنا ارغب باضافة جملة تحقق IF Statement حتى ينتهي ال Task من اداء المهمة لانه يوجد لدي Button للتحديث وشكرا
PHP كود : Await Task.WhenAll( Task.Run(Sub() LoadCategory()), Task.Run(Sub() LoadData()), Task.Run(Sub() notee()), Task.Run(Sub() landryInfo()), Task.Run(Sub() SelectAll_Customers()), Task.Run(Sub() GetSub_User()) )
|