ورود

View Full Version : مشکل در آپدیت بانک اکسس



king ag
جمعه 23 تیر 1391, 16:54 عصر
سلام خدمت همه دوستان عزیز
چند تاپیک قبل تر میخواستم بدونم چطور میشه لیست باکس رو به اکسس متصل کرد
در پی اینکه هیچ کس جواب نداد خودم یه ترفندی زدم و با یک سری کلمه کلیدی مقادیر لیست باکس رو از هم جدا کردم و به صورت یک رشته در آوردم
بعد هم موقع آپدیت اطلاعات اون رشته رو تو یک تکست باکس که به بانک متصله میریزم
ولی این وسط دچار یک مشکل بی نهایت عجیب شدم!!!(البته برای خودم)
اطلاعات جدید آپدیت نمیشن مگر اینکه یک فیلد دیگه هم تغییرات توش ایجاد شده
برای درک بهتر یک تکه کد نوشتم و ضمیمه کردم
خواهش میکنم دانلود و راهنماییم کنید
ممنون
موفق و پیروز باشید
------
فقط یک بار اطلاعات به لیست باکس بفرستین چون حوصله نداشتم کد رو طوری نوشتم که فقط اولین رکورد هر لیست باکس رو بگیره

mohammadriano
جمعه 23 تیر 1391, 17:45 عصر
این کار رو انجام بده :
در هنگام باز شدن فرم

Private Sub Form_Load()
Dim i As Long
Dim j As Integer
Data8.Refresh
Data8.Recordset.MoveLast
j = Data8.Recordset.AbsolutePosition
Data8.Refresh
For i = 0 To j Step 1
If Data8.Recordset.Fields("tk").Value <> "" Then list1.AddItem (Data8.Recordset.Fields("tk").Value)
Data8.Recordset.MoveNext
Next i

در هنگام بسته شدن فرم

Private Sub command1_Click()
Dim j10 As Integer
Dim rf As Integer
Dim cl As Integer
cl = 0
Dim clv As Integer
clv = 0
Data8.Refresh
Data8.Recordset.MoveLast
j10 = Data8.Recordset.AbsolutePosition
Data8.Refresh
For rf = 0 To j10 Step 1
If list1.Text = Data8.Recordset.Fields("tk").Value Then clv = 1
Data8.Recordset.MoveNext
Next rf

If clv <> 1 Then
Data8.Recordset.AddNew
Data8.Recordset.Fields("tk").Value = list1.Text
Data8.Recordset.Update
Data8.Refresh
End If
Unload Me
End Sub

البته یادت باشه برای هر listBox باید یک Table جدا اظافه کنید
موفق باشی

king ag
جمعه 23 تیر 1391, 18:03 عصر
من ممنون از این کدی که نوشتین
ولی واقعا مشکل من این نبود
ای کاش شما اول فایل ضمیمه و دانلود میکردین
من مشکلم اینه که لیست باکس رو میخوام تو یک فیلد خلاصه کنم
مستقیم که راهی پیدا نکردم هنوز
ولی از طریق یک ترفند تونستم اینکار رو بکنم
تو یه حلقه تمام آیتم هارو میگیرم و به ته هرکدوم یک کلمه کلیدی که توش عدد جایگاه اون رکورد هست رو میزارم و موقع لود هم از همین راه لود میکنم
اینطوری برا حذف هم مشکلی ندارم
از ظر الگوریتمی همه کارا ردیف شده و درست کار میکنه
فقط مشکل من اینجاست که رشته ای که با الگوریتمم به دست آوردم رو قبل آپدیت تو یک تکست باکس میریزم که از طریق adodc به فیلد مربوطه وصله
ولی وقتی آپدیت میکنم آپدی نمیشه مگر این که یک فیلد دیگه هم توش تغییرات ایجاد شه!!!
فایل ضمیمه پست اول رو که دانلود کنید همه چیز دستتون میاد
بازم ممنون از راهنمایی

mohammadriano
جمعه 23 تیر 1391, 19:00 عصر
Private Sub Command2_Click()
Data.Recordset.Edit
Text42.Text = List1.List(0)
Text43.Text = List2.List(0)
Text44.Text = List3.List(0)
Text45.Text = List4.List(0)
Data.Recordset.Update
Data.Refresh
MsgBox "اطلاعات جدید با موفقیت ذخیره شد"
End Sub

می تونین به جای کنترل Adodc از کنترل data استفاده کنید
البته Data.Recordset.Edit فراموش نشه
موفق باشی

king ag
جمعه 23 تیر 1391, 19:11 عصر
من تا حالا با data کار نکردم
میشه نحوه کانکت شدن به دیتابیس رو با دیتا توضوح بدید؟؟
راستی مطمئنی باز طریق دیتا مشکل حل میشه؟
راهی نیست با adodc این کار انجام بشه؟
آخه من تو فرمم حدود 40 تا تکست دارم که از طریق adodc مدیریت میشن
یه کم دردسر داره همرو با دیتا وصل کنم

mohammadriano
جمعه 23 تیر 1391, 19:23 عصر
من تا حالا با data کار نکردم
ولی من خیلی استفاده کردم

میشه نحوه کانکت شدن به دیتابیس رو با دیتا توضوح بدید؟؟
آره چرا نمیشه
89612

راستی مطمئنی باز طریق دیتا مشکل حل میشه؟
نه ولی ارور دیگه نداد
data و adodc هر کدوم مشکلات خاص خودشون رو دارن(باور کنیم VB6 منسوخ شده)

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

آخه من تو فرمم حدود 40 تا تکست دارم که از طریق adodc مدیریت میشن
چه فرقی میکنه

یه کم دردسر داره همرو با دیتا وصل کنم
درد سر نداره
اگه مشکلتون در فایل ضمیمه ای که آپلود کردید حل شد می تونید adodc رو با data تعویض کنید
موفق باشید

king ag
جمعه 23 تیر 1391, 19:32 عصر
من وقتی همه چی و تنظیم میکنم این اور رو میده
Couldn't find installaion ISAM
فکر کنم مشکل از بخش connect باشه
من از دیتابیس اکسس 2003 استفاده میکنم

mohammadriano
جمعه 23 تیر 1391, 19:42 عصر
دستورات Form_load رو حذف کردید؟
data contorl اکسس 2003 رو هم پشتیبانی می کند
در Properties ـ data قسمت connect رو روی Access 2000 تنظیم کنید
مشکل نداره من امتحان کردم

Veteran
جمعه 23 تیر 1391, 20:38 عصر
مشکل دقیقا چیه ؟
توضیح کامل بدید.

king ag
شنبه 24 تیر 1391, 09:05 صبح
والله مشکل رو در پست اول نوشتم
اگر فایل ضمیمه رو دانلود کنید حتما متوجه میشید
مشکل اصلی این جاست که وقتی یک تکست رو که به سورت دستی وارد نشده میخوام آپدیت کنم آپدیت نمیشه مگر اینکه حداقل فیلد دیگر رو دستی تغییر بدم
ممنون

محسن واژدی
شنبه 24 تیر 1391, 14:48 عصر
سلام علیکم
ضمیمه ویرایش شده زیر را بررسی کنین

همیشه بهتر است یک فیلد از نوع AutoNumber در بانک ایجاد شود (برای جدا کردن حداقل دو جدول با داده های یکسان)
همینطور پیش از ثبت جدید بهتر است با اجرای روال Adodc1.Recordset.AddNew رکورد جدیدی را در بانک ایجاد کنید (در روال اولیه Command2_Click بجای ذخیره شدن داده ها در رکورد جدید همیشه جایگزین فیلد قبلی میشد)
اگر بخواهیم روال Command2_Click را با AddNew جایگزین کنیم میشود:
Private Sub Command2_Click()
With Adodc1.Recordset
.AddNew
.Fields("la") = List1.List(0)
.Fields("lb") = List2.List(0)
.Fields("lc") = List3.List(0)
.Fields("ld") = List4.List(0)
.Update
End With

Adodc1.Refresh
MsgBox "اطلاعات جديد با موفقيت ذخيره شدند"
End Subدر اینصورت به Text-Box های Text42 تا Text45 نیازی نداریم
البته دستور List1.List(0) همیشه اولین آیتم لیست را در رکورد جدید ذخیره میکند، در اینصورت اگر بخواهیم همیشه آیتم جدید به ابتدای لیست های موجود روی فرم اضافه شود میتوانیم روال Command1_Click را بصورت زیر ویرایش کنیم:
Private Sub Command1_Click()
List1.AddItem Text29.Text, 0
List2.AddItem Text30.Text, 0
List3.AddItem Text31.Text, 0
List4.AddItem Text32.Text, 0
End Subدر حال حاضر توضیحات بالا در ضمیمه زیر انجام شده

موفق باشید

king ag
شنبه 24 تیر 1391, 16:21 عصر
خیلی ممنون از راهنمایی
تونستم از راهنماییتون کارم رو انجام بدم ولی قبلش گفتم یک توضیحی بدم برای بستن تاپیک
دلیل از ایجاد تکست ها به خاطر این بود که قصد اصلی من اتصال لیست باکس به بانک اونم با اشغال یک فیلد بود
یعنی در واقع در یک تکست باکس که به بانک وصله با یک تابع در هنگام ذخیره مقادیر لیست باکس رو به یک رشته در میارم و با یک زیرروال به هنگام لود فرم دوباره از همون تکست ها لیست باکس رو پر میکنم
دیگه این به ذهنم نرسیده بود که نیازی نیست از تکست باکس استفاده کنم و میتونم مستقیم داده هارو وارد دیتابیس کنم
در مورد لیست باکس هم چون خیلی این سوال رو دارن به زودی کاری که کردم رو برا دوستان هم به اشتراک میزارم تا بتونند به راحتی ازش استفاده کنند
البته شاید برای شما اساتید کار سختی نباشه ولی مطمئنم خیلی ها دنبال این کار هستند
موفق و پیروز باشید

mohammadriano
شنبه 24 تیر 1391, 16:58 عصر
خیلی ممنون از راهنمایی
تونستم از راهنماییتون کارم رو انجام بدم ولی قبلش گفتم یک توضیحی بدم برای بستن تاپیک
دلیل از ایجاد تکست ها به خاطر این بود که قصد اصلی من اتصال لیست باکس به بانک اونم با اشغال یک فیلد بود
یعنی در واقع در یک تکست باکس که به بانک وصله با یک تابع در هنگام ذخیره مقادیر لیست باکس رو به یک رشته در میارم و با یک زیرروال به هنگام لود فرم دوباره از همون تکست ها لیست باکس رو پر میکنم
دیگه این به ذهنم نرسیده بود که نیازی نیست از تکست باکس استفاده کنم و میتونم مستقیم داده هارو وارد دیتابیس کنم
در مورد لیست باکس هم چون خیلی این سوال رو دارن به زودی کاری که کردم رو برا دوستان هم به اشتراک میزارم تا بتونند به راحتی ازش استفاده کنند
البته شاید برای شما اساتید کار سختی نباشه ولی مطمئنم خیلی ها دنبال این کار هستند
موفق و پیروز باشید
فکر می کنم جواب رو تو پست اولم دادم.
30 دقیقه برای شما کد نویسی کردم بعد گفتین مشکل من این نیست!
عجب!

king ag
یک شنبه 25 تیر 1391, 08:20 صبح
باز هم میگم
از همه شما که راهنمایی کردین متشکرم
اصلا هم قصد بحث در مورد این که مشکلم چی بود ندارم
ولی واقعا مشکلم اونی که شما نوشتی نبود
شما اومدی یک تیبل برای هر لیست باکس اختصاص دادی درصورتی که من برای هر لیست باکس فقط یک فیلد میخواستم
حالا شایدم کوتاهی از من بود که نتونستم به نتیجم از طریق کد شما برسم
باز هم از همه تشکر میکنم