PDA

View Full Version : مثالی برای پایگاه داده



mostafa_C
جمعه 10 اسفند 1386, 18:26 عصر
سلام...
می بخشید که عنوان تاپیک خوب انتخاب نشده، ولی خوب اسم دیگه ای به خاطرم نرسید.
می خواستم ببینم کسی یه برنامه نداره که توی اون اطلاعات یه فرم رو در دیتابیسی که داره ذخیره کنه؟
به تصویر ضمیمه شده توجه کنید: (لطفاً)
من می خوام که این فرمی رو که ساختم، وقتی اطلاعاتی توش نوشته میشه ذخیره بشه توی دیتابیسم.
کسی یه برنامه مثل این نداره بزاره ببینم چجوری کار کرده؟
یا کسی می تونه جواب سوالم رو بده؟
ممنون میشم پاسخ بدید.
خیلی بهش نیاز دارم. باز هم تشکر می کنم :قلب:

mosab_vb
جمعه 10 اسفند 1386, 19:04 عصر
این یه مثال.زیاد جالب نیست اما می تونه خوب بشه.فیلد هاش دقیقا فیلدهایی هستش که تو داروخانه ها استفاده میشه.

اوبالیت به بو
جمعه 10 اسفند 1386, 20:07 عصر
http://barnamenevis.org/forum/showthread.php?t=46430
http://barnamenevis.org/forum/showthread.php?t=46430

mostafa_C
جمعه 10 اسفند 1386, 21:01 عصر
ممنون.
فعلاً دارم برنامه ای که mosab_vb (http://barnamenevis.org/forum/member.php?u=38500) عزیز لطف کردن و لینک دادن رو چک می کنم.
ولی یه مشکلی دارم.
اون هم اینه که من می خوام هر دفعه که فرد جدیدی میخواد ثبت بشه، فیلد ID (شماره) که TexTBox اش رو هم Lock و Enable اش رو False کردم، یک شماره خودش بندازه.
حالا باید چه کدی بنویسم که با عدد قبلی جمع بشه و در رکوردست جدید بزاره؟
ممنون میشم به این سوال هم پاسخ بدید.

اوبالیت به بو
جمعه 10 اسفند 1386, 21:26 عصر
البته من یه همچین چیزی رو ندیدم.
ولی باید مقدار اون فیلد رو با 1 جمع کنی.

Data1.Recordset.Field("ID")=Data1.Recordset.Field("ID")+1

mostafa_C
جمعه 10 اسفند 1386, 21:30 عصر
ممنون.
اما الان یه مشکل دیگه برام پیش اومده.
وقتی که دکمه ذخیره رو میزنم، این اخطاری که توی تصویر توی ضمیمه دیده میشه، داده میشه. ولی کدی که ازش اشکال میگیره اینه:

Private Sub cmdsave_Click()
Data1.Recordset.Update
Data1.Refresh
Data1.Recordset.MoveLast
lock_on
cmdnewmember.Enabled = True
cmdsave.Enabled = False
End Sub
که به نظر هیچ مشکلی هم نداره...
یعنی مشکل از کجاست؟:عصبانی++:

mostafa_C
جمعه 10 اسفند 1386, 21:49 عصر
سلام.
می بخشید که دوباره پیغام میدم ولی خوب مجبورم اخه.
نمی دونم مشکل فرمم کجاست که حتی این یه خط کدی که دوست عزیز obalitjoOon (http://barnamenevis.org/forum/member.php?u=47457) دادن هم با مشکل برمی خوره. من فرم و کل پروژه رو آپلود کردم، اگر زحمتی نیست، دوستان ببینن مشکل از کجاست، خیلی ممنون میشم. :خجالت:
البته فکر نکنم مشکل خاصی داشته باشه این فرم و پروژه ای که ساختم ولی نمی دونم چشه؟
همش 9.1 کیلوبایت میشه که به چند ثانیه دانلود میشه، پس لطفاً کمک کنید.
از کمپاننت خاصی استفاده نکردم به جز یه نوع دکمه که فایلش رو الان پیدا نکردم بزارم.
اگر مشکلی بود، دنبالش می گردم و میزارم :خجالت:
باز هم تشکر می کنم

mosab_vb
شنبه 11 اسفند 1386, 12:43 عصر
Private Sub cmdnewmember_Click()
Dim id As Integer
If Data1.Recordset.RecordCount <> 0 Then
Data1.Recordset.MoveLast
id = Data1.Recordset.RecordCount + 1
lock_off
Data1.Recordset.AddNew
txtcome.Text = Date
txtid.Text = id
cmdnewmember.Enabled = False
cmdsave.Enabled = True
Else
lock_off
Data1.Recordset.AddNew
txtcome.Text = Date
txtid.Text = 1
cmdnewmember.Enabled = False
cmdsave.Enabled = True
End If
End Sub
شما یکی از فیلدهاتون به نام txtcome مشکل داره.باید قبل از ذخیره مقدار دهی بشه.تو کد برات نوشتم.

mostafa_C
شنبه 11 اسفند 1386, 15:09 عصر
باز هم سلام،
از کدی که شما دادید هم استفاده کردم، ولی اینجا هم مشکل حل نشده و همون اخطاری که اینجا میداد رو میده:
http://barnamenevis.org/forum/attachment.php?attachmentid=15030&stc=1&thumb=1&d=1204306139

mosab_vb
شنبه 11 اسفند 1386, 20:35 عصر
می خواین این برنامه رو کامل کنم آپلود کنم.من این برنامه رو اجرا کردم همین اخطار رو می داد.بعد این تغییرات رو روش انجام دادم.البته یه پایگاه دیگه(جدول جدید) از دوباره ساختم.شما هم جدولت رو از دوباره بساز.رو فیلدهای جدولت حساسیت نشون نده.

mosab_vb
شنبه 11 اسفند 1386, 20:49 عصر
این داره درست کار می کنه.یه نگاه بکن.

mostafa_C
شنبه 11 اسفند 1386, 21:26 عصر
یه سوال دیگه هم دارم. (یعنی چند سوال دیگه)
بعضی از فیلد هایی که انتخاب کردم، مثلا برای جعبه متن شماره تلفن فیلدی که براش می خوام بسازم، از توع Integer انتخاب کردم، ولی خوب چون تعداد کاراکتر ها 7 تا میشه اون تو جا نمیشه. برای اونها باید نوع متغیر رو بیشتر بگیرم یا راه دیگه ای هست؟
برای اینکه مثلا کسی انتخاب کنه که تعداد بیماران مؤنث نشون داده بشن، چیکار باید بکنم؟ آمار رو چجوری نشون بدم؟

اوبالیت به بو
شنبه 11 اسفند 1386, 21:41 عصر
البته برنامتون رو هنوز ندیدم ولی:
مسلماً Integer نمی تونه پشتیبان خوبی باشه نهایت و حداکثر عددی که داره تا 32767
هست.
بهتره از Double استفاده کنی.
بیماران مونث هم باید یه Flag براشون تعیین کنی. مثلاً False ها مونث ها هستن. اون موقع باید Flag هایی که False هستند رو فراخوانی کنی.

mostafa_C
شنبه 11 اسفند 1386, 22:09 عصر
درسته، ولی این اعداد هم تقریبا همون کار رو می کنن. Byte انتخاب کردم براشون که 1 بایت بیشتر جا نمی گیره.
دوستان این سوال جدید من رو کسی ندید؟
البته خودم به یه چیزهایی رسیدم، که مثلا باید از ابزار Designer استفاده کنم ولی نمی دونم دقیقاً چجوری؟

اوبالیت به بو
شنبه 11 اسفند 1386, 22:14 عصر
ولی Byte نمی تونه. تا 255 بیشتر نیست.

mostafa_C
شنبه 11 اسفند 1386, 22:20 عصر
نه، من بایت رو برای مرد و زن (جنسیت) انتخاب کردم. که فقط دو تا عدد 1 و 2 رو میگیره.
برای سرچ کردن یه عضو (مثلاً بر حسب نامش) توی دیتابیس باید از چه کدی استفاده کنم؟

اوبالیت به بو
شنبه 11 اسفند 1386, 22:29 عصر
هم از Find کنترلتون. (Adodc یا Data)
هم از SQL. اگه سرعت واست مهم از این روش استفاده کن.

mostafa_C
شنبه 11 اسفند 1386, 22:40 عصر
آخه این فقط چهار گزینه Find First و Find Last و Find Next و find Previous داره و من چجوری می تونم ازش استفاده کنم؟

اوبالیت به بو
شنبه 11 اسفند 1386, 23:12 عصر
این کد نمونه ساده جستجو با Find بود. البته اگه تعداد رکوردهاد زیاد باشن زمان زیادی صرف جستجو میشه. زیاد منظورم 1 ساعت نیست یه خورده دیر به نتیجه می رسه.

Adodc1.Recordset.MoveFirst
Adodc1.Recordset.Find ("Name='" + SearchTxt.Text + "'")
If Adodc1.Recordset.EOF = True Then
MsgBox "äÇã ãæÑÏ äÙÑ íÇÝÊ äÔÏ", vbInformation, "íÇã - ÌÓÊÌæ"
Else
MsgBox "äÇã ãæÑÏ äÙÑ íÇÝÊ ÔÏ", vbInformation, "íÇã - ÌÓÊÌæ"
End If


کنترل Data هم مثل این می مونه. یه متد داره NoMatch(فکر کنم) که اگه موردی یافت نشه اعلام می کنه.

mostafa_C
شنبه 11 اسفند 1386, 23:16 عصر
یه سوال دیگه...
من چجوری باید اعضاء ام رو نشون بدم؟
مثلا میگم که تمام افرادی که از داریوی سینوکس استفاده می کنن رو نشون بده، خوب اونها رو باید توی یه کنترلی نشون بده. از چه ابزاری باید استفاده کنم؟

این کدی که شما دادی ماله Adodc هست ولی من از Data استفاده می کنم. :(

اوبالیت به بو
شنبه 11 اسفند 1386, 23:32 عصر
ولی من باز هم نگرفتم قضیه چیه؟به چه صورت؟ فقط توی رکورد ست بعدی می بینه.. یا باید توی یه حلقه بندازمش؟
ببین روش های مختلفی وجود داره من خودم زیاد از Data خوشم نمیاد نمی خوام سر به تنش باشه ولی با این حال مجبورم بگم:
با استفاده از FindFirst:


Criteria= Criteria = "vFamily" & " = '" & txtfind.Text & "'"
Data1.Recordset.FindFirst Criteria
If Data1.RecordSet.NoMatch Then
MsgBox "موردی یافت نشد", vbExclamation, ""
Else
While Data1.RecordSet.NoMatch = False
MsgBox "یافت شد"
Data1.RecordSet.FindNext Criteria
Wend
End If

FindNext درواقع جستجوی بعدی رو آماده می کنه.

این یه روش با استفاده از حلقه و تساوی فیلد و Text.

Do While Data1.Recordset.EOF = False
If Trim(Data1.Recordset.Fields!Name) = Trim(TxtSearchName.Text) Then
Exit Do
End If
Data1.Recordset.MoveNext

این یه روش از طریق حلقه هستش که تا به آخرین رکورد نرسه جستجو ادامه داره و اگه مقدار درون TextBox برابر با فیلد مورد نظر باشه جستجو موفقیت آمیز هستش.

اوبالیت به بو
شنبه 11 اسفند 1386, 23:35 عصر
می تونی از SQL تویه Data استفاده بکنی.

Dim SQL As String
SQL = "SELECT * FROM Table1 WHERE Name='" & txtName.Text & "'"
Data1.Recordset.Open SQL, DB, adOpenStatic, adLockBatchOptimistic

سرعتش بیشتره. اعتماد کن به SQL

majjjj
یک شنبه 12 اسفند 1386, 03:43 صبح
ممنون.
فعلاً دارم برنامه ای که mosab_vb (http://barnamenevis.org/forum/member.php?u=38500) عزیز لطف کردن و لینک دادن رو چک می کنم.
ولی یه مشکلی دارم.
اون هم اینه که من می خوام هر دفعه که فرد جدیدی میخواد ثبت بشه، فیلد ID (شماره) که TexTBox اش رو هم Lock و Enable اش رو False کردم، یک شماره خودش بندازه.
حالا باید چه کدی بنویسم که با عدد قبلی جمع بشه و در رکوردست جدید بزاره؟
ممنون میشم به این سوال هم پاسخ بدید.
فکر کنم برای اینکار از فیلد های عددی خودکار استفاده کننین بهتر باشه البته من برنامه رو ندیدم

حسین علوی
پنج شنبه 23 اسفند 1386, 03:17 صبح
Dim SQLS As String
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\bank2.MDB;Persist Security Info=False"

RecSet.Open SQLS, DB, adOpenStatic, adLockBatchOptimistic
SQLS = "SELECT * FROM Table1 "
-----------------------------------------
RecSet.Fields Name! = Text1.Text
recset.AddNew

اشکال این کد چیه من میخوام با کد نویسی بدون استفاده از شیی ado مقدار داخل text1 رو در بانک اکسس ذخیره کنم

حسین علوی
پنج شنبه 23 اسفند 1386, 14:14 عصر
کسی جواب نمیده

اوبالیت به بو
پنج شنبه 23 اسفند 1386, 14:26 عصر
البته 100% منظورتون شی Adodc هستش نه Ado! به هر حال:

من میخوام با کد نویسی بدون استفاده از شیی ado مقدار داخل text1 رو در بانک اکسس ذخیره کنم
آیا به نظر شما این کار شدنی هستش؟ من ندیدم!

vahidm
پنج شنبه 23 اسفند 1386, 16:17 عصر
دوست عزیز برای اینکه شما فیلدی به صورت auto Number داشته باشی در ساخت
بانک اطلاعاتی در جدول مورد نظر باید فیلد رو از نوع long انتخاب کنی و تیکه قسمته
auto ... دقیقا نوشتش یادم نیست اونو بزاری بعدی خودش وقتی چیزی رو ثبت میکنی
خودش یکی اضافه می کنه
اگه مشکلی بود مطرح کن انشاالله بتونم حلش کنم

vahidm
پنج شنبه 23 اسفند 1386, 16:23 عصر
در صورت مشکل لطفا پیام خصوصی بدید

shahpari
پنج شنبه 23 اسفند 1386, 18:10 عصر
Dim SQLS As String
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\bank2.MDB;Persist Security Info=False"

RecSet.Open SQLS, DB, adOpenStatic, adLockBatchOptimistic
SQLS = "SELECT * FROM Table1 "
-----------------------------------------
RecSet.Fields Name! = Text1.Text
recset.AddNew

اشکال این کد چیه من میخوام با کد نویسی بدون استفاده از شیی ado مقدار داخل text1 رو در بانک اکسس ذخیره کنم

اگه منظورتون از اینکه نمی خوایید از adodc تو فرم استفاده کنید اینه که می خوایید معرفی بانک به ado از طریق کد باشه باید اول connection و record set رو تعریف کنید

توی قسمت general فرم بنویسید:

Dim mycon As New ADODB.Connection
Dim myrec As New ADODB.Recordset
dim address as string


و بعد توی قسمت form load اون رو توسط app.path مقدار دهی کنید که خودش هیشه مسیر جاری رو تشخیص بده
به این صورت:



accessfile = App.Path + "\db.mdb"
mycon.Provider = "Microsoft.Jet.OLEDB.4.0"
mycon.ConnectionString = "Persist Security Info=False;Data Source=" & address
mycon.Open
myrec.CursorLocation = adUseClient
myrec.Open "SELECT * FROM table", mycon, adOpenDynamic, adLockOptimistic, adCmdText




اگه بازم مشکلی داشتید خوشحال میشم کمک کنم

حسین علوی
پنج شنبه 23 اسفند 1386, 19:00 عصر
تشکر دوست عزیز - امتحان کنم ببینم مشکل حل شده

mostafa_C
یک شنبه 18 فروردین 1387, 18:53 عصر
دوباره سلام خدمت همگی دوستان.
بنده هنوز مشکلم حل نشده.
چند روزی بنا به دلیلی بود که سراغ کار نرفتم، برای همون نسبت به آخرین پستی که اینجا دادم، هیچ تغییری نکرده.
خوب بنده به دلیل بی تجربگی که داشتم، از Data و بانک اطلاعاتی Access استفاده کردم. اما توی نت هیچ مثال خوبی ندیدم که بتونم ازش سرمشق بگیرم.
کسی برنامه ای سراغ نداره که توش بعد از ثبت چند چیز، بشه اون ها رو جستجو کرد و به نمایش گذاشت؟ (با Data Report )
در ضمن، می خواستم بدونم، من که یه فرم حاوی تعدادی TextBox ساختم، چجوری می تونم با توجه به متنی که توی هر کدوم از جعبه متن ها بود، توی بانکم جستجو کنم و بعد یافته ها رو به نمایش بذارم؟
امیدوارم که سوالم واضح باشه.
ممنون

اوبالیت به بو
یک شنبه 18 فروردین 1387, 20:46 عصر
دوباره در ضمن، می خواستم بدونم، من که یه فرم حاوی تعدادی TextBox ساختم، چجوری می تونم با توجه به متنی که توی هر کدوم از جعبه متن ها بود، توی بانکم جستجو کنم و بعد یافته ها رو به نمایش بذارم؟
امیدوارم که سوالم واضح باشه.
ممنون
من که توضیح دادم:گریه::گیج::گریه:

mostafa_C
دوشنبه 19 فروردین 1387, 14:02 عصر
درسته.
و بنده هم تشکر کرده بودم...
ولی همین اواخر که تست کردم، (نمی دونم مشکل از کجا بود)، درست کار نمی کرد و اخطار میداد.

mostafa_C
جمعه 23 فروردین 1387, 16:28 عصر
خوب کسی یه مثال خوب که توش نشون دادن آمار داشته باشه هم پیدا نکرد؟

Tiro Pro
دوشنبه 26 فروردین 1387, 19:05 عصر
سلام
دوستان عزر میخوام که بحث رو قطع میکنم من در جستجو (با Data) اگر نوع فیلدم عددی باشد برنامه error می ده و متوقف میشه دوستان راهنمایی کنید
مثلا فیلدی دارم بنام IDCode که نوع آن Integer است ولی در جستجو که برحسب همین فیلد می خوام انجام دهم اشکال میگیره
یه سوال دیگه: من بانک اطلاعاتی خود را با ( از دو جدول جدا از هم ساخته شده) به کمک Realationship به هم وصل کردم ولی چگونه می تونم در vb6 از این ارتباط استفاده کنم(باADO) . متشکرم اگر لینکی در مورد موضوع چیزی گفته راهنمایی کنید