تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
ازاى أطبق كود max على حقل تكست
#1
السلام عليكم 
ازاى استخدم كود جلب اعلي قيمة الباركود  لكن الحقل نوعية تكست 
ودة طريقة تسجيل الباركود 
1001-1
1001-2
 يوجد حقل اخر خاص بالكود فقط
1001

ازاى لو كتبت 1001
يتم جلب الباركود 
1001-3
الرد }}}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاته!

لحل هذا الأمر، يمكنك استخدام 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(queryconnection))
 
           {
 
               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 senderEventArgs e)
 
   {
 
       string inputCode TxtInputCode.Text// قيمة الكود المدخل من TextBox
 
       if (!string.IsNullOrWhiteSpace(inputCode))
 
       {
 
           GenerateBarCode(inputCode);
 
       }
 
       else
        
{
 
           MessageBox.Show("الرجاء إدخال الكود!""خطأ"MessageBoxButtons.OKMessageBoxIcon.Error);
 
       }
 
   }

الرد }}}
تم الشكر بواسطة: new_programer , princelovelorn
#3
وعليكم السلام ورحمة الله وبركاته
أرجو أن تفيدك هذة الطريقة
ولكن راعي تغيير اسم الجدول 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`.
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد }}}
تم الشكر بواسطة: new_programer , new_programer
#4
قومت بالتعديل على هذا الكود من الرد استاذى الفاضل   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()
الرد }}}
تم الشكر بواسطة:
#5
السلام عليكم 
بالنسبة للسيكوال سيرفر
نقوم بالاتي انشاء جدول و عمل مدخلات عشوائية ثم نقم بعمل فانكش و نطبق المثال
المثال صحيح على السيكوال سيرفر

كود :
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
التميز و الابداع شعاري
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: