(15-07-24, 10:44 AM)تركي الحلواني كتب : مرحبا أخي هذا الكود جربه وعدل الباقي بحسب قاعدة البيانات
وتعديل كود الاتصال
يوجد زر لجلب البيانات من اكسل
يوجد زر لحفظ البيانات الى قاعدة البيانات
يوجد زر لعرض البيانات من قاعدة البيانات
يوجد زر لتصدير البيانات الى ملف اكسل
ملاحظة:
هل دائماً الجدول فارغ ام انك تقوم بإضافة البيانات مع البيانات السابقة ام انك تقوم بتفريق الجدول وملئه من ملف الاكسل ام انط تقوم بتعديل البيانات في حال وجودة بحسب رقم الباركود للصنف
أسالة تطرح حتى يتم تعديل الكود بما يتناسب مع العمل الذي تقوم به.
الكود كامل
PHP كود :
Imports System.Data.SqlClient
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form3
Private Sub ButtonImport_Click(sender As Object, e As EventArgs) Handles ButtonImport.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm"
If openFileDialog.ShowDialog() = DialogResult.OK Then
ImportExcelToDataGridView(openFileDialog.FileName)
End If
End Sub
Private Sub ImportExcelToDataGridView(ByVal filePath As String)
Dim excelApp As New Excel.Application()
Dim excelWorkbook As Excel.Workbook = excelApp.Workbooks.Open(filePath)
Dim excelWorksheet As Excel.Worksheet = CType(excelWorkbook.Sheets(1), Excel.Worksheet)
Dim excelRange As Excel.Range = excelWorksheet.UsedRange
' قراءة السطر الأول كعناوين الأعمدة
For col As Integer = 1 To 15
DataGridView1.Columns.Add(Convert.ToString(excelRange.Cells(1, col).Value2), Convert.ToString(excelRange.Cells(1, col).Value2))
Next
' قراءة البيانات من السطر الثاني
For row As Integer = 2 To excelRange.Rows.Count
Dim isRowEmpty As Boolean = True
Dim rowData(14) As String ' مصفوفة لاستيعاب بيانات الصف
For col As Integer = 1 To 15
Dim cellValue As String = Convert.ToString(excelRange.Cells(row, col).Value2)
rowData(col - 1) = cellValue
If Not String.IsNullOrWhiteSpace(cellValue) Then
isRowEmpty = False
End If
Next
If Not isRowEmpty Then
DataGridView1.Rows.Add(rowData)
End If
Next
excelWorkbook.Close(False)
excelApp.Quit()
ReleaseObject(excelRange)
ReleaseObject(excelWorksheet)
ReleaseObject(excelWorkbook)
ReleaseObject(excelApp)
End Sub
Private Sub ButtonSave_Click(sender As Object, e As EventArgs) Handles ButtonSave.Click
SaveDataGridViewToDatabase()
End Sub
Private Sub ButtonLoad_Click(sender As Object, e As EventArgs) Handles ButtonLoad.Click
LoadDataFromDatabase()
End Sub
Private Sub ButtonExport_Click(sender As Object, e As EventArgs) Handles ButtonExport.Click
ExportDataGridViewToExcel()
End Sub
Private Sub SaveDataGridViewToDatabase()
Dim connectionString As String = "Data Source=.;Initial Catalog=DATABASE;Integrated Security=True"
Using cn As New SqlConnection(connectionString)
cn.Open()
For Each row As DataGridViewRow In DataGridView1.Rows
If Not row.IsNewRow Then
Using cm As New SqlCommand("INSERT INTO Item_Tbl (ItemBarcode , ItemNameA , ItemNameE , ..., Column15) VALUES (@ItemBarcode , @ItemNameA , @ItemNameE, ..., @val15)", cn)
cm.Parameters.AddWithValue("@ItemBarcode", row.Cells(0).Value)
cm.Parameters.AddWithValue("@ItemNameA", row.Cells(1).Value)
cm.Parameters.AddWithValue("@ItemNameE", row.Cells(2).Value)
'...
cm.Parameters.AddWithValue("@val15", row.Cells(14).Value)
cm.ExecuteNonQuery()
End Using
End If
Next
End Using
MessageBox.Show("Data saved successfully!")
End Sub
Private Sub LoadDataFromDatabase()
Dim connectionString As String = "Data Source=.;Initial Catalog=DATABASE;Integrated Security=True"
Using cn As New SqlConnection(connectionString)
Dim query As String = "SELECT * FROM Item_Tbl"
Dim da As New SqlDataAdapter(query, cn)
Dim dt As New DataTable()
da.Fill(dt)
DataGridView1.DataSource = dt
End Using
End Sub
Private Sub ExportDataGridViewToExcel()
Dim excelApp As New Excel.Application()
Dim excelWorkbook As Excel.Workbook = excelApp.Workbooks.Add()
Dim excelWorksheet As Excel.Worksheet = CType(excelWorkbook.Sheets(1), Excel.Worksheet)
' إضافة عناوين الأعمدة
For col As Integer = 0 To DataGridView1.Columns.Count - 1
excelWorksheet.Cells(1, col + 1).Value = DataGridView1.Columns(col).HeaderText
Next
' إضافة البيانات
For row As Integer = 0 To DataGridView1.Rows.Count - 1
For col As Integer = 0 To DataGridView1.Columns.Count - 1
excelWorksheet.Cells(row + 2, col + 1).Value = DataGridView1.Rows(row).Cells(col).Value
Next
Next
' حفظ الملف
Dim saveFileDialog As New SaveFileDialog()
saveFileDialog.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm"
If saveFileDialog.ShowDialog() = DialogResult.OK Then
excelWorkbook.SaveAs(saveFileDialog.FileName)
excelWorkbook.Close()
excelApp.Quit()
MessageBox.Show("Data exported successfully!")
End If
ReleaseObject(excelWorksheet)
ReleaseObject(excelWorkbook)
ReleaseObject(excelApp)
End Sub
Private Sub ReleaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
End Class
شكرا لك يا اخي الكريم اقدر لك مساعدتك
طبعا انزل البرنامج على الجهاز واضيف اصناف عدد كبير لانه سوبر ماركت فاحتاج اخذ نسخة من الاصناف احتياط وكل ما اضفت اصناف على البرنامج اخذ نسخة اكسيل مرات كثير احتاج افلات الجهاز او اي عطل في الجهاز لذلك اعمل تصدير للاصناف الى قاعدة البيانات .
وقد احتاج الاصناف في جهاز اخر .
اليوم اشتغلت على الكود واشتغل معايا ولكن في مشكلتين :
1- عند الضغط على رز فتح الاكسل وتنزيل ملف الاصناف اذا كان عدد كبير من الاصناف ( يعلق ) ولازم اغلق البرنامج .اذاكان عدد اصناف عدد قليل ينزل على الداتاجريد عادي
2- عند الحفظ اذا كان فيه اي بيانات يحدث خطأ( 'Violation of PRIMARY KEY constraint 'PK_Item_Tbl'. Cannot insert duplicate key in object 'dbo.Item_Tbl'. The duplicate key value is (10000001).
The statement has been terminated.')
شاكر لك
