كود استيراد الاصناف من البرنامج الى الاكسيل - Hamza8484 - 14-07-24
السلام عليكم ورحمة الله وبركاته
احتاج مساعدة اذا ممكن
كود Vb.net
كيفية حفظ الاصناف من (DataGridView) الى قاعدة بيانات (SQL Server ) .
مثلا عندي اصناف عند العميل وعملت تصدير لها وابغى اعمل استيراد لها في البرنامج
يعني انا عملت كود استيراد الاصناف الى الاكسيل ولكن بعد عرض الاصناف في الداتا جريد فيو كيف احتاج اصدر الاصناف الى الاكسيل واحفظها في قاعدة البيانات sql server لتنزيلها عند عميل اخر
وشكرا لكم
RE: كود استيراد الاصناف من البرنامج الى الاكسيل - تركي الحلواني - 14-07-24
أرجو توفير جميع البيانات
عدد الاعمدة في الاكسل
واسم الجدول والحقول في قاعدة البيانات
وما هي الاعمدة المطلوب جلبها وحفظها
RE: كود استيراد الاصناف من البرنامج الى الاكسيل - Kamil - 14-07-24
وعليكم السلام ورحمة الله وبركاته
لحفظ الأصناف من DataGridView إلى قاعدة بيانات SQL Server في VB.NET، يمكنك اتباع الخطوات التالية:
استخراج البيانات من DataGridView:
قم بقراءة كل صف من DataGridView واستخراج البيانات.
الاتصال بقاعدة البيانات:
قم بإنشاء اتصال بقاعدة البيانات باستخدام SqlConnection.
تنفيذ عملية الإدخال:
قم بإعداد أمر SQL لإدخال البيانات في قاعدة البيانات باستخدام SqlCommand.
تكرار العملية لكل صف:
قم بتنفيذ أمر الإدخال لكل صف من DataGridView.
إليك مثال على كيفية تنفيذ هذه الخطوات:
PHP كود :
Imports System.Data.SqlClient
Private Sub SaveDataGridViewToDatabase() ' نص الاتصال بقاعدة البيانات Dim connectionString As String = "Data Source=YourServerName;Initial Catalog=YourDatabaseName;Integrated Security=True"
' إنشاء الاتصال بقاعدة البيانات Using connection As New SqlConnection(connectionString) ' فتح الاتصال connection.Open()
' بدء المعاملة Dim transaction As SqlTransaction = connection.BeginTransaction()
Try ' إعداد أمر الإدخال Dim insertCommand As New SqlCommand("INSERT INTO YourTableName (Column1, Column2, Column3) VALUES (@Column1, @Column2, @Column3)", connection, transaction)
' إضافة المعاملات لأمر الإدخال insertCommand.Parameters.Add("@Column1", SqlDbType.VarChar) insertCommand.Parameters.Add("@Column2", SqlDbType.VarChar) insertCommand.Parameters.Add("@Column3", SqlDbType.Int)
' قراءة البيانات من DataGridView For Each row As DataGridViewRow In DataGridView1.Rows If Not row.IsNewRow Then ' تعيين القيم للمعاملات insertCommand.Parameters("@Column1").Value = row.Cells("Column1").Value.ToString() insertCommand.Parameters("@Column2").Value = row.Cells("Column2").Value.ToString() insertCommand.Parameters("@Column3").Value = Convert.ToInt32(row.Cells("Column3").Value)
' تنفيذ أمر الإدخال insertCommand.ExecuteNonQuery() End If Next
' تأكيد المعاملة transaction.Commit()
MessageBox.Show("Data saved successfully!") Catch ex As Exception ' إذا حدث خطأ، التراجع عن المعاملة transaction.Rollback() MessageBox.Show("An error occurred: " & ex.Message) End Try End Using End Sub
تأكد من تعديل أسماء الأعمدة (Column1, Column2, Column3) وأسماء الجدول (YourTableName) والاتصال (YourServerName, YourDatabaseName) بما يتناسب مع إعداداتك الخاصة.
بهذا الكود، يمكنك استيراد البيانات من Excel إلى DataGridView، ثم حفظها في قاعدة البيانات باستخدام زر يقوم باستدعاء الدالة SaveDataGridViewToDatabase.
RE: كود استيراد الاصناف من البرنامج الى الاكسيل - Hamza8484 - 15-07-24
(14-07-24, 03:38 PM)تركي الحلواني كتب : أرجو توفير جميع البيانات
عدد الاعمدة في الاكسل
واسم الجدول والحقول في قاعدة البيانات
وما هي الاعمدة المطلوب جلبها وحفظها
شكرا لردك السريع ياغالي
Sql Server 2014
Visual 2019
عدد الاعمدة في الاكسل:
15 صف الاكسيل عند الاستيراد من الداتا جريد
واسم الجدول والحقول في قاعدة البيانات:
Item_Tbl
Item_ID int
ItemBarcode nvarchar(50)
ItemNameA nvarchar(250)
ItemNameE nvarchar(250)
Cat_ID int
Unit_ID int
OpenStock int
ItemLimit int
Is_Buy_Tax bit
Buy_Tax_Value decimal(18, 1)
BuyPrice_NoTax decimal(18, 2)
Buy_TaxTotal decimal(18, 2)
BuyPrice_WithTax decimal(18, 2)
Is_Sale_Tax bit
Sale_Tax_Value decimal(18, 1)
SalePrice_NoTax decimal(18, 2)
Sale_TaxTotal decimal(18, 2)
SalePrice_WithTax decimal(18, 2)
Rbh decimal(18, 2)
Item_Pic image
Item_Status bit
Is_Exp bit
Is_Quick_Item bit
(14-07-24, 09:03 PM)Kamil كتب : وعليكم السلام ورحمة الله وبركاته
لحفظ الأصناف من DataGridView إلى قاعدة بيانات SQL Server في VB.NET، يمكنك اتباع الخطوات التالية:
استخراج البيانات من DataGridView:
قم بقراءة كل صف من DataGridView واستخراج البيانات.
الاتصال بقاعدة البيانات:
قم بإنشاء اتصال بقاعدة البيانات باستخدام SqlConnection.
تنفيذ عملية الإدخال:
قم بإعداد أمر SQL لإدخال البيانات في قاعدة البيانات باستخدام SqlCommand.
تكرار العملية لكل صف:
قم بتنفيذ أمر الإدخال لكل صف من DataGridView.
إليك مثال على كيفية تنفيذ هذه الخطوات:
PHP كود :
Imports System.Data.SqlClient
Private Sub SaveDataGridViewToDatabase() ' نص الاتصال بقاعدة البيانات Dim connectionString As String = "Data Source=YourServerName;Initial Catalog=YourDatabaseName;Integrated Security=True"
' إنشاء الاتصال بقاعدة البيانات Using connection As New SqlConnection(connectionString) ' فتح الاتصال connection.Open()
' بدء المعاملة Dim transaction As SqlTransaction = connection.BeginTransaction()
Try ' إعداد أمر الإدخال Dim insertCommand As New SqlCommand("INSERT INTO YourTableName (Column1, Column2, Column3) VALUES (@Column1, @Column2, @Column3)", connection, transaction)
' إضافة المعاملات لأمر الإدخال insertCommand.Parameters.Add("@Column1", SqlDbType.VarChar) insertCommand.Parameters.Add("@Column2", SqlDbType.VarChar) insertCommand.Parameters.Add("@Column3", SqlDbType.Int)
' قراءة البيانات من DataGridView For Each row As DataGridViewRow In DataGridView1.Rows If Not row.IsNewRow Then ' تعيين القيم للمعاملات insertCommand.Parameters("@Column1").Value = row.Cells("Column1").Value.ToString() insertCommand.Parameters("@Column2").Value = row.Cells("Column2").Value.ToString() insertCommand.Parameters("@Column3").Value = Convert.ToInt32(row.Cells("Column3").Value)
' تنفيذ أمر الإدخال insertCommand.ExecuteNonQuery() End If Next
' تأكيد المعاملة transaction.Commit()
MessageBox.Show("Data saved successfully!") Catch ex As Exception ' إذا حدث خطأ، التراجع عن المعاملة transaction.Rollback() MessageBox.Show("An error occurred: " & ex.Message) End Try End Using End Sub
تأكد من تعديل أسماء الأعمدة (Column1, Column2, Column3) وأسماء الجدول (YourTableName) والاتصال (YourServerName, YourDatabaseName) بما يتناسب مع إعداداتك الخاصة.
بهذا الكود، يمكنك استيراد البيانات من Excel إلى DataGridView، ثم حفظها في قاعدة البيانات باستخدام زر يقوم باستدعاء الدالة SaveDataGridViewToDatabas
شكرا لك يا طيب
ولكن هذ الكود ما اشتغل معايا للاسف
هذا الكود الي انا شغال عليه :
Imports ExcelDataReader
Imports System.Data.SqlClient
Imports System.IO
Imports Microsoft.Office.Interop
Public Class Frm_Insert_Items
Public Shared Sub SaveGridToExcel(ByVal DGV As DataGridView) ' صب نسخ من الجريد لإكسل
Try
Dim XCELAPP As Microsoft.Office.Interop.Excel.Application = Nothing
Dim XWORKBOOK As Microsoft.Office.Interop.Excel.Workbook = Nothing
Dim XSHEET As Microsoft.Office.Interop.Excel.Worksheet = Nothing
Dim misValue As Object = System.Reflection.Missing.Value
If DGV.Rows.Count > 0 Then
Dim filename As String = ""
Dim SV As New SaveFileDialog()
SV.Filter = "Excel Files|*.xlsx|Excel 2003|*.xls"
If SV.ShowDialog = DialogResult.OK Then
If DGV.RightToLeft = RightToLeft.Yes Then
DGV.RightToLeft = False 'تغيير اتجاه الجريد من اليمين لليسار لكي لا ينسخ بالمقلوب
filename = SV.FileName
Dim multiselect As Boolean = DGV.MultiSelect
DGV.MultiSelect = True
DGV.SelectAll()
DGV.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText
Clipboard.SetDataObject(DGV.GetClipboardContent())
Dim results = System.Convert.ToString(Clipboard.GetData(DataFormats.Text))
DGV.ClearSelection()
DGV.MultiSelect = multiselect
DGV.RightToLeft = RightToLeft.Yes ' ارجاع اتجاه الجريد لليمين
XCELAPP = New Excel.Application()
XWORKBOOK = XCELAPP.Workbooks.Add(misValue)
XCELAPP.DisplayAlerts = False
XCELAPP.Visible = False
XSHEET = XWORKBOOK.ActiveSheet
XSHEET.DisplayRightToLeft = True
XSHEET.PasteSpecial(RightToLeft.Yes)
XWORKBOOK.SaveAs(filename, Excel.XlFileFormat.xlOpenXMLWorkbook)
XWORKBOOK.Close(False)
XCELAPP.Quit()
Else
filename = SV.FileName
Dim multiselect As Boolean = DGV.MultiSelect
DGV.MultiSelect = True
DGV.SelectAll()
DGV.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText
Clipboard.SetDataObject(DGV.GetClipboardContent())
Dim results = System.Convert.ToString(Clipboard.GetData(DataFormats.Text))
DGV.ClearSelection()
DGV.MultiSelect = multiselect
XCELAPP = New Excel.Application()
XWORKBOOK = XCELAPP.Workbooks.Add(misValue)
XCELAPP.DisplayAlerts = False
XCELAPP.Visible = False
XSHEET = XWORKBOOK.ActiveSheet
XSHEET.Paste()
XWORKBOOK.SaveAs(filename, Excel.XlFileFormat.xlOpenXMLWorkbook)
XWORKBOOK.Close(False)
XCELAPP.Quit()
End If
If MessageBox.Show("هل تريد فتح الملف ؟", "فتح ملف الأكسل", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading) = MsgBoxResult.Yes Then
Process.Start(SV.FileName)
End If
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(XSHEET)
System.Runtime.InteropServices.Marshal.ReleaseComObject(XWORKBOOK)
System.Runtime.InteropServices.Marshal.ReleaseComObject(XCELAPP)
Catch
End Try
End If
End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
Private Sub BTN_EXCEL_COPY_Click(sender As Object, e As EventArgs) Handles BTN_EXCEL_COPY.Click
SaveGridToExcel(Dgv)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Try ' استيراد من الإكسل
Dgv.Rows.Clear()
Dim OFD As New OpenFileDialog
OFD.Filter = "Excel Files|*.xlsx|Excel 2003|*.xls"
OFD.Title = (" استيراد البيانات من الورقة الأولى من السطر الثاني في ملف الإكسل")
If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
BTN_EXCEL_COPY.Text = "يرجى الانتظار"
BTN_EXCEL_COPY.BackColor = Color.Tomato
BTN_EXCEL_COPY.Enabled = False
Dgv.DataSource = Nothing
Dim PATH_ As String = OFD.FileName
Dim COUNT_ As Integer = 0 'تعريف متغير للوب
If Dt.Rows.Count > 0 Then
Dgv.RowCount = Dt.Rows.Count + 1 ' مهم جدا عدد الاسطر في الداتاجريد تساوي عدد الاسطر في الداتاتيبل ويضيف سطر
For I As Integer = 0 To Dt.Rows.Count - 1 ' تعبئة الداتاجريد بحيث يمر على الداتا تيبل بلوب
Dgv.Rows(COUNT_).Cells(3).Value = Dt.Rows(I)(0).ToString
Dgv.Rows(COUNT_).Cells(4).Value = Dt.Rows(I)(1).ToString
'Dgv.Rows(COUNT_).Cells(5).Value = DT.Rows(I)(2).ToString
'Dgv.Rows(COUNT_).Cells(6).Value = DT.Rows(I)(3).ToString
'Dgv.Rows(COUNT_).Cells(7).Value = DT.Rows(I)(4).ToString
'Dgv.Rows(COUNT_).Cells(8).Value = DT.Rows(I)(5).ToString
'Dgv.Rows(COUNT_).Cells(9).Value = DT.Rows(I)(6).ToString
'Dgv.Rows(COUNT_).Cells(10).Value = DT.Rows(I)(7).ToString
'Dgv.Rows(COUNT_).Cells(11).Value = DT.Rows(I)(8).ToString
'Dgv.Rows(COUNT_).Cells(12).Value = DT.Rows(I)(9).ToString
'Dgv.Rows(COUNT_).Cells(13).Value = DT.Rows(I)(10).ToString
'Dgv.Rows(COUNT_).Cells(14).Value = DT.Rows(I)(11).ToString
'Dgv.Rows(COUNT_).Cells(15).Value = DT.Rows(I)(12).ToString
'Dgv.Rows(COUNT_).Cells(16).Value = DT.Rows(I)(13).ToString
'Dgv.Rows(COUNT_).Cells(17).Value = DT.Rows(I)(14).ToString
'Dgv.Rows(COUNT_).Cells(18).Value = DT.Rows(I)(15).ToString
'Dgv.Rows(COUNT_).Cells(19).Value = DT.Rows(I)(16).ToString
'Dgv.Rows(COUNT_).Cells(20).Value = DT.Rows(I)(17).ToString
COUNT_ += 1 ' بما أنه بدأ من السطر0 نزيده واحد في كل لوب
Next
End If
Else
End
End If
BTN_EXCEL_COPY.Text = "استيراد من إكسل"
BTN_EXCEL_COPY.Enabled = True
BTN_EXCEL_COPY.BackColor = Color.Transparent
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
End Class
RE: كود استيراد الاصناف من البرنامج الى الاكسيل - تركي الحلواني - 15-07-24
مرحبا أخي هذا الكود جربه وعدل الباقي بحسب قاعدة البيانات
وتعديل كود الاتصال
يوجد زر لجلب البيانات من اكسل
يوجد زر لحفظ البيانات الى قاعدة البيانات
يوجد زر لعرض البيانات من قاعدة البيانات
يوجد زر لتصدير البيانات الى ملف اكسل
ملاحظة:
هل دائماً الجدول فارغ ام انك تقوم بإضافة البيانات مع البيانات السابقة ام انك تقوم بتفريق الجدول وملئه من ملف الاكسل ام انط تقوم بتعديل البيانات في حال وجودة بحسب رقم الباركود للصنف
أسالة تطرح حتى يتم تعديل الكود بما يتناسب مع العمل الذي تقوم به.
الكود كامل
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
RE: كود استيراد الاصناف من البرنامج الى الاكسيل - Hamza8484 - 15-07-24
(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.')
شاكر لك
RE: كود استيراد الاصناف من البرنامج الى الاكسيل - تركي الحلواني - 18-07-24
جرب هذا الكود
PHP كود :
Imports System.Data.OleDb 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 conStr As String = "" Dim extension As String = IO.Path.GetExtension(filePath)
Select Case extension Case ".xls" conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath & ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'" Case ".xlsx" conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'" End Select
Using con As New OleDbConnection(conStr) Using cmd As New OleDbCommand("SELECT * FROM [Sheet1$]", con) con.Open() Dim dt As New DataTable() Using da As New OleDbDataAdapter(cmd) da.Fill(dt) DataGridView1.DataSource = dt End Using con.Close() End Using End Using 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
RE: كود استيراد الاصناف من البرنامج الى الاكسيل - Hamza8484 - 21-07-24
(18-07-24, 03:35 PM)تركي الحلواني كتب : جرب هذا الكود
PHP كود :
Imports System.Data.OleDb 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 conStr As String = "" Dim extension As String = IO.Path.GetExtension(filePath)
Select Case extension Case ".xls" conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath & ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'" Case ".xlsx" conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'" End Select
Using con As New OleDbConnection(conStr) Using cmd As New OleDbCommand("SELECT * FROM [Sheet1$]", con) con.Open() Dim dt As New DataTable() Using da As New OleDbDataAdapter(cmd) da.Fill(dt) DataGridView1.DataSource = dt End Using con.Close() End Using End Using 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
السلام عليكم
ياصديقي ما اشتغل معايا الكود
تطلع هذي الرسالة
انا عندي قاعدة البيانات sqlserver 2014
RE: كود استيراد الاصناف من البرنامج الى الاكسيل - تركي الحلواني - 22-07-24
جرب التعديل هذا
أولا
في نافذة "Package Manager Console"، اكتب الأوامر التالية:
PHP كود :
Install-Package ExcelDataReader Install-Package ExcelDataReader.DataSet
ثانيا جرب الكود التالي
PHP كود :
Imports System.Data Imports System.Data.SqlClient Imports System.IO Imports ExcelDataReader
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) Try Using stream = File.Open(filePath, FileMode.Open, FileAccess.Read) Dim excelReader As IExcelDataReader = ExcelReaderFactory.CreateReader(stream) Dim result As DataSet = excelReader.AsDataSet(New ExcelDataSetConfiguration() With { .ConfigureDataTable = Function(__) New ExcelDataTableConfiguration() With { .UseHeaderRow = True } })
Dim dataTable As DataTable = result.Tables(0) DataGridView1.DataSource = dataTable excelReader.Close() End Using Catch ex As Exception MessageBox.Show("Error importing Excel file: " & ex.Message) End Try 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
تم التجربة ويعمل بشكل جيد وسريع
RE: كود استيراد الاصناف من البرنامج الى الاكسيل - Hamza8484 - 23-07-24
(22-07-24, 10:29 AM)تركي الحلواني كتب : جرب التعديل هذا
أولا
في نافذة "Package Manager Console"، اكتب الأوامر التالية:
PHP كود :
Install-Package ExcelDataReader Install-Package ExcelDataReader.DataSet
ثانيا جرب الكود التالي
PHP كود :
Imports System.Data Imports System.Data.SqlClient Imports System.IO Imports ExcelDataReader
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) Try Using stream = File.Open(filePath, FileMode.Open, FileAccess.Read) Dim excelReader As IExcelDataReader = ExcelReaderFactory.CreateReader(stream) Dim result As DataSet = excelReader.AsDataSet(New ExcelDataSetConfiguration() With { .ConfigureDataTable = Function(__) New ExcelDataTableConfiguration() With { .UseHeaderRow = True } })
Dim dataTable As DataTable = result.Tables(0) DataGridView1.DataSource = dataTable excelReader.Close() End Using Catch ex As Exception MessageBox.Show("Error importing Excel file: " & ex.Message) End Try 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
تم التجربة ويعمل بشكل جيد وسريع
السلام عليكم
شكرا لك اخي الكريم
ومقدر تعبك معايا
وان شاء الله في ميزان حسناتك
الكود مش راضي يضبط معايا
عند استيراد الاصناف ممتاز ما في اي مشكلة .
ولكن عند عملية الحفظ تظهر لي هذه الرسالة :
|