PDA

View Full Version : بانک اطلاعاتی



shahpari
پنج شنبه 23 اسفند 1386, 11:01 صبح
سلام و خسته نباشید دوستان



یه مشکل کوچولو برام پیش اومده که نمی دونم چطوری باید حلش کنم



1- توی فرم اصلی قراره که فقط نام و نام خانوادگی و یه کد autonumber که برای هر کارمند منحصر به فرده نمایش داده بشه و کاربر بتونه با ورود یه کد توی یه تکس باکس وارد فرم مخصوص همون کارمند بشه عمل جستجو کاملا درست عمل می کنه
و کارمند رو پیدا میکنه, با چه دستوری رکوردست فرم دوم رو ببرم به اون کارمند خاص؟؟؟؟؟؟


در ضمن از ADO استفاده کردم و کد جستجو هم این بوده:




If myrecordset.State = adStateOpen Then Set myrecordset = Nothing


myrecordset.CursorLocation = adUseClient
myrecordset.Open "select * from moshakhasat where id=" & Val(Text4.Text) & " ;", myconnection
If myrecordset.RecordCount = 0 Then

MsgBox ("not found)")
Else



کد های بالا درستن ، کدهای پائین درست عمل نمیکنه


Form2.Text1.Text = myrecordset.Fields("code
Form2.Text2.Text = myrecordset.Fields("family
Form2.Text3.Text = myrecordset.Fields("name




2- این برنامه داره برای راه آهن نوشته میشه و به هر کسی یه قسمت از برنامه نویسیش داده شده قرار نیست بانک اطلاعاتیم محتویات زیادی داشته باشه وبه دلیل سخت بودن ستاپ گیری ترجیح می دم از اکسس استفاده کنم , مشکل اینجاست که شاید تو یه قسمت دیگه برنامه نویس از بانک sql استفاده کنه این مسئله موقع سر هم بندی برنامه مشکلی پیش نمی یاره؟؟؟؟؟؟؟؟؟؟؟؟؟

اوبالیت به بو
پنج شنبه 23 اسفند 1386, 11:05 صبح
چرا نوشتین Form2.Text1.Text؟
مگه براش یه فرم جستجو نساختین؟

shahpari
پنج شنبه 23 اسفند 1386, 13:31 عصر
بله
ولی این جستجو توی فرم اول صورت میگیره و من با اون کد می خواستم بعد از این که

جستجو موفقیت امیز بود ارتباط تکس باکس رو با بانک برقرار کنم

در حقیقت بزرگترین مشکل تو این برنامه اینه که همه چی باید با کد نویسی باشه حتی تغییر رنگ لیبل ها

اوبالیت به بو
پنج شنبه 23 اسفند 1386, 13:34 عصر
خوب اگه بخواین ارتباط برقرار کنید یه بحث جداست. DataField و DataSource و.....
خوب این کارایه جانبی هم زیاد سخت نیست مثل رنگ و اسم و عکس و .... فقط یه خورده سرعت رو پایین میاره چون باید در هنگام اجرا کامپایل بشه.
میشه شما اون قسمتی رو که مشکل دارین رو بزارین.

shahpari
پنج شنبه 23 اسفند 1386, 13:41 عصر
بله حتما می زارم

در مورد سئوال دوم نمی تونید کمکم کنید؟؟

shahpari
پنج شنبه 23 اسفند 1386, 13:45 عصر
البته یه چیز رو فراموش کردم بهتون بگم

منظورشما این بود که کد هایی که برای ارتباط نوشتم درست نیستن؟

ولی با این کد ها هم میشه ارتباط رو داد ولی تو همون فرم اول, درسته؟؟

اوبالیت به بو
پنج شنبه 23 اسفند 1386, 13:55 عصر
من تاحالا با SQL کار نکردم بنابراین جواب سوال دومتون رو نمی تونم بگم.


البته یه چیز رو فراموش کردم بهتون بگم

منظورشما این بود که کد هایی که برای ارتباط نوشتم درست نیستن؟

ولی با این کد ها هم میشه ارتباط رو داد ولی تو همون فرم اول, درسته؟؟

ارتباط به بانک فرق می کنه.
باید TextBox رو شی ارتباط دهنده (Adodc یا Data) وصل کنید. (به جدول و فیلد مورد نظر)

shahpari
پنج شنبه 23 اسفند 1386, 14:14 عصر
ممنون
از راهنماییتون

shahpari
پنج شنبه 23 اسفند 1386, 16:50 عصر
اجازه بدید بیشتر توضیح بدم

من میخوام از طریق کد نویسی یه ado رو با بانک اطلاعاتی ارتباط بدم و بعد بتونم بر اساس یه فیلد یکتا search کنم تا اینجا مشکلی نیست جستجو هم با درستی انجام میشه ولی در نهایت وقتی که کارمند مورد نظر پیدا شد باید وارد یه فرم دیگه بشم که اطلاعات اون فرد رو بهم نمایش بده

امیدوارم تونسته باشم کامل توضیح بدم فاطمه جان

((یه موقع سو ء تفاهم پیش نیاد اخه خانم وطن دوست تو پیام خصوصی ازم خواستن بیشتر توضیح بدم))

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




FORM1
Private Sub Command5_Click()
On Error Resume Next
If myreco.State = adStateOpen Then Set myreco = Nothing
myreco.CursorLocation = adUseClient
STRSQL = "select * from moshakhasat where id=" & Val(Text4.Text)
myreco.Open "select * from moshakhasat where id=" & Val(Text4.Text) & " ;", mycon
If myreco.RecordCount = 0 Then
MsgBox ("not foumd")
Else
Form2.Show
Unload Me
End If
End Sub




و بعد در FORM -LOAD فرم 2 این کدو بنویس.
به نام CON,MYREC توجه کن.




Private Sub Form_Load()
On Error Resume Next
address = App.Path + "\db12.mdb"
con.Provider = "Microsoft.Jet.OLEDB.4.0"
con.ConnectionString = "Persist Security Info=False;Data Source=" & address
con.Open
MYrec.CursorLocation = adUseClient
MYrec.Open "select * from moshakhasat where id=" & Val(Form1.Text4.Text), con, adOpenDynamic, adLockOptimistic, adCmdText
Text1.Text = MYrec.Fields("code").Value
Text2.Text = MYrec.Fields("no_karmandi").Value
Text3.Text = MYrec.Fields("name").Value
Text4.Text = MYrec.Fields("family").Value
Text = MYrec.Fields("father_name").Value
Text6(0).Text = MYrec.Fields("sh_sh").Value
Text7.Text = MYrec.Fields("tarikhe_tavalod").Value
Text8.Text = MYrec.Fields("mahale_sodor").Value
Text9.Text = MYrec.Fields("nezam_vazife").Value
Text10.Text = MYrec.Fields("taahol").Value
Text11.Text = MYrec.Fields("madrak").Value
Text12.Text = MYrec.Fields("reshte").Value
Text13.Text = MYrec.Fields("onvane_shoghl").Value
Text14.Text = MYrec.Fields("mahale_khedmat").Value
Text15.Text = MYrec.Fields("name_edare").Value
Text16.Text = MYrec.Fields("noe_estekhdam").Value
Text17.Text = MYrec.Fields("sanavat").Value
Text18.Text = MYrec.Fields("tarikhe_hokm").Value
Text19.Text = MYrec.Fields("modate_hokm").Value
End Sub





و اینم کده دکمه بازگشت :




Private Sub Command1_Click()
If MYrec.State = adStateOpen Then MYrec.Close
If con.State = adStateOpen Then con.Close
Set MYrec = Nothing
Set con = Nothing
Form1.Show
Unload Me
End Sub

ali_habibi1384
پنج شنبه 23 اسفند 1386, 20:21 عصر
form1.ado.recordset.find(نام فیلد)
امیدوارم منظورمو متوجه شده باشی

shahpari
پنج شنبه 23 اسفند 1386, 21:40 عصر
ممنون فاطمه جان

برنامه خودم هم درست شد

تو قسمت کد دکمه ورود اشتباهی موقع ارتباط دادن تکس باکس ها و فیلد های بانک
به جای myreco تایپ کردم myrec :گیج: به خاطر همین هر کدی رو هم که تو فرم اول انتخاب
می کردم بازم مشخصات فرد اول رو نشون میداد

لطف کردی

shahpari
پنج شنبه 23 اسفند 1386, 21:45 عصر
form1.ado.recordset.find(نام فیلد)
امیدوارم منظورمو متوجه شده باشی

منظورتون اینه که لزومی نداره برای فرم دوم یه recordset جدید بسازم؟

با همون connection و recordset فرم اول هم میشه؟؟؟

آخه من connection و recordset رو با کد تعریف و مقدار دهی کردم
مگه میشه recordset رو به صورت عمومی تعریف کرد؟؟؟؟:متعجب:

shahpari
پنج شنبه 23 اسفند 1386, 21:50 عصر
این هم برنامه درست شده

شاید به درد کسی بخوره!!!

Mbt925
جمعه 24 اسفند 1386, 03:08 صبح
مگه میشه recordset رو به صورت عمومی تعریف کرد؟؟؟؟:متعجب:

بله میشه.





2- این برنامه داره برای راه آهن نوشته میشه و به هر کسی یه قسمت از برنامه نویسیش داده شده قرار نیست بانک اطلاعاتیم محتویات زیادی داشته باشه وبه دلیل سخت بودن ستاپ گیری ترجیح می دم از اکسس استفاده کنم , مشکل اینجاست که شاید تو یه قسمت دیگه برنامه نویس از بانک sql استفاده کنه این مسئله موقع سر هم بندی برنامه مشکلی پیش نمی یاره؟؟؟؟؟؟؟؟؟؟؟؟؟



همیشه بحث شدن یا نشدن نیست.
این کار اصلا درست نیست.
حداقل باید یه ارتباط یا هماهنگی بین اعضایی که برنامه رو می نویسن باشه تا هماهنگ پیش برن و همچین مشکلاتی رو نداشته باشن.

ali_habibi1384
جمعه 24 اسفند 1386, 04:32 صبح
منظورتون اینه که لزومی نداره برای فرم دوم یه recordset جدید بسازم؟

با همون connection و recordset فرم اول هم میشه؟؟؟

آخه من connection و recordset رو با کد تعریف و مقدار دهی کردم
مگه میشه recordset رو به صورت عمومی تعریف کرد؟؟؟؟:متعجب:
وقتی شما نام خصوصیت فرمی رو می برید خود به خود فرم لود خواهد شد و اتصال به پایگاه داده انجام خواهد شد و تنها کاری که شما قراره انجام بدی پیدا کردن اون داده مورد نظرت هست که میگی auto number هست که اونهم توسط تابع find پیدا میشه:


form1.adodc1.recordset.find("نام فیلد = x")

موفق باشید

shahpari
جمعه 24 اسفند 1386, 10:05 صبح
وقتی شما نام خصوصیت فرمی رو می برید خود به خود فرم لود خواهد شد و اتصال به پایگاه داده انجام خواهد شد
دوست عزیز
با این توضیح شما
نیازی هست که من کد تعریف connection و recordset رو به این شکل تغییر بدم یا نه؟


public myconection as new adodb.connection
public myrecordset as new adodb.recordset

shahpari
جمعه 24 اسفند 1386, 13:44 عصر
سلام

مشکل قبلی حل شد ولی من همچنان منتظر جواب شما هستم جناب ali_habibi1384

و حالا یه مشکل جدید برام پیش اومده که اگه دوستان راهنمایی کنن ممنون می شم

ببینید بانک من دو تا جدول داره:

جدول اول که مربوطه به مشخصات کارمند

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

حالا می خواییم یه کارمند جدید رو اضافه کنیم

با توجه به این مسئله که من از access استفاده کردم و این دو جدول رو توسط

یه فیلد کلید به هم ارتباط دادم پس مسلما با اضافه شدن یه کارمند جدید در جدول اول باید مقدار فیلدهایی مثل کد و نام و نام خانوادگی در جدول دوم هم تکرار بشه و تعداد دفعات استفاده از خدمات هم صفر در نظر گرفته بشه

پس چرا درست نمیشه؟؟

یعنی زمانی که من یه کارمند جدید رو اضافه میکنم

فقط به جدول مشخصات کارمند اضافه میشه!!!
راه حل چیه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

امیدوارم منظورمو درست توضیح داده باشم

shahpari
جمعه 24 اسفند 1386, 19:51 عصر
کسی نمی خواد کمک کنه؟؟؟

shahpari
جمعه 24 اسفند 1386, 20:31 عصر
بله میشه.



همیشه بحث شدن یا نشدن نیست.
این کار اصلا درست نیست.
حداقل باید یه ارتباط یا هماهنگی بین اعضایی که برنامه رو می نویسن باشه تا هماهنگ پیش برن و همچین مشکلاتی رو نداشته باشن.

متاسفانه این هماهنگی نمی خواد بین این برنامه نویسا به وجود بیاد
راستش این برنامه رو دارم برای یکی که تو راه آهن کار می کنه

می نویسم و تخصص خودش تو شبکه هست و اطلاعات کمی درباره وی بی داره

و خیلی عجله داره تازه وقت هم کم داره
البته با همون چند نفر هم که صحبت شده هر کی ساز خودش رو میزنه

گویا بعضی از دوستان دارن برای قسمت بلیط ها و ... برنامه می نویسن

اصرار دارن که حتما از oracle استفاده کنن (به دلیل حجم بالای اطلاعات)

چرا این کار کار درستی نیست؟؟

به هر حال در نهایت قراره همه اون setup شده رو تحویل بدن؟؟

ممنون میشم اگه زود جواب بدید چون من الان پا در هوا موندم تا تکلیف معلوم بشه:ناراحت:

با سپاس

ali_habibi1384
جمعه 24 اسفند 1386, 21:46 عصر
آقای shahpari ما که 24 ساعته آن لاین نیستیم . هر موقع وقت کنیم یه سری به سایت می زنیم. حقوق بگیر سایت هم نیستیم.
در مورد سوالتون باید بگم که وقتی شما یک کوئری از دو جدول داری باید هر دو جدول رو پر کنی نه اینکه یکی پر کنی و منتظر باشی خودش اون جدول رو پر کنه.
در مورد اون سوال دیگه تون هم بگم که شما لازم نیست یه اتصال عمومی تعریف کنی این نمونه رو ببین :


Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DataBase.mdb"
Adodc1.RecordSource = "select * from TableName"
Adodc1.Refresh

این کد در رویداد فرم لود یک فرم نوشته شده و یک ado رو به یک جدول از دیتابیس متصل می کنه .
وقتی شما از فرم دیگه ای یکی از خصوصیات یا اشیاء فرمی رو صدا می کنی در اصل اون فرم رو لود کردی و اتصال کامل شده . حالا برای پیدا کردن اون شماره کارمند کافیست توسط تابع find اون فیلد رو صدا بزنی.
این کار فوق العاده ساده ای هست . نمی دونم دیگه چطوری توضیح بدم . امیدوارم منظور منو فهمیده باشید.
موفق باشید.

shahpari
شنبه 25 اسفند 1386, 13:38 عصر
وقتی شما یک کوئری از دو جدول داری باید هر دو جدول رو پر کنی نه اینکه یکی پر کنی و منتظر باشی خودش اون جدول رو پر کنه.


ممنون از راهنماییتون

همون طور که شما فرمودین باید به هر دو جدول اضافه می کردم مشکلم حل شد

از دوستان کسی نمی تونه راجع به اون مسئله که بین برنامه نویسها از نظر بانک اطلاعاتی هماهنگی نیست کمکی به من بکنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

فقط می خوام بدونم چرا به قول mbt925 این کار درستی نیست که هر برنامه نویسی با بانکی که راحت تره کارش رو انجام بده؟؟؟؟

shahpari
شنبه 25 اسفند 1386, 19:27 عصر
برای اطلاع دوستانی که ممکنه یه همچین سئوالی داشته باشن

جوابی رو که mbt925 لطف کردن و گفتن رو عینا می نویسم



اگه قسمت های برنامه کاملا مستقل از همن مشکلی نیست.
ولی برای بخش های مرتبط با هم کار رو مشکل می کنه.

نه مشکلی توی اجرای برنامه نیست.
ولی در اینکه برنامه ی نهایی اصولی نخواهد بود هیچ شکی نیست.
__________________