PDA

View Full Version : ایجاد فایل تکست از دیتا بیس



syasamboo3
یک شنبه 10 دی 1391, 08:49 صبح
سلام به همه دوستان
یه سوال: اطلاعات رو از دیتابیس فیلتر میکنم و توی دیتا گرید نشون میدم.حالا میخوام همین اطلاعات رو توی فایل تکست بریزم.هر رکورد توی یک سطر.به نظر شما چه باید کرد؟

SlowCode
یک شنبه 10 دی 1391, 11:48 صبح
سلام
اگه از vsflexgrid استفاده کنی (ComponentOne)خودش یه متد واسه ذخیره در فرمتهای txt,xls,html داره ولی اگه از کامپوننت خود وی بی استفاده میکنی باید با حلقه مقادیر رو از گرید بخونی و بریزی توی فایل.

syasamboo3
یک شنبه 10 دی 1391, 19:32 عصر
آقا محسن مرسی لی اگه میشه زیر دیپلم صحبت کن. بخدا عقل و شعور ما قد نمیده ها

SlowCode
یک شنبه 10 دی 1391, 20:09 عصر
چشم عزیزم:بامزه:
ببین شما اگه بخوای از کامپوننت استفاده کنی باید یه مجموعه 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

SlowCode
یک شنبه 10 دی 1391, 20:13 عصر
خط چهارم یعنی تا زمانی که به آخر رکورد نرسیدی کدهای زیر رو اجرا کن.
بعد توی یه حلقه به تعداد فیلدها، مقدار هر فیلد رو بعلاوه 10 تا فاصله میریزیم تو متغیر a
a رو توی فایل مینویسیم، خالیش میکنیم چون دفعه بعد هم ازش استفاده میکنیم.
بعد این حلقه تا رسیدن به آخر رکورد انجام میشه.
باز هم اگه جایی رو متوجه نشدی بگو.

sajjad_india
دوشنبه 11 دی 1391, 01:32 صبح
چشم عزیزم:بامزه:
ببین شما اگه بخوای از کامپوننت استفاده کنی باید یه مجموعه 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

نمیشه این کامپوننت ها رو لینکش رو بزاری دانلود کنیم
مرسی ممنون ازت

SlowCode
دوشنبه 11 دی 1391, 07:38 صبح
متاسفانه توی نت کل مجموعه (محتوی 8 فایل)رو واسه دانلود گذاشتن که حجمش حدودا 850 مگ هست، دانلود ابزار (http://soft98.ir/software/programming/component/3804-ComponentOne-Studio-Enterprise.html)
اما فقط یکیش واسه وی بی هست یعنی C1StudioActiveX_2011v3 و تنها لینکی که براش پیدا کردم این (http://www.firstload.com/?ir=1&fn=c1studioactivex+2011v3+serial#) بود، امیدوارم جواب بده.
اگه بازم نتونستیم دانلود کنین بگین تا خودم آپ کنم.

syasamboo3
دوشنبه 11 دی 1391, 23:23 عصر
آقا محسن واقعا مرسی.خیلی عالی کامل و جامع.
ولی من یه 2 تا مشکل دارم.
1- فایل از قیل ساخته شده و تو سطر اولش یه اطلاعاتی نوشته.حالا چطوری اطلاعات جدید رو بریزیم تو فایل بدون اینکه سطر اول پاک بشه
2- چطوری میشه هر فیلد رو با فرمت خاصی ریخت توی فایل تکست

SlowCode
سه شنبه 12 دی 1391, 00:04 صبح
خواهش میکنم
1- باید فایل رو به صورت append باز کنی، اینجوری:
Open "C:\a.txt" For Append As #1
2- فکر نکنم نتیجه فرقی داشته باشه! چون در هر صورت به صورت رشته ذخیره میشه. منظورت رو واضح تر بگو شاید درست متوجه نشدم.

syasamboo3
سه شنبه 12 دی 1391, 09:56 صبح
آقا مرسی.
درسته همون رشته رو میخوام ذخیره کنه. ولی مثلا میخوام فیلد اولم که ردیف هستش تعداد کارکتر هاش موقع ذخیره سازی 5 تا باشه. حالا توی دیتا گرید مثلا نوشتیم 5. موقع ذخیره سازی بشه 00005.
یا اگر بود 25 موقع ذخیره توی فایل بشه 00025. مثل تکست باکس که براش فرمت مشخص میکنیم

SlowCode
سه شنبه 12 دی 1391, 12:54 عصر
از Format استفاده کنید.

MsgBox Format$(25, "00000")

syasamboo3
سه شنبه 12 دی 1391, 13:40 عصر
آقا محسن دستتون درد نکنه. قبلا کار با فرمت رو بهم نشون دادید که خیلی هم بدردم خورده.
اینجا مشکل من اینه که فیلد های دیتا گرید رو که میریزم توی فایل تکست چطوری بهشون فرمت بدم؟

SlowCode
سه شنبه 12 دی 1391, 14:08 عصر
خب سطر ششم رو با این جایگزین کن:

a = a & Format$(.Fields(i).Value, "00000") & String$(10, " ")

syasamboo3
سه شنبه 12 دی 1391, 16:36 عصر
آقا شرمنده بخدا.دستت درد نکنه ولی ...
میدونم دارم اذیت میکنما ببخشین تورو خدا
ما 3 تا فیلد داریم توی دیتا گرید. ردیف ، شماره حساب ، مبلغ
ردیف باید فرمت 5 تایی داشته باشه
شماره حساب بدون فرمت(خودش 13 رقم هست)
مبلغ هم باید فرمت 15 تایی داشته باشه
آخر سطر هم 15 تا صفر قرار بگیره
یعنی جمعا توی هر سطر بشه 48 کارکتر

SlowCode
سه شنبه 12 دی 1391, 17:05 عصر
خواهش میکنم این حرفا چیه!
ببین همونیه که میخوای؟

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

syasamboo3
سه شنبه 12 دی 1391, 17:34 عصر
آقا واقعا مرسی.بخدا نمیدونم چطوری تشکر کنم.عالی بود آقا عالی

syasamboo3
سه شنبه 12 دی 1391, 17:56 عصر
آقا یه سوال دیگه.چطوری میشه وقتی رو یه سطر تو دیتا گرید کلیک کردیم اطلاعاتش توی تکست باکس بالای دیتا گرید نمایش داده بشه؟

SlowCode
سه شنبه 12 دی 1391, 18:23 عصر
اگه میخوای متن سلول رو نشون بدی:
Text1.Text = DBGrid1.Text
با این متد هم میتونی سطر انتخاب شده رو تشخیص بدی:
Text1.text = DBGrid1.Row

syasamboo3
سه شنبه 12 دی 1391, 20:42 عصر
آقا مرسی
ولی منظورم این بود که روی هر سطر که کلیک کردم هر فیلدش توی یک تکست باکس نشون داده بشه

syasamboo3
جمعه 15 دی 1391, 13:41 عصر
دوستان لطفی نمیکنید و سوال ما رو هم یه نیگاه بندازید

SlowCode
جمعه 15 دی 1391, 14:04 عصر
خب من روش پیدا کردن سطر انتخاب شده رو بهت گفتم فقط کافیه این کار رو بکنی:

a=DBGrid1.Row
adodc1.recordset.seek a,0
text1.text=adodc1.fields(0)
text2.text=adodc1.recordset.fields(1)
.
.

Hashemvp
جمعه 15 دی 1391, 14:05 عصر
دوست عزیز با استفاده از این کد میتونی این کارو بکنی

DataGrid1.Columns(0)

بجای 0 شماره ستون مورد نظر رو میذاری
0 هم اولین ستون است
موفق باشی

syasamboo3
جمعه 15 دی 1391, 19:39 عصر
آقا محسن مرسی.من دستور رو توی رویداد کلیک دیتا گرید نوشتم.موقع اجرا تو سطر دوم از دستور seek ارور میگیره.میگه این متد یا دستور موجود نیست.
اشکال از کجاست؟
seek چیکار میکنه؟

syasamboo3
جمعه 15 دی 1391, 21:20 عصر
آقا این تیکه کد رو واسه آپدیت اطلاعات نوشتم.
ولی عمل نمیکنه. میشه بگید مشکلش کجاست؟
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 با کلیک روی هر سطر اطلاعات سطر توی تکست باکسها نمایش داده میشن

SlowCode
شنبه 16 دی 1391, 11:03 صبح
اگه میخوای تکست باکس رو به adodc وصل کنی نیازی به کد نیست، از properties خاصیت DataSource و DataField رو تنظیم کن. واسه اضافه کردن اطلاعات هم این کد رو بنویس:

with adodc1.recordset
.addnew
.fields(0)="value"
.fields(2)="value"
.update
End with


بگید مشکلش کجاست؟
قبل از استفاده از update باید addnew رو بنویسی.

seek چیکار میکنه؟
این متد رکورد رو به مکان مشخص منتقل میکنه.
اون کد رو از حفظ نوشتم ممکنه یه اشتباه هایی داشته باشه. از روش آقای Hashemvp استفاده کنید.

Hashemvp
شنبه 16 دی 1391, 13:16 عصر
دوست عزیز من پیشنهاد میکنم از روش ارایه ای استفاده کنی ک حجم کد نویسی برنامه ات هم کم بشه و خیلی راحت بتونی مشکل رو حل کنی

برای اینکه هر فیلد داخل ی تکس نشون داده بشه از این روش استفاده کن
(ب فرض اینکه تکس باکس ها هم ارایه ای هستن(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


موفق باشی