نمایش نتایج 1 تا 15 از 15

نام تاپیک: عدم استفاده از AutoNumber در فیلدهای ID

  1. #1
    مدیر بخش آواتار Abbas Amiri
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    اصفهان
    پست
    2,327

    عدم استفاده از AutoNumber در فیلدهای ID

    بسیای از دوستان احتمالا برای راحتی کار جهت فیلدهای ID یا شناسه جداول از دیتاتایپ AutoNumber استفاده می کنند . درحالی که از شماره های جاافتاده که ایجاد می شوند ناراضی هستند روشی که اکثر کاربران استفاده می کنند نوشتن حداکثر چند خط کد واستفاده از یک خط برای درج مقدار ID جدید است
    کافیست در روال Form_Current مانند زیر عمل کنید

    Private Sub Form_Current()
    If IsNull(MyIDField) Then
    MyIDField = NewID(Me.RecordSource)
    End If
    End Sub



    تابع NewID را در یک ماژول کپی کنید وهرزمان رکورد جدیدی ایجاد می شود آنرا صدا بزنید .اگر اولین فیلد جدولتان همان ID آن است به آرگومان دوم نیاز نیست ولی درغیر اینصورت شماره فیلد در جدول(اینکه فیلد موردنظر چندمین فیلد درجدول است)که از صفر شروع می شود الزامی است


    Public Function NewID(TableName As String, Optional FieldIdx As Integer = 0) As Long
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset(TableName)
    If rs.RecordCount Then
    rs.MoveLast
    NewID = CLng(rs.Fields(FieldIdx).Value) + 1
    Else
    NewID = 1
    End If
    rs.Close
    Set rs = Nothing
    '************************************************* *******
    'NewID = Nz(DMax("ID", TableName), 0) + 1
    '************************************************* ********
    End Function



    لازم به ذکر است که خودم تمام فیلدهای شناسه جداول را ID نامگذاری کرده ام و از کد میان ستاره ها استفاده میکنم
    آخرین ویرایش به وسیله Abbas Amiri : جمعه 02 دی 1390 در 16:33 عصر

  2. #2
    مدیر بخش آواتار Abbas Amiri
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    اصفهان
    پست
    2,327

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    ازآنجا که در بسیاری از جدوال جهت شناسه از نامهای غیر ID استفاده میشود ، وهمچنین در تابع DMax حتما باید نام فیلد ذکر گردد ، با روش فوق می توان به هرفیلد با هرنام ودر هرجای جدول دسترسی داشت.

  3. #3
    مدیر بخش آواتار Abbas Amiri
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    اصفهان
    پست
    2,327

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    بنده هم طرفدار اخلاقیات هستم واز نصیحتتان ممنون . اما لطفا توضیح دهید منظورتان محل استفاده از تابع است یا پست سوم.

  4. #4
    کاربر دائمی
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    همه جای ایران سرای من است
    سن
    41
    پست
    190

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    آقای Zero Defect فکر می کنم مطالب بیان شده در پست شماره 4 ، خواننده را دچار سوء تفاهم می کند لطفا تجدید نظر نمایید.

  5. #5
    کاربر دائمی آواتار Rasool-GH
    تاریخ عضویت
    دی 1387
    محل زندگی
    خراسان
    پست
    704

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    سلام
    جسارتا خدمت دوستان عرض كنم بنده از اين روش استفاده ميكنم در صورت امكان معايب اين روش رو توضيح بدين
    در Defult Value فيلد مورد نظر اين كد رو قرار ميدم
     
    =Nz(DMax("Field Name";"Table Name");0)+1

    در اين كد به جاي 0 هر عدد دلخواه مورد نياز كه بخوام از اون عدد شمارش شروع بشه رو قرار ميدم

  6. #6
    کاربر دائمی آواتار Mohammad_chz
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    جزیره ناشناخته
    سن
    46
    پست
    102

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    با سلام

    ببخشید جسارت نباشه خدمت اساتیدمحترم.
    ولی اصولا استفاده از دیتا تایپ اتونامبر (یا فیلد ID) جهت کلید اصلی مخالف قواعد نرمال سازی پایگاه داده است. شاید در 100 جدول شما یکبار مجبور بشید از فیلدی با این مشخصات به عنوان کلید اصلی استفاده کنید. که البته اون هم دیگه اینهمه بحث نیاز نداره.

  7. #7
    کاربر دائمی آواتار Rasool-GH
    تاریخ عضویت
    دی 1387
    محل زندگی
    خراسان
    پست
    704

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    اگر شما از ديدگاه اموزشي به اين مطلب نگاه كنيد متوجه ميشين كه براي افرادي كه تازه شروع به كار كردن و مدام با اين مسئله روبرو هستن كه نميدونن بايد در برنامه براي يك ستون عددي افزايشي بايد از اتونامبر استفاده كنن يا كد نويسي كنن بسيار مفيده و ضمنا راهكارهاي مختلفي هم براي انجام كارهاي مشابه معرفي ميشه

  8. #8
    کاربر دائمی آواتار ARData
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    Karaj
    سن
    40
    پست
    431

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    از این کد استفاده کنید تا برای همیشه بی نیاز شوید البته این حالت برای فرم هایی خوبه که در حالت single form هستند :
    On Error Resume Next
    If Form.NewRecord Then
    LBLCurrec.Caption = "..."
    Else
    LBLCurrec.Caption = CurrentRecord()
    End If

  9. #9

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    سلام آقای امیری
    میخواستم اولا خواهش کنم یک نمونه از این مدل آی دی سازی آپلود کنید و در ادامه سوال من این است که این مدل مربوط به تیبل است یا فرم که در قسمت current فرم کد را باید وارد کرد؟!
    اساسا ID را روی جذول تغییر می دهد؟ یا خیر؟

    دوما-اگر من بخواهم آی دی بسازم که علاوه بر عدد مقدار حرف پیشوند داشته باشد در کجای کد شما باید اصلاح شود؟
    مشروح دلیل این کار را خدمتتان در انتها پست عرض می کنم

    سوما-آیا حالتی وجود دارد که این پیشوند که در دوما روی آن بحث شد برگرفته از مقدار فیلدی در رکوردی در جدول دیگر این دیتا بیس باشد؟


    دلیل این کار این است که من این دیتا بیس را به چند کاربر مختلف می دهم و میخواهم همه گرفته شده را در یک جدول اپند کنم و آیدی جدول اپند شده جدید خود محتوای یک سلکت لیست دیگر است که آن هم اپند شده است و تجمیع است و نباید آیدی بعد از اپند تجمیع شود و باید بر حسب هر کاربر باقی بماند.
    مثال: گروه الف نیرو هایی با آیدی الف-1 و الف-2 را دارد و گروه ب نیروهایی با آیدی ب-1 ب-2 را از سلکت لیست انتخاب نیروی انسانی گروه انتخاب می کند که این سلکت لیست از کوئری متصل به تیبل نیرو انسانی ها منشا می گیرد. می خواهم وقتی این دو جدول (گروه و نیرو انسانی) را از هر دو کاربر می گیرم و تجمیع می کنم سلکت لیست ها و انتخاب هاشان خراب نشود!!!

  10. #10

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    آقای امیری
    خودم قسمت اولا رو متوجه شدم،لطفا راجع به آی دی سازی کاستومایز شده که می شود پیشوندی متناسب با محتوای رکورد دیگر جدول دیگر افزود راهنمایی کنید

  11. #11
    مدیر بخش آواتار Abbas Amiri
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    اصفهان
    پست
    2,327

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    نقل قول نوشته شده توسط ahmadrezaahmad مشاهده تاپیک
    آقای امیری
    خودم قسمت اولا رو متوجه شدم،لطفا راجع به آی دی سازی کاستومایز شده که می شود پیشوندی متناسب با محتوای رکورد دیگر جدول دیگر افزود راهنمایی کنید
    به پست زیر مراجعه کنید

    درج سال در شماره نامه و ریست شدن شماره در سال جدید

  12. #12

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    Portable b.zipسلام
    ممنونم
    من لینک شما رو دیدم و کدش رو رفتم توابعش رو از help آفیس آنالیز کردم و سعی کردم با مدل خودم تطبیق بدم ولی ارور می ده،فایل رو براتون می زارم و همچنین کد رو لطفا ایراد کار رو بگید بهم:

    Function NewCode(yr As String) As String
    K = Nz(DMax("ID", "list", Mid("id", 2, 1)), "yr" & "-" & "-00")
    j = Split(K, "-")
    N = Val(j(1)) + 1
    NewCode = j(0) & "-" & Format(N, "00")
    End Function


    و در فرم این مدلی صد زدم:

    Private Sub Form_Current()
    ID = NewCode(hava)

    End Sub


    مدلی که می خوام ایدی سازی کنه اینه :مثلا با صدا زدن(NewCode(hava :
    hava01
    hava02
    hava03 و..
    را بسازد!!

    ****اگر مشکل کدم را فهمیدی و این نیاز حل شد،می خوام بدونم آیا راهی هست که این کلمه hava رو از رکورد اول جدول دیگری با نام tbl_group و فیلد group_name اش بگیرد!!!اگر محتوا فارسی باشد مشکلی پیش می آید؟
    ممنون!!!
    آخرین ویرایش به وسیله ahmadrezaahmad : دوشنبه 31 تیر 1392 در 18:26 عصر دلیل: افزودن پیوست

  13. #13
    مدیر بخش آواتار Abbas Amiri
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    اصفهان
    پست
    2,327

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    نقل قول نوشته شده توسط ahmadrezaahmad مشاهده تاپیک
    Portable b.zipسلام
    ممنونم
    من لینک شما رو دیدم و کدش رو رفتم توابعش رو از help آفیس آنالیز کردم و سعی کردم با مدل خودم تطبیق بدم ولی ارور می ده،فایل رو براتون می زارم و همچنین کد رو لطفا ایراد کار رو بگید بهم:

    Function NewCode(yr As String) As String
    K = Nz(DMax("ID", "list", Mid("id", 2, 1)), "yr" & "-" & "-00")
    j = Split(K, "-")
    N = Val(j(1)) + 1
    NewCode = j(0) & "-" & Format(N, "00")
    End Function


    و در فرم این مدلی صد زدم:

    Private Sub Form_Current()
    ID = NewCode(hava)

    End Sub


    مدلی که می خوام ایدی سازی کنه اینه :مثلا با صدا زدن(NewCode(hava :
    hava01
    hava02
    hava03 و..
    را بسازد!!

    ****اگر مشکل کدم را فهمیدی و این نیاز حل شد،می خوام بدونم آیا راهی هست که این کلمه hava رو از رکورد اول جدول دیگری با نام tbl_group و فیلد group_name اش بگیرد!!!اگر محتوا فارسی باشد مشکلی پیش می آید؟
    ممنون!!!
    از تابع زیر استفاده کنید

    Function NewCode(prefix As String) As String
    K = Nz(DMax("ID", "list", "Left(id," & Len(prefix) & ")='" & prefix & "'"), prefix & "00")
    N = Val(Right(K, Len(K) - Len(prefix))) + 1
    NewCode = prefix & Format(N, "00")
    End Function


  14. #14

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    سلام واقعا متشکرم
    حالا سوالم اینه اگه بخوای این پیشوند آیدی عنصر سطر یک فیلد یک جدول دیگر با شد چگونه اونو صدا می زنیم!؟
    مثلا به جای
    ID = NewCode("hava")

    چیزی باشد که مثلا بگوید :
    ID = NewCode(tbl_group.group_name.recordser1)

    یعنی اساسا یک عنصر در سطر ایکس و فیلد ایگرگ و جدول زد رو چجوری می شه صدا زد؟
    مرسی

  15. #15
    مدیر بخش آواتار Abbas Amiri
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    اصفهان
    پست
    2,327

    نقل قول: عدم استفاده از AutoNumber در فیلدهای ID

    نقل قول نوشته شده توسط ahmadrezaahmad مشاهده تاپیک
    سلام واقعا متشکرم
    حالا سوالم اینه اگه بخوای این پیشوند آیدی عنصر سطر یک فیلد یک جدول دیگر با شد چگونه اونو صدا می زنیم!؟
    مثلا به جای
    ID = NewCode("hava")

    چیزی باشد که مثلا بگوید :
    ID = NewCode(tbl_group.group_name.recordser1)

    یعنی اساسا یک عنصر در سطر ایکس و فیلد ایگرگ و جدول زد رو چجوری می شه صدا زد؟
    مرسی
    در این مورد می توانید از دستور DLookup استفاده کنید :


    ID = NewCode(DLookup("group_name", "tbl_group","ID=5"))




    بجای قسمت شرط آن عبارت مناسب را بنویسید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •