ازاى أطبق كود max على حقل تكست - new_programer - 25-01-25
السلام عليكم
ازاى استخدم كود جلب اعلي قيمة الباركود لكن الحقل نوعية تكست
ودة طريقة تسجيل الباركود
1001-1
1001-2
يوجد حقل اخر خاص بالكود فقط
1001
ازاى لو كتبت 1001
يتم جلب الباركود
1001-3
RE: ازاى أطبق كود max على حقل تكست - Kamil - 25-01-25
وعليكم السلام ورحمة الله وبركاته!
لحل هذا الأمر، يمكنك استخدام SQL لاستخراج أعلى قيمة من حقل الباركود الخاص بالنصوص (BarCode) بناءً على الكود الموجود في الحقل الآخر (Code). ثم يمكنك توليد الباركود الجديد بإضافة اللاحقة الجديدة (مثل -3).
PHP كود :
using System; using System.Data.SqlClient; using System.Windows.Forms;
public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void GenerateBarCode(string inputCode) { string connectionString = "YourConnectionStringHere"; // استبدلها بسلسلة الاتصال الخاصة بك string newBarCode = "";
using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string query = @" SELECT TOP 1 BarCode FROM YourTable WHERE Code = @Code ORDER BY CAST(SUBSTRING(BarCode, CHARINDEX('-', BarCode) + 1, LEN(BarCode)) AS INT) DESC; ";
using (SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@Code", inputCode);
object result = command.ExecuteScalar();
if (result != null) { string lastBarCode = result.ToString(); int lastNumber = int.Parse(lastBarCode.Split('-')[1]); // استخراج الرقم الأخير newBarCode = $"{inputCode}-{lastNumber + 1}"; // إنشاء الباركود الجديد } else { newBarCode = $"{inputCode}-1"; // إذا لم يكن هناك أي باركود سابق } } }
// عرض الباركود الجديد في TextBox TxtBarCode.Text = newBarCode; }
private void BtnGenerate_Click(object sender, EventArgs e) { string inputCode = TxtInputCode.Text; // قيمة الكود المدخل من TextBox if (!string.IsNullOrWhiteSpace(inputCode)) { GenerateBarCode(inputCode); } else { MessageBox.Show("الرجاء إدخال الكود!", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
RE: ازاى أطبق كود max على حقل تكست - princelovelorn - 26-01-25
وعليكم السلام ورحمة الله وبركاته
أرجو أن تفيدك هذة الطريقة
ولكن راعي تغيير اسم الجدول YourTableName واسم الحقل barcodeField
لجلب أعلى قيمة باركود باستخدام كود يتعامل مع حقل نوعية نص (Text) ووجود نموذج محدد للباركود، سوف تحتاج إلى استخدام دالة للبحث عن الباركود الذي يبدأ بـ `1001` ثم الحصول على القيمة الأعلى التي تحتوي على هذا الجزء.
إليك مثال على كيفية كتابة الدالة:
كود :
Public Function GetHighestBarcode(ByVal code As String) As String
Dim STR As String = "SELECT MAX(barcodeField) FROM YourTableName WHERE barcodeField LIKE '" & code & "-%'"
Dim adp As New SQLiteDataAdapter(STR, con)
Dim Ds As New DataSet
adp.Fill(Ds)
If Ds.Tables(0).Rows.Count > 0 Then
Dim highestBarcode As Object = Ds.Tables(0).Rows(0)(0)
If highestBarcode IsNot DBNull.Value Then
Return highestBarcode.ToString()
End If
End If
Return String.Empty 'إذا لم يكن هناك باركود متاح
End Function
### كيف يعمل الكود:
1. **الدالة**: `GetHighestBarcode` تأخذ كود (مثل `1001`) كوسيط وتعيد الباركود الأعلى كنص.
2. **الاستعلام**: يتم بناء استعلام SQL باستخدام `LIKE` للبحث عن الباركودات التي تبدأ بالرقم `1001` متبوعًا بشرطة ونقطة (مثل `1001-1`، `1001-2`).
3. **استرجاع القيمة الأعلى**: يستخدم استعلام `MAX` للحصول على أعلى قيمة للباركود المتطابقة.
4. **تعبئة بيانات الجدول**: مثل الكود السابق، يتم استخدام `DataAdapter` و`DataSet` لتعبئة النتائج.
5. **التحقق من النتائج**: إذا كان هناك نتائج، يتم إرجاع القيمة العليا، وإلا يتم إرجاع نص فارغ.
### الاستخدام:
عند الحاجة لاسترجاع أعلى باركود بناءً على كود معين، يمكنك ببساطة استدعاء الدالة:
كود :
Dim highestBarcode As String = GetHighestBarcode("1001")
بهذه الطريقة، ستتمكن من الحصول على آخر باركود (مثل `1001-3`) عند إدخال `1001`.
RE: ازاى أطبق كود max على حقل تكست - new_programer - 26-01-25
قومت بالتعديل على هذا الكود من الرد استاذى الفاضل Kamil
رجاء مراجعة الكود من الاخوة لو امكن اختصارة او مراجعة لو يوجد اخطاء برمجية
مع العلم الكود يعمل بشكل سليم وكما المطلوب
كود :
Dim rdr As SqlDataReader = Nothing
If conn.State <> ConnectionState.Open Then conn.Open()
'conn.Open()
cmd = conn.CreateCommand()
cmd.CommandText = "SELECT TOP 1 itemCode2 FROM itemsTbl WHERE itemCode = @Code ORDER BY CAST(SUBSTRING(itemCode2, CHARINDEX('-', itemCode2) + 1, LEN(itemCode2)) AS INT) DESC "
cmd.Parameters.AddWithValue("@Code", txtItemCode.Text)
rdr = cmd.ExecuteReader()
If rdr.Read() Then
'txtItemCode2.Text = rdr.GetValue(0)
Dim originalText As String = rdr.GetValue(0)
Dim parts() As String = originalText.Split("-"c)
If parts.Length = 2 Then
Dim leftPart As String = parts(0)
Dim rightPart As Integer
If Integer.TryParse(parts(1), rightPart) Then
rightPart += 1
Dim newText As String = String.Format("{0}-{1}", leftPart, rightPart)
'Dim newText As String = $"{leftPart}-{rightPart}"
txtItemCode2.Text = newText
End If
End If
Else
Dim UintID As String = txtItemCode.Text
Dim BarCodeVind = String.Concat(UintID, "-", 1)
txtItemCode2.Text = BarCodeVind
rdr.Close()
End If
If (rdr IsNot Nothing) Then
End If
'If conn.State = ConnectionState.Open Then
conn.Close()
RE: ازاى أطبق كود max على حقل تكست - aliday03 - 04-02-25
السلام عليكم
بالنسبة للسيكوال سيرفر
نقوم بالاتي انشاء جدول و عمل مدخلات عشوائية ثم نقم بعمل فانكش و نطبق المثال
المثال صحيح على السيكوال سيرفر
كود :
CREATE TABLE Products (
ProductID INT PRIMARY KEY, -- رقم تعريف المنتج (يمكن أن يكون تلقائي)
ProductCode VARCHAR(20), -- كود المنتج (مثال: 1001)
Barcode VARCHAR(20) -- الباركود الكامل (مثال: 1001-1)
);
GO
INSERT INTO Products (ProductID, ProductCode, Barcode) VALUES
(1, '1001', '1001-1'),
(2, '1001', '1001-2'),
(3, '1002', '1002-1'),
(4, '1002', '1002-2'),
(5, '1003', '1003-1'),
(6, '1001', '1001-3'), -- مثال على باركود إضافي لنفس كود المنتج
(7, '1004', '1004-1');
go
-- دالة للحصول على أعلى رقم تسلسلي للباركود
Alter FUNCTION GetMaxSerialNumber (@ProductCode VARCHAR(20))
RETURNS INT
AS
BEGIN
DECLARE @MaxSerialNumber INT = 0
SELECT @MaxSerialNumber = MAX(CAST(SUBSTRING(Barcode, 6, LEN(Barcode)) AS INT))
FROM Products
WHERE ProductCode = @ProductCode
RETURN @MaxSerialNumber
END;
GO
-- مثال للاستخدام
DECLARE @ProductCode VARCHAR(20) = '1001';
DECLARE @MaxSerialNumber INT = dbo.GetMaxSerialNumber(@ProductCode);
-- إنشاء الباركود الجديد
DECLARE @NewBarcode VARCHAR(20) = @ProductCode + '-' + CAST(@MaxSerialNumber + 1 AS VARCHAR(10));
أما على الفيجوال بيسك
كود :
Imports System.Data.SqlClient
Imports System.Text.RegularExpressions ' لاستخدام التعابير النمطية
' دالة لجلب أعلى رقم تسلسلي للباركود
Function GetMaxSerialNumber(productCode As String) As Integer
Dim maxSerialNumber As Integer = 0
' الاتصال بقاعدة البيانات (استبدل بيانات الاتصال بقاعدة بياناتك)
Dim connectionString As String = "Data Source=YourServerAddress;Initial Catalog=YourDatabaseName;User ID=YourUsername;Password=YourPassword;"
Using connection As New SqlConnection(connectionString)
connection.Open()
' إنشاء كائن الأمر SQL
Dim command As New SqlCommand("SELECT Barcode FROM Products WHERE ProductCode = @ProductCode", connection)
command.Parameters.AddWithValue("@ProductCode", productCode)
' تنفيذ الأمر وقراءة البيانات
Using reader As SqlDataReader = command.ExecuteReader()
While reader.Read()
Dim barcode As String = reader("Barcode").ToString()
' استخدام التعابير النمطية لاستخلاص الرقم التسلسلي
Dim match As Match = Regex.Match(barcode, "-" & "(\d+)$") ' \d+ لأرقام فقط
If match.Success Then
Dim serialNumber As Integer = CInt(match.Groups(1).Value)
If serialNumber > maxSerialNumber Then
maxSerialNumber = serialNumber
End If
End If
End While
End Using
End Using
Return maxSerialNumber
End Function
' مثال للاستخدام
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim productCode As String = TextBox1.Text ' الكود المدخل (مثال: 1001)
Dim maxSerialNumber As Integer = GetMaxSerialNumber(productCode)
' إنشاء الباركود الجديد
Dim newBarcode As String = productCode & "-" & (maxSerialNumber + 1)
' عرض الباركود الجديد
Label1.Text = newBarcode
End Sub
|