سلام به همه دوستان
یه سوال: اطلاعات رو از دیتابیس فیلتر میکنم و توی دیتا گرید نشون میدم.حالا میخوام همین اطلاعات رو توی فایل تکست بریزم.هر رکورد توی یک سطر.به نظر شما چه باید کرد؟
سلام به همه دوستان
یه سوال: اطلاعات رو از دیتابیس فیلتر میکنم و توی دیتا گرید نشون میدم.حالا میخوام همین اطلاعات رو توی فایل تکست بریزم.هر رکورد توی یک سطر.به نظر شما چه باید کرد؟
سلام
اگه از vsflexgrid استفاده کنی (ComponentOne)خودش یه متد واسه ذخیره در فرمتهای txt,xls,html داره ولی اگه از کامپوننت خود وی بی استفاده میکنی باید با حلقه مقادیر رو از گرید بخونی و بریزی توی فایل.
آقا محسن مرسی لی اگه میشه زیر دیپلم صحبت کن. بخدا عقل و شعور ما قد نمیده ها
چشم عزیزم
ببین شما اگه بخوای از کامپوننت استفاده کنی باید یه مجموعه 90 مگابایتی رو دانلود کنی. کار کردن باهاش راحته اگه این روش رو میخوای بگو تا توضیح بدم.
ولی یه راه دیگه اینه که ما خودون دستی این کار رو بکنیم که همین الان توضیح میدم.
شما دیتابست رو به adodc متصل کن بعد این کد رو بنویس:
With Adodc1.Recordset
.MoveFirst
Open "C:\a.txt" For Output As #1
While .EOF = False
For i = 0 To .Fields.Count - 1
a = a & .Fields(i).Value & String$(10, " ")
Next
Print #1, a
a = vbNullString
.MoveNext
Wend
Close
End With
خط چهارم یعنی تا زمانی که به آخر رکورد نرسیدی کدهای زیر رو اجرا کن.
بعد توی یه حلقه به تعداد فیلدها، مقدار هر فیلد رو بعلاوه 10 تا فاصله میریزیم تو متغیر a
a رو توی فایل مینویسیم، خالیش میکنیم چون دفعه بعد هم ازش استفاده میکنیم.
بعد این حلقه تا رسیدن به آخر رکورد انجام میشه.
باز هم اگه جایی رو متوجه نشدی بگو.
متاسفانه توی نت کل مجموعه (محتوی 8 فایل)رو واسه دانلود گذاشتن که حجمش حدودا 850 مگ هست، دانلود ابزار
اما فقط یکیش واسه وی بی هست یعنی C1StudioActiveX_2011v3 و تنها لینکی که براش پیدا کردم این بود، امیدوارم جواب بده.
اگه بازم نتونستیم دانلود کنین بگین تا خودم آپ کنم.
آقا محسن واقعا مرسی.خیلی عالی کامل و جامع.
ولی من یه 2 تا مشکل دارم.
1- فایل از قیل ساخته شده و تو سطر اولش یه اطلاعاتی نوشته.حالا چطوری اطلاعات جدید رو بریزیم تو فایل بدون اینکه سطر اول پاک بشه
2- چطوری میشه هر فیلد رو با فرمت خاصی ریخت توی فایل تکست
خواهش میکنم
1- باید فایل رو به صورت append باز کنی، اینجوری:
Open "C:\a.txt" For Append As #1
2- فکر نکنم نتیجه فرقی داشته باشه! چون در هر صورت به صورت رشته ذخیره میشه. منظورت رو واضح تر بگو شاید درست متوجه نشدم.
آقا مرسی.
درسته همون رشته رو میخوام ذخیره کنه. ولی مثلا میخوام فیلد اولم که ردیف هستش تعداد کارکتر هاش موقع ذخیره سازی 5 تا باشه. حالا توی دیتا گرید مثلا نوشتیم 5. موقع ذخیره سازی بشه 00005.
یا اگر بود 25 موقع ذخیره توی فایل بشه 00025. مثل تکست باکس که براش فرمت مشخص میکنیم
از Format استفاده کنید.
MsgBox Format$(25, "00000")
آقا محسن دستتون درد نکنه. قبلا کار با فرمت رو بهم نشون دادید که خیلی هم بدردم خورده.
اینجا مشکل من اینه که فیلد های دیتا گرید رو که میریزم توی فایل تکست چطوری بهشون فرمت بدم؟
خب سطر ششم رو با این جایگزین کن:
a = a & Format$(.Fields(i).Value, "00000") & String$(10, " ")
آقا شرمنده بخدا.دستت درد نکنه ولی ...
میدونم دارم اذیت میکنما ببخشین تورو خدا
ما 3 تا فیلد داریم توی دیتا گرید. ردیف ، شماره حساب ، مبلغ
ردیف باید فرمت 5 تایی داشته باشه
شماره حساب بدون فرمت(خودش 13 رقم هست)
مبلغ هم باید فرمت 15 تایی داشته باشه
آخر سطر هم 15 تا صفر قرار بگیره
یعنی جمعا توی هر سطر بشه 48 کارکتر
خواهش میکنم این حرفا چیه!
ببین همونیه که میخوای؟
With Adodc1.Recordset
.MoveFirst
Open "C:\a.txt" For Output As #1
While .EOF = False
a = Format$(.Fields(0).Value, "00000") & String$(10, " ")
a = a & .Fields(1).Value & String$(10, " ")
a = a & Format$(.Fields(2).Value, String$(15, "0")) & String$(10, " ")
a = a & String$(15, "0"))
Print #1, a
a = vbNullString
.MoveNext
Wend
Close
End With
آقا واقعا مرسی.بخدا نمیدونم چطوری تشکر کنم.عالی بود آقا عالی
آقا یه سوال دیگه.چطوری میشه وقتی رو یه سطر تو دیتا گرید کلیک کردیم اطلاعاتش توی تکست باکس بالای دیتا گرید نمایش داده بشه؟
اگه میخوای متن سلول رو نشون بدی:
Text1.Text = DBGrid1.Text
با این متد هم میتونی سطر انتخاب شده رو تشخیص بدی:
Text1.text = DBGrid1.Row
آقا مرسی
ولی منظورم این بود که روی هر سطر که کلیک کردم هر فیلدش توی یک تکست باکس نشون داده بشه
دوستان لطفی نمیکنید و سوال ما رو هم یه نیگاه بندازید
خب من روش پیدا کردن سطر انتخاب شده رو بهت گفتم فقط کافیه این کار رو بکنی:
a=DBGrid1.Row
adodc1.recordset.seek a,0
text1.text=adodc1.fields(0)
text2.text=adodc1.recordset.fields(1)
.
.
دوست عزیز با استفاده از این کد میتونی این کارو بکنی
DataGrid1.Columns(0)
بجای 0 شماره ستون مورد نظر رو میذاری
0 هم اولین ستون است
موفق باشی
آقا محسن مرسی.من دستور رو توی رویداد کلیک دیتا گرید نوشتم.موقع اجرا تو سطر دوم از دستور seek ارور میگیره.میگه این متد یا دستور موجود نیست.
اشکال از کجاست؟
seek چیکار میکنه؟
آقا این تیکه کد رو واسه آپدیت اطلاعات نوشتم.
ولی عمل نمیکنه. میشه بگید مشکلش کجاست؟
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\bmi.mdb;Persist Security Info=False"
Adodc1.RecordSource = "SELECT * FROM m2"
Adodc1.Refresh
Set Text7.DataSource = Adodc1
Text7.DataField = "radif"
Set Text8.DataSource = Adodc1
Text8.DataField = "shomarehesab"
Set Text9.DataSource = Adodc1
Text9.DataField = "mablagh"
Set Text1.DataSource = Adodc1
Text1.DataField = "codmarhaleh"
Adodc1.Recordset.Update
DataGrid1.Refresh
توضیحات:
از طریق لود فرم اطلاعت رو میریزم توی دیتا گرید و طبق فرمایش جناب ahashemvp با کلیک روی هر سطر اطلاعات سطر توی تکست باکسها نمایش داده میشن
اگه میخوای تکست باکس رو به adodc وصل کنی نیازی به کد نیست، از properties خاصیت DataSource و DataField رو تنظیم کن. واسه اضافه کردن اطلاعات هم این کد رو بنویس:
with adodc1.recordset
.addnew
.fields(0)="value"
.fields(2)="value"
.update
End with
قبل از استفاده از update باید addnew رو بنویسی.بگید مشکلش کجاست؟
این متد رکورد رو به مکان مشخص منتقل میکنه.seek چیکار میکنه؟
اون کد رو از حفظ نوشتم ممکنه یه اشتباه هایی داشته باشه. از روش آقای Hashemvp استفاده کنید.
دوست عزیز من پیشنهاد میکنم از روش ارایه ای استفاده کنی ک حجم کد نویسی برنامه ات هم کم بشه و خیلی راحت بتونی مشکل رو حل کنی
برای اینکه هر فیلد داخل ی تکس نشون داده بشه از این روش استفاده کن
(ب فرض اینکه تکس باکس ها هم ارایه ای هستن(Index) )
'این کد برای رویداد کلیک دیتا گرید هست و باید توجه کنی ک فیلد مورد نظر با ایندکس تکس یکی باشه
For HvP=0 to text1.Count
text1(HvP).text=DataGrid1.Columns(HvP)
next
برای اپدیت کردن اطلاعات هم وقتی ک توی تکس مقدار رو تغییر داد اصلا نیازی نیست ک با تکس باکس رو adodc در ارتباط بدی چون باعث خطاهای زیادی میشه مستقیم ب خوده adodc فرمان رو بده
'این کد برای اپدیت کردن و جواب هم میده و بهتره ک توی خاصیت های دیتا گرید allow update رو روی false بذاری
for hvp=0 to adodc1.Recordset.RecordCount -1
Adodc1.Recordset.Update HvP, Text1(HvP).Text
next
موفق باشی