ورود

View Full Version : مبتدی: عدم ثبت شماره تكراري در اكسس



ali162
شنبه 02 اردیبهشت 1391, 18:41 عصر
با عرض سلام
من يك برنامه دبيرخانه با زبان ويژوال بيسيك 6 دارم مي نويسم كه متاسفانه به يك مشكل برخوردم و اون مشكل هم اينه كه در قسمت ثبت شماره نامه هاي ارسالي ميخوام شماره نامه هايي كه قبلاً توسط كاربر ثبت شده را دوباره ثبت نكند و يك پيغام مبني بر تكراري بودن شماره نامه بدهد .
خواهش مي كنم كه اگر كدي و يا سورسي در اين مورد داريد من را راهنمايي كنيد.

رامین مرادی
شنبه 02 اردیبهشت 1391, 19:40 عصر
خوب سعی کن کدت رو به صورت اتو نامبر باشه یا آخرین کد ثبت شده رو به صورت اتوماتیک بگیر و +1 کن بعد دیگه نیازی نباشه کد رو کاربر وارد کنه
در جواب سوال خودتون هم این:

rst.open "select * from tbl1 where id_name=" & val(text1.text)
if rst.recordcount>0 then
msgbox"in code sabt shode !!"
end if
rst.close

ali162
یک شنبه 03 اردیبهشت 1391, 15:42 عصر
با سلام خدمت كاربر vb-proj (http://barnamenevis.org/member.php?146794-vb-proj)
من از اينكه گفته ايد كدم به صورت اتو نامبر باشه و +1 بكنه چيزي نفهميدم
هم چنين در كدي كه گذاشتيد اين كد چي هست و بايد در كجا و براي كدام عملگر نوشته شود لطفاً بيشتر توضيح بدهيد.
اگر امكانش هست كه سورسش را بگذاريد خيلي ممنون ميشوم

رامین مرادی
دوشنبه 04 اردیبهشت 1391, 11:26 صبح
لطفا" برنامتون رو بزارید تا بدونم که شما از adodc استفاده میکنید یا adodb تا بتونم بهتر راهنماییتون کنم

ali162
سه شنبه 05 اردیبهشت 1391, 16:52 عصر
از adodc استفاده مي كنم.
برنامه ام رو چه جوري بزارم توي اينجا؟

رامین مرادی
چهارشنبه 06 اردیبهشت 1391, 17:42 عصر
هنگام ارسال پست از کنار شکلک یاهو کلید ضمیمه ر بزن و تویه کادری که باز میشه فایلت رو از کامپیوتر انتخاب کن بعد آپلود رو بزن البته حالت پیشرفته رو از قسمت پایین محلی که پست می زنی رو انتخاب کن

ali162
جمعه 08 اردیبهشت 1391, 10:11 صبح
[سلام
برنامه رو براتون ارسال كردم و فقط تا الان قسمت ثبت نامه هاي ارسالي را توانستم تقريباً تمام كنم ولي در بخش شماره هاش گير كردم اگر شما لطف كنيد به من كمك كنيد ممنون مي شم
در ضمن نتونستم توي اينجا براتون آپلود كنم به همين خاطر جاي ديگه اي آپلود كردم
http://nesen.persiangig.com/other/dabir.rar

ali162
جمعه 08 اردیبهشت 1391, 21:32 عصر
من اين برنامه ام را خيلي وقته كه براتون فرستادم و منتظر اينم كه چه جوري بايد اين مشكل شماره رو با كمك و همياري شما حلش كنم
دستت در نكنه منتظر جوابم

beyond
جمعه 08 اردیبهشت 1391, 21:59 عصر
بانک اطلاعاتی رو با خود اکسس مایکروسافت بسازید. یه نوع داده به اسم "Auto Number " داره. نوع فیلد رو باید Auto number انتخاب کنید.

eidazha
جمعه 08 اردیبهشت 1391, 22:10 عصر
سلام
شما مي تونيد شماره هر فيلد (ID) رو به عنوان شماره نامه استفاده كنيد كه در اين صورت هيچ شماره تكراري نخواهد بود ، اما اگر ميخواهيد به صورت دستي شماره نامه وارد بشه بايد با query SQL فيلد شماره نامه رو چك كنيد كه در صورتي شماره اي همانند شماره ثبت شده يافت شد پيغامي مبني بر اينكه شماره تكراري است بده در غير اين صورت اقدام به ثبت نامه كنه

ali162
یک شنبه 10 اردیبهشت 1391, 15:45 عصر
اين شماره ID كه شما مي گيد درسته خودمم امتحانش كردم و لي اگه دقت كنيد به اين صورت هستش كه :
اگر شما يك نامه را با شماره 10 ثبت كرديد و بعد خواستيد آن را حذف كنيد و جاي آن نامه ديگري را ثبت كنيد اكسس ديگر شماره 10 را ثبت نكرده و شماره 11 را در فيلد Id مي نويسد. بنابراين نمي شود از اين روش استفاده كرد
من يك ايده ديگري رادرم آن هم اين است كه شماره نامه را يك متغيير فرض مي كنيم و در هر بار ثبت نامه اين متغيير را +1 مي كنيم ولي اين ايده را نمي توانيم به كد برنامه نويسي ويژوال بيسيك 6 تبديل كنم لطفا شما كمكم كنيد.

M.T.P
یک شنبه 10 اردیبهشت 1391, 16:25 عصر
دوست عزیز اگه لزومی نداره که شماره نامه ها پشت سر هم باشه همون فیلد ID از همه بهتره
اما اگه می خواهید پشت سر هم باشه و از اون مهمتر اینکه اگه نامه ای حذف شد شمارش به شماره
نامه جدید اختصاص داده باشه:

1. یک فیلد عددی برای شماره نامه ایجاد کنید.

2. یک جدول Temp داشته باشید که شماره نامه های حذف شده رو ذخیره کنه
- با این حال اگه این جدول دارای رکوردی بود این شماره نامه ها در اولویت هستند و ثبت کنید.
- اگه این جدول چیزی توش نبود با تابع MAX بزرگترین عدد فیلد شماره نامه رو بگیرید و بعلاوه یک کنید.

در مورد تابع MAX هم اینجا (http://www.w3schools.com/sql/sql_func_max.asp) رو ببینید.

ali162
دوشنبه 11 اردیبهشت 1391, 16:41 عصر
ميشه كدي يا سورسي از روشي كه توضيح داديد توي اين تايپيك بزاريد چون همانطوري كه در ابتدا گفتم من مبتدي هستم و به اين حرفه اي كه شما گفتيد متوجه نميشم پس بيشتر توضيح دهيد

ali162
چهارشنبه 13 اردیبهشت 1391, 15:03 عصر
بابا يه كمكي به ما بكنيد توش موندم

ali162
شنبه 16 اردیبهشت 1391, 15:56 عصر
يعني كسي اينجا اين مشكل من رو بلد نيست كه حلش كنه؟

ali162
یک شنبه 17 اردیبهشت 1391, 19:08 عصر
پس اين انجمن به چه دردي مي خوره؟

رامین مرادی
جمعه 22 اردیبهشت 1391, 12:36 عصر
ببین کارت راحته خودت کد بنویس بگو کجاش مشکل داری
یه تابع بنویس که اعداد داخل بانک رو تو آرایه بریزه بعد با یه حلقه از ابتدای آرایه شروع به چک کردن عدد داخل آرایه با شمارنده حلقه کن اگه عدد شمارنده با عدد آرایه یکی نبود پس این شماره وجود نداره و می تونی اونو استفاده کنی در ضمن یادت باشه که هنگام ریختن اعداد در داخل آرایه اونو به صورت صعودی مرتب کنی این روش ساده ترین روشه اگه خودت هم نتونستی بنویسی بگو برات حل می کنم:بوس:

ali162
جمعه 22 اردیبهشت 1391, 12:48 عصر
دستت درد نكنه من يك برنامه نويس مبتدي هستم و با آرايه و تابعي كه مي گيد آشنايي ندارم لطفاً كدي از اين بخش يا سورس آن را بگذاريد.

رامین مرادی
دوشنبه 25 اردیبهشت 1391, 11:18 صبح
ببین کد زیر میاد و شماره های نامت رو می گیره و شماره خالی رو برات نشون می ده

"rst.open"select id from tbl1
for i=1 to rst.recordcount
if rst.filde(1)=i then
rst.movenext
else
text1.text=i
'شماره خالی در بانک
end if
next


خودم تست نکردم این کد رو چک کن ببین کار می کنه یا نه

ho3ein282
دوشنبه 25 اردیبهشت 1391, 12:02 عصر
من يك ايده ديگري رادرم آن هم اين است كه شماره نامه را يك متغيير فرض مي كنيم و در هر بار ثبت نامه اين متغيير را +1 مي كنيم ولي اين ايده را نمي توانيم به كد برنامه نويسي ويژوال بيسيك 6 تبديل كنم لطفا شما كمكم كنيد.

Dim N As Long
If Adodc1.Recordset.RecordCount = 0 Then
Adodc1.Recordset.AddNew
Text1.Text = "101"
Else
Adodc1.Recordset.MoveLast
N = Text1.Text + 1
Adodc1.Recordset.AddNew
Text1.Text = N
End If


شماره گزاری ها از عدد 101 شروع میشن و نکته مهمی که باید توجه داشته باشی اینه که نباید هیچ سطری از جدول رو حذف کنی ، با استفاده از ویرایش رکورد ها رو عوض کن